修改tinyproxy做自己的上网代理

标签: tinyproxy 做自己 上网 | 发表时间:2013-10-14 14:11 | 作者:LOGOS
出处:http://www.cppblog.com/
有很多好用的上网代理软件,知名的如squid,小众的如tinyproxy,polipo,3proxy等等。如果只是个人使用,其实哪个都差不多,因为IP端口都属于秘密。如果说一定范围的公众使用,那么squid拥有用户名密码列表的ACL控制,也能满足特定人群的授权。
但是,如果真想做好一个代理服务,任何一个代理软件自带的feature都无法满足复杂的业务需求。就拿squid来说:
  1. 会话超时。一段时间空闲或者关闭浏览器后,重新使用代理服务需要输入用户名密码
  2. 用户VIP业务。用户有不同的付费级别,低级别的用户可能无法访问某些网站
  3. 每个用户的流量统计
要做到这些功能,就必须要对所使用的代理软件进行二次改造。因为我最终选择的是tinyproxy,所以我介绍下tinyproxy的源码和修改点。
tinyproxy采用的是select+fork的多进程模式,polipo是epoll+事件驱动模式。polipo支持长连接和cache,性能上会更好。本来打算修改polipo用的,结果一看事件驱动那代码的绕口程度,就放弃了。相比之下,tinyproxy是一个连接处理一个请求,处理完就关闭,一整套顺序流程,简单明了。
开始说代码,入口总是main:
  1. main.c中的main函数,直接找到child_main_loop。tinyproxy总是通过子进程处理每个请求,以获得较好的并发性能。
  2. child_main_loop在child.c中,调用child_make创建子进程,子进程的主函数是child_main。
  3. child_main中,多个子进程去accept抢请求,抢到之后通过handle_connection处理。
  4. handle_connection中check_acl是tinyproxy检查用户ip的ACL,单我是通过用户名密码做身份验证的,所以用不上。
  5. 自定义的ACL是在get_all_headers后,也就是读取了所有的客户端http headers。从header中取得proxy-authorization,可以检查用户名和密码,取得用户身份什么的。甚至可以从cookie中取出能校验用户身份的内容。
    • 在这一步自定义ACL中,还可以做ip之类的检查,控制会话超时,减免用户的认证频率。
  6. 在process_request的调用中,一般是在config.filter后,参考config.filter的处理,对不同的用户身份给予不同的代理服务。比如免费用户就不要妄想可以看youtube了。
  7. 回到handle_connection,客户端的请求被转发给服务器,然后调用process_server_headers处理服务器的数据返回。
  8. 同样是在process_server_headers中get_all_headers后,取到了所有的服务端返回的http header,这时候可以选择插入Set-Cookie,来增强用户的身份认证。
  9. 最后要统计每个用户的流量,回到handle_connection的relay_connection调用,这里就是纯粹的pipe,这里做好每个用户的数据传输量统计。
好了,我做的就是那么多,通过改代码的方式,为代理服务增加业务功能。squid是epoll+事件驱动模式,其实也都好理解,关键的是能否直观的找到插入自定义代码的地方。
有需要翻土啬的朋友,可考虑一下我的http代理服务,不是VPN或启动客户端这种,只需要将向你提供的自动配置脚本设置到浏览器内即可。

点下方链接,送5天付费版试用,过期后免费版依然可以上推特和google。


LOGOS 2013-10-14 14:11 发表评论

相关 [tinyproxy 做自己 上网] 推荐:

修改tinyproxy做自己的上网代理

- - C++博客-首页原创精华区
有很多好用的上网代理软件,知名的如squid,小众的如tinyproxy,polipo,3proxy等等. 如果只是个人使用,其实哪个都差不多,因为IP端口都属于秘密. 如果说一定范围的公众使用,那么squid拥有用户名密码列表的ACL控制,也能满足特定人群的授权. 但是,如果真想做好一个代理服务,任何一个代理软件自带的feature都无法满足复杂的业务需求.

做自己还是演自己?

- Ryan - 褪墨
生活其实就是一个剧本,我们每一个人都是演员,但这个剧本是很现实的,然而我们很多人都在演自己,而不是做自己. 当我们面对家人、爱人、或朋友的要求的时候,我们容易妥协,就会演自己;当我们不够有信心的时候,也会自己放弃已经坚持一段的道路,变成演自己;当我们恐惧未来的幸福或成就的时候,我们依然会演自己,不够坚持内心的本然.

