您的位置:首页 > 其它

基于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: