基于winPcap的动态内容阻断
2016-12-14 13:46
148 查看
原贴:http://blog.csdn.net/hit_fantasy/article/details/23613373
首先需要配置Winpcap环境,具体环境包与配置方法到家可以到这里下载:
http://download.csdn href="http://lib.csdn.net/base/dotnet" target=_blank>.NET/detail/hit_fantasy/7187567
实现的功能:
通过协议还原(http),以及网页内容的分析(AC多模式匹配),对于网页加载使用Fin数据包等方法进行阻断。(有点像某墙。。)
流程图如下:
程序的实现过程:
首先调用Build_Ac_Automation 函数,读取文件1.txt 中的模式串建立AC自动机。
之后用pcap_findalldevs_ex 函数打开设备列表,找到可用的设备并pcap_open 函数打开。
接下来就可以抓包了:使用pcap_next_ex函数抓取局域网中的数据包。
每次抓到的包pkt_date,检查其是否为http 的数据包:如果是,则用这整个http 字符串进行AC 匹配,如果成功则将数据包中的TCP 头FIN 分节置1,添加伪首部后计算校验和,然后将这个数据包再次发送,即发送了一个FIN 包。因为一个请求(例如百度主页)会有很次tcp 会话过程,所以发送一个FIN 包能成功阻断它的加载过程。在程序里为了测试阻断是用的while(1)死循环一直发FIN包,这时候可以发现百度主页完全打不开了,而其他网站可以正常打开,即阻断成功。
结果图:
发现发现百度主页打不开了,阻断成功。
因为自己一直在发包:
<
4000
p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;">
分析阻断包中的内容:
可以看出是重发送的Fin包。
存在的问题:
tcp传输是一个很快的过程,尤其对于比较简单的页面。当我们在做AC匹配或者还没构造好Fin包的时候这个TCP会话可能已经自己结束了。幸好现在大多数页面都比较复杂,不止一个TCP包,所以我们可以用这样的方法阻断网页的加载。
考虑到网络路由环境,我们很难捕到别人的连接包(除非你做网关),更别说阻断了。所以这个实现最多模拟一下自己阻断自己,要真正能使用还需要很多的修改。
内容分析也是一个比较复杂的过程,要考虑协议使用什么编码,是否压缩(gzip),是否加密。在我的模拟中没有实现这些,只做了url的匹配
如果要实现完全阻断的话,要根据滑动窗口大小来做预测,这是一个比较难的过程,需要大量工程实践才能搞定。
题外话:
做内容阻断时偶然想到天朝的GFW,不禁感慨万千。whatever,技术是无错吧。
附CodeBlocks工程代码:
http://download.csdn href="http://lib.csdn.net/base/dotnet" target=_blank>.Net/detail/hit_fantasy/7187701
首先需要配置Winpcap环境,具体环境包与配置方法到家可以到这里下载:
http://download.csdn href="http://lib.csdn.net/base/dotnet" target=_blank>.NET/detail/hit_fantasy/7187567
实现的功能:
通过协议还原(http),以及网页内容的分析(AC多模式匹配),对于网页加载使用Fin数据包等方法进行阻断。(有点像某墙。。)
流程图如下:
程序的实现过程:
首先调用Build_Ac_Automation 函数,读取文件1.txt 中的模式串建立AC自动机。
之后用pcap_findalldevs_ex 函数打开设备列表,找到可用的设备并pcap_open 函数打开。
接下来就可以抓包了:使用pcap_next_ex函数抓取局域网中的数据包。
每次抓到的包pkt_date,检查其是否为http 的数据包:如果是,则用这整个http 字符串进行AC 匹配,如果成功则将数据包中的TCP 头FIN 分节置1,添加伪首部后计算校验和,然后将这个数据包再次发送,即发送了一个FIN 包。因为一个请求(例如百度主页)会有很次tcp 会话过程,所以发送一个FIN 包能成功阻断它的加载过程。在程序里为了测试阻断是用的while(1)死循环一直发FIN包,这时候可以发现百度主页完全打不开了,而其他网站可以正常打开,即阻断成功。
结果图:
发现发现百度主页打不开了,阻断成功。
因为自己一直在发包:
<
4000
p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;">
分析阻断包中的内容:
可以看出是重发送的Fin包。
存在的问题:
tcp传输是一个很快的过程,尤其对于比较简单的页面。当我们在做AC匹配或者还没构造好Fin包的时候这个TCP会话可能已经自己结束了。幸好现在大多数页面都比较复杂,不止一个TCP包,所以我们可以用这样的方法阻断网页的加载。
考虑到网络路由环境,我们很难捕到别人的连接包(除非你做网关),更别说阻断了。所以这个实现最多模拟一下自己阻断自己,要真正能使用还需要很多的修改。
内容分析也是一个比较复杂的过程,要考虑协议使用什么编码,是否压缩(gzip),是否加密。在我的模拟中没有实现这些,只做了url的匹配
如果要实现完全阻断的话,要根据滑动窗口大小来做预测,这是一个比较难的过程,需要大量工程实践才能搞定。
题外话:
做内容阻断时偶然想到天朝的GFW,不禁感慨万千。whatever,技术是无错吧。
附CodeBlocks工程代码:
http://download.csdn href="http://lib.csdn.net/base/dotnet" target=_blank>.Net/detail/hit_fantasy/7187701
相关文章推荐
- 基于winPcap的动态内容阻断
- JavaScript基于Ajax实现不刷新在网页上动态显示文件内容
- 基于内容,动态缩放AIR窗口.
- 基于jquery模仿新浪微博的无狭缝滚动2(内容动态加载)
- Google Suggest 基于JS的动态下拉菜单
- 基于XML的动态N级联动
- 在ASP.NET中动态加载内容(用户控件和模板)
- 关于开发高手2004第8期中,<jsp创建基于WEB的动态图表>一文中的些许错误
- 生成含有动态内容的html文件
- 所见即所得编辑器 aynHTML 大全——(一)如何部署、嵌入、装载动态内容
- 动态追加内容的MATLAB plot Legend
- JSP 最佳实践:用 jsp:include 控制动态内容
- 在Codebehind内动态设置显示内容的DataFormatString
- 基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(1)-目录
- 基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(4)-包过滤模块和内容过滤模块
- PHP中静态页处理动态内容的思路
- 在ASP.NET中动态加载内容(用户控件和模板)
- 如何根据下拉列表框的值来给textarea或者其它容器动态的增加内容?
- SAS使用技巧- 动态抓取外部URL的网友内容
- 基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(3)-内容过滤防火墙系统简介