你在做自己还是演自己?

- - 每日鲜果精选
心理引言:生活其实就是一个剧本,我们每一个人都是演员,但这个剧本是很现实的,然而我们很多人都在演自己,而不是做自己. 当我们面对家人、爱人、或朋友的要求的时候,我们容易妥协,就会演自己;当我们不够有信心的时候,也会自己放弃已经坚持一段的道路,变成演自己;当我们恐惧未来的幸福或成就的时候,我们依然会演自己,不够坚持内心的本然.

Google 把历史搬上网

- Oscar - 爱范儿 · Beats of Bits
 Google 不缺创意,不缺远见也不缺钱,所以它能把公元前三世纪的人类智慧结晶带到网上——这就是《死海古卷》. 《死海古卷》是上世纪最伟大的考古发现,出土于死海附近的昆兰(Khirbet Qumran). 《死海古卷》大部分文字写在羊皮上,是最古老的希伯来文《圣经》抄本. 1946 年,一个牧羊的孩子在放羊的时候发现了一个洞穴,为了看看洞穴有多大,他扔了一块石头进去.

用DNS隧道实现免费上网

- Betula - Creke Blog
大多数机场、酒店之类场所,当你输入一个网址比如www.google.com时,会弹出一个页面要你输入帐号密码才能上网. 这个时候DNS能正确解析,但是上网要付费认证. 可以通过DNS隧道来实现免费上网. (1)找一个支持DNS解析的域名,现在这类免费域名很多,比如tk的、co.cc的. (2)在tk的注册机构里,设置abc123.tk的NS服务器为你自己的主机(最好是Linux VPS),例如:.

你说上网有多耽误事吧

- wwq0327 - 不许联想
自从我不写微博之后,眼前清静了许多,对那些无用的信息的回避让我有很多时间做别的事情. 这段时间,我在分析因为不写微博不看微博究竟失去了什么,事实证明,非但没有失去,反而有了更多时间做些自己想做的事情,那些失去的东西本来就没什么价值. 今天有人跟我说,高晓松酒驾被抓,还有一个新闻是故宫展品失窃. 如果我经常去微博,这类消息肯定是以第一时间知道,可又想了一下,我就是第一时间知道了又怎么了.

评论:不上网,毋宁死

- 鲸 - 互联网的那点事
听说北京的一些咖啡馆、酒吧和餐厅马上就不能上网了. 有关部门规划让店家装一款3000多美元的监控软件. 因为太贵,许多店家表示不愿意装,索性就不提供无线热点(俗称wifi的便是). 我敢笃定这会对生意造成严重影响. 信息时代,人人都是一只蜘蛛,离了网显然就活不了. 五道口一家知名咖啡馆的无线网络已经被要求关闭.

广电总局禁止电视“上网”

- 潜龙入海 - 月光博客
  据21世纪经济报道,广电总局7月14日下发的一则内部通知,禁止一些视频网站与机顶盒厂商合作推出的机顶盒产品,接下来对智能电视的互联网内容监管条例也可能出台.   根据这则内部通知,广电总局要求互联网经机顶盒(DVD机等)向电视机终端提供视听节目服务的,均须按照国务院关于推进三网融合的有关要求,在经批准的试点城市,由广电部门另行组织.

上网能避免浅薄么?

- tiancaicai - 学而时嘻之
(《东方早报·上海书评》,2010年12月19日). 我国成年人平均每天读书的时间越来越短,去年只有14.7分钟,而上网的时间越来越长,超过34分钟. 如果你认为上网也是一种阅读,我们总的阅读时间是逐年增加的. 一个典型的上网者通常同时打开好几个窗口,开着聊天工具,每隔一小段时间就查查电子邮件. 他很少在任何一个网页停留过多时间,页面随着鼠标滚轮上下翻飞.

非校园网IPV6上网配置

- - 启光博客
  关于使用ipv6上网网上教程颇多,有些是真正的IT大牛所写,但多数是随便复制粘贴,根本不知原理,在使用中出现问题也不知如何解决,本博也写过一篇有关IPV6的教程,那篇使用的是上海交大的ISATAP隧道,不过已经不可使用, 详细见此.   对于非校园网来说,使用IPV6上网最主要的不是如何安装IPV6协议或如何修改hosts,而是如何找到一个有效的ISATAP或teredo,之前可使用的国内大学的ISATAP较多,不过现在……,所以本次教程以国外的teredo为例.