- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
redsocks源码阅读
redsocks源码阅读
最近有机会了解和使用了开源软件redsocks,这是一个运行在设备端的代理服务器(proxy server)前端,在linux下能很好地支持iptables,实现系统级的透明代理。
redsocks是单线程的,包括所依赖的库libevent也是单线程的,因此适合运行在资源有限的嵌入式设备上,效率很高。在Android上也有一些应用程序(app)是基于redsocks开发的,比如ProxyDroid是一个Android上的透明代理软件,底层直接使用了redsocks,但是去掉了对DNS、UDP的支持。
redsocks处理网络通信、消息循环、缓冲区管理等都是基于开源库libevent的,因此在阅读 redsocks 源码前应先对 libevent 的 bufferevent、evbuffer 等有所了解,参考手册/~nickm/libevent-book/,据说Google的Chrome浏览器中也用了libevent。
redsocks用C语言写成,全部源码仅有7K余行,可从/darkk/redsocks下载,虽然该开源项目已有两三年没有被维护过,但代码质量很高,可读性也很好。
本文仅针对 http-relay 的情形阅读代码。Evernote上,此处内容有所删改)。
redsocks 创建两个socket,一个是 client 端的,在 redsocks.c 中的 redsocks_accept_client 中,accept 应用程序后得到 client_fd,并基于 client_fd 调用 bufferevent_new 创建了 client- client:
client- client bufferevent_new client_fd, NULL, NULL, redsocks_event_error, client ;
然后调用 bufferevent_enable 设置 read 回调函数:
if bufferevent_enable client- client, EV_READ ! 0 redsocks_log_errno client, LOG_ERR, bufferevent_enable ; goto fail;
然后
if self- relay_ss- connect_relay self- relay_ss- connect_relay client ;
else
redsocks_connect_relay client ;会调用 httpr_connect_relay,挂上读回调函数 httpr_client_read_cb:
client- client- readcb httpr_client_read_cb;
所以 client 那边第一次有数据过来时,也就是 HTTP Request 头过来时,应该是 httpr_client_read_cb 会被调用,在 httpr_client_read_cb 里面从 buffev- input 中逐行读入 HTTP Request 头并分析、复制到 httpr- client_buffer 中,读取完后,connect_relay 被设为 1,先调用 httpr_client_read_content 将紧跟在 HTTP Request 头之后的一些数据也复制到 httpr- client_buffer 中,然后去调用 redsocks_connect_relay。
redsocks_connect_relay 调用 red_connect_relay,其中创建了另一个 socket,即 relay 端的 relay_fd,基于 relay_fd 调用 bufferevent_new 创建了 client- relay,回调函数 redsocks_relay_connected 作为写回调被挂上。
在 redsocks_relay_connected 中,将 httpr_relay_read_cb 和 httpr_relay_write_cb 分别作为 client- relay 的读、写回调被挂上(因此刚才的写回调 redsocks_relay_connected 被顶替掉了),并立即调用写回调 httpr_relay_write_cb,在该函数中将刚才读入到 httpr- client_buffer 中的 HTTP Request 头(及紧跟其后的一些数据)写入到 client- relay 中,其间还处理了认证信息,最后使能了 client- relay 的读事件(这里 buffev 就是 client- relay):
buffev- wm_read.low 1;buffev- wm_r
您可能关注的文档
- 5演示实验.doc
- 5S挂图标语.doc
- 5800程序集锦.doc
- 50张图片,让你知道自然界的生存法则.doc
- 6月护理查房.doc
- 6对设立食品生产企业的申请人规定条件审查记录表.doc
- 6S活动指导书(挂图).doc
- 60年不裂面塑配方.doc
- 5科技创新奖学金申请书1.doc
- 6S挂图.doc
- 第12课 大一统王朝的巩固 课件(20张ppt).pptx
- 第17课 君主立宪制的英国 课件.pptx
- 第6课 戊戌变法 课件(22张ppt).pptx
- 第三章 物态变化 第2节_熔化和凝固_课件 (共46张ppt) 人教版(2024) 八年级上册.pptx
- 第三章 物态变化 第5节_跨学科实践:探索厨房中的物态变化问题_课件 (共28张ppt) 人教版(2024) 八年级上册.pptx
- 2025年山东省中考英语一轮复习外研版九年级上册.教材核心考点精讲精练(61页,含答案).docx
- 2025年山东省中考英语一轮复习(鲁教版)教材核心讲练六年级上册(24页,含答案).docx
- 第12课近代战争与西方文化的扩张 课件(共48张ppt)1.pptx
- 第11课 西汉建立和“文景之治” 课件(共17张ppt)1.pptx
- 唱歌 跳绳课件(共15张ppt内嵌音频)人音版(简谱)(2024)音乐一年级上册第三单元 快乐的一天1.pptx
最近下载
- 2024年政务服务行政办事员职业技能考试题库及答案3.docx
- 2024年政务服务行政办事员职业技能考试题库及答案2.docx
- 2024年政务服务行政办事员职业技能提升题库及答案1.docx
- 小学五年级上册数学期末考试试卷含答案【能力提升】.docx
- 天文知识科普文档.doc VIP
- 相许-卿卿日常配乐-五线谱+简谱.pdf
- 2022江西抚州市政务服务大厅面向社会公开招聘2名行政办事员【共500题附答案解析】模拟检测试卷0.docx
- 2024年政务服务行政办事员职业技能考试题库及答案5.docx
- 中医执业医师资格考试时间2023年.pdf
- 浙教版信息科技五年级上册 第三单元 用算法解决问题 大单元整体教学设计.docx
文档评论(0)