open***是一个虚拟网卡和SSL相结合的***框架,使用虚拟网卡得到协议栈封装数据,然后通过ssl协议发送出去,此中重点在于:1.得到数据;2.得到的数据是协议栈封装好的数据;3.通过openssl的接口进行发送。如果一个客户终端没有虚拟网卡的支持,或者没有openssl库,那么open***将运行不起来,然而没有openssl的问题好解决,装一个就是了,没有虚拟网卡支持的问题就不好解决了,毕竟支持虚拟网卡需要操作系统内核的驱动程序,安装这个驱动程序要看操作系统同意与否,比如在linux上需要root权限,在windows2008之类的系统上需要微软签名等等,实为不便,于是考虑到stunnel的方式,在第七层设置一个代理,可以实现本地代理的方式而完全不使用open***,比如使用stunnel监听一个端口1234,然后将***的数据重新定向到这个1234端口,可以通过设置代理的方式,也可以通过iptables的REDIRECT的方式,可是又有问题了,这种方式虽然可以拿到需要代理的数据,然而由于***的server端需要识别客户端的“虚拟IP地址”,而stunnel却不支持这个虚拟ip地址,它完全就是一个应用层的代理程序,比如在服务端架设一台open***服务器,启动后其虚拟ip地址是172.16.1.1,它所接收到的数据是客户端传来的ip数据报或者以太帧,其携带的源ip必然要是172.16.1.0/24网段的才行,stunnel做不到这一点,因此必然需要一种办法,不使用虚拟网卡,又必然要支持虚拟网络。
     其实这个问题也好办,我们可以自己封装ip数据报或者以太帧,比如使用基于python的scapy就可以很方便的封装任意的ip数据报或者以太帧,我们需要做的仅仅是将从scapy和open***结合起来,并且修改open***从虚拟网卡的字符设备读取数据为从scapy读取数据,然后再写一个一切和虚拟网卡接口的实现,比如ifconfig之类,实现此ifconfig的时候,我们不必配置真的虚拟网卡,而是保存ip地址,掩码信息以及mac信息在一个数据结构中,然后scapy封装数据报或者数据帧的时候从该数据结构取出即可,另外要做的就是在本地起一个代理服务,这是为了抓取需要通过***的裸数据。因此过程称为:
1.修改后的open***+scapy侦听1234端口;
2.修改浏览器的代理为本地的1234端口;
3.发送http请求,然后被open***+scapy得到;
4.open***+scapy通过open***服务器push过来的虚拟网络配置信息封装数据报(tun)或者数据帧(tap);
5.scapy封装好的数据通过修改后的open***的tun.c中tun_read函数进入open***;
6.至此,open***丝毫不能确定数据来自虚拟网卡还是别的;
7.一切按照正常的流程通过ssl发送;
8.如果有数据报回复,依然通过将修改后的tun_write将数据报(tun)或者数据帧(tap)发送给scapy,然后截掉协议头信息;
9.将裸数据发送给浏览器,浏览器显示之。
要点:
1.如果觉得python性能不够,完全可以重新以本地语言c实现scapy;
2.本地代理服务要完全与stunnel的前期行为相似,一定保存好session之信息,只是stunnel代理客户连接了真实的服务器,而open***+scapy却将数据直接交给了scapy。
     总结起来就是,虚拟网卡仅仅是获取数据的一种方式,通过本地代理或者远程代理获取数据然后在用户空间封装成ip数据报或者以太数据帧终成的数据是获取数据的另外一种方式,可见必有第三种方式和第四种,因此将tun.c的接口抽取出来和实现相分离是一个很好的方向,后期可以将openssl也作为发送接口的一种方式,而其它的ssl实现可以作为另一种方式,至此,open***就完全变成了两部分的固定接口:1.获取封装好的数据;2.通过ssl发送数据,然后1和2的实现作为钩子提供给实现者,保留一个默认的实现,那就是以虚拟网卡技术实现1,并且以openssl实现2。

转载于:https://blog.51cto.com/dog250/1271139

