标签归档:WinPcap

乱发数据包

这是去年写的一个用于干扰教学的工具。

Computer Networks 这门课,需要用到 Wireshark 这个抓包软件查看网络流量。
写了这玩意,通过广播一些特制的数据,可以在其他人的机子上刷出点有趣(?)的东西:在 Wireshark 上刷奇怪的东西

如图,一眼就能看出不正常.. 其实就是乱发 HTTP Response,并把原来显示状态码(200、404 …)的部分,改成了其他文字…

由于需要发,用了 WinPcap,它提供了一些 API 能够比较方便地跳过系统的协议栈,让网卡发送完全自定义的数据。这里使用了它的一个 Python 绑定 winpcapy

最后需要发送的是以太网帧,也就是说,要自己从 HTTP、TCP、IP 一路构建下来。为了简化工作使用了 dpkt ,里面提供了丰富的协议支持,能很方便地构建数据包。

一点小细节:Wireshark 会分析 TCP 协议,并把不正常的包用红色标出。为了避免这样,每个包的目的端口都是随机选取的,让 Wireshark 认为每个包都属于不同的 TCP 会话。当然换成随机的 IP 也没问题。

代码贴 Gist 上了 Gist 9721330

玩法:

  1. 下载安装 Python 2.7 和 WinPcap
  2. 下载打包的好的工具;
  3. 运行net_test.py得到网卡列表和对应的地址(e.g rpcap://\Device\NPF_{x-x-x-x-x});
  4. 运行net_test.py rpcap://\Device\NPF_{x-x-x-x-x}发送。
    完整用法是net_test.py <interface> [repeat_times [message]],可选重复次数与消息内容(默认是 5 次、发送随机表情)。

注意需要管理员权限,系统如有开 IP Forwarding 功能需关闭

代码不复杂,想玩更多花样可以自己改..
注意这样不按协议标准发数据的事.. 还是少做得好.. 玩玩就好,切勿滥用..

用 pcap_sendpacket 时别开 IP Forwarding

至少在我 Windows 7 下是这样的,用 pcap_sendpacket() 时别开系统的 IP forwarding 功能。
否则的话.. 包不会直接被送出去,而是会被系统路由一次再发。发生这种情况时,发送一个包,在本机会抓到两个包:前者没问题;后者 TTL 减一,源 MAC 和 目的 MAC 可能会被修改。但只有后一个包会被送出本机。

IP forwarding 默认是关闭的,修改注册表项HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter开启或关闭。启用后系统就成了个路由器,会根据路由表转发目标IP不是自己的包。我也忘了当时为什么开启来了。

不知道这是个例还是 WinPcap 的 bug ,别告诉我这是个 feature 就行…