Open×××的新钩子设计相关推荐

  1. 上新|设计开发在线协同工具墨刀「设计画布」全新发布

    哈喽,刀友们,我们又见面啦! 老朋友们都知道,墨刀创立7年以来,陆续推出了原型.设计.流程图.思维导图等产品,墨刀的产品体系不断得到完善. 今天,墨刀大家庭再添新成员,一款为设计&开发量身打造 ...

  2. 新产品设计和产品研发的流程有哪些?

    每一个新品的生产都需要初期设计和产品研发,每一个公司的新产品设计和产品研发都要根据严格流程来组织.新产品设计精英团队都具有自身的工作步骤,不管是不是最有效,它是不是体现了较大的使用价值,但只需这一步可 ...

  3. 新拟态设计html,新拟态UI设计怎么做?来用Neumorphism在线工具吧

    新拟态UI设计怎么做?来用Neumorphism在线工具吧 2月 26, 2020 发表于: 设计工具. 评论 Sponsor ​新拟态UI设计(Neumorphism / soft ui)在近段时间 ...

  4. “航天组”新赛道设计邀请赛

    中国航天科工集团第三研究院 "航天组"新赛道设计邀请赛 一.征集项目 "航天组"全新赛制与赛道的创意设计邀请赛:我们鼓励参赛选手能够以未来.科技.智能为灵感,设 ...

  5. OMG!我居然把新首页设计出来了!

    几乎快一年了,我一直在不断的更改正式版的内部设计,不厌其烦.每一次都在前一次的基础上进行改进,还没发布,每个应用的界面都进行了无数次版本的升级.终于在前段时间,整个UI框架稳定下来了,统一下来了,每个 ...

  6. 超全面!新晋设计神器Figma 深度评测

    Figma Figma 是最近才出的一款设计软件,我原以为它不过是又一个拿着「团队协作」当噱头,实际无法当作为生产力工具使用的玩具.然而在有限的几天时间试用后,我的想法改变了,比起玩票的前辈们,Fig ...

  7. 盖国强:Oracle12c新特性设计与开发实现

    在第二天上午的专场四,来自云和恩墨创始人盖国强,同时他也是Oracle ACE总监.ITpub超级版主带来了<Oracle12c :新特性的设计与开发实现>主题演讲.在这个主题中,和大家分 ...

  8. 360新logo设计的考虑因素

      根据大家的意见,我们对标识做了调整,现在球体上下两部分较之原先更透亮了,十字部分也更突出. 在360新标识的线稿上线投票之后,我们收到了广大用户对于新标识线稿的意见和建议.很多用户对线稿的样式提出 ...

  9. google velvet_LG Velvet 5G值得推出新的设计方向

    google velvet It's been a while since I've carried an LG phone that might draw stares. Over the year ...

最新文章

  1. SNMP 协议 OID的使用
  2. python list 和矩阵的切片
  3. linux tomcat连接mysql步骤_linux系统下tomcat的安装步骤
  4. why approver preview in Document builder is empty
  5. mysql动态标签可以嵌套吗_Mysql动态嵌套游标
  6. WPF中打印问题的探讨[转]
  7. 第一次失效_特斯拉螺栓腐蚀失效分析_搜狐汽车
  8. 第一章数据库设计规范
  9. 使用struts2来防止表单重复提交
  10. Linux对象文件是个啥东东
  11. 机器学习之数据转换(七)——降维
  12. 如何提高使用物联网卡应用的安全性
  13. 爬虫实例十三 教你怎么用爬虫一次给女朋友拿下28万张情侣头像
  14. 如何解决卸载驱动之后又重新装的问题
  15. 大话FPGA-“万能的芯片?”
  16. AI语音交互机器人,揭秘你不知道的隐藏功能
  17. 你知道腾讯程序员一年写多少代码嘛?
  18. 并行查询的执行计划解读
  19. 转载:optparse模块OptionParser学习
  20. 如果早晚都要死去,为什么还要活着?

热门文章

  1. J2ME程序开发新手入门九大要点
  2. 微型计算机的评估指标,T∕CECA-G 0060-2020 “领跑者”标准评价要求 微型计算机(9页)-原创力文档...
  3. hdu 2058 枚举区间和个数
  4. SPOJ 2713 线段树(sqrt)
  5. hdu2722 简单最短路,处理好输入就行
  6. 【错误记录】AS 编译报错 ( Android Support plugin 版本太高 | 升级 Android Studio 到最新版本 )
  7. 【错误记录】前台进程报错 ( Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE )
  8. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )
  9. 深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数
  10. 使用html5 Geolocation显示你的地理位置