可以发送任意包的网络协议学习工具
一、动因
我们在学习网络协议的时候,比如看tcp/ip详解,很多时候需要构造一个自定义包发送然后观察结果,
可以发送任意包的网络协议学习工具
。观察的话最好的工具当然是wiresharp,相当的给力。但是很多时候我们需要发送一个自定义的包,比如发送arp包,观察返回的地址,发送自定义的tcp包,观察相应时间,各种坚持的时间,滑动窗口变化等等。我们都知道在winxp后,已经不能使用raw_socket 构造,除非你写一个自己的网络驱动。所以,曾经找到过一个hping ,有windows 的版本,但是好像怎么也用不了。所以自己写了一个。使用的是wincap 库,使用这个工具的前提是你要安装wincap.自己去下载。下面介绍一下基本操作,程序就一个exe文件,win界面,三个区域,分别是发送区,监视区和设置要捕获的包的过滤条件,当然都比较简单的过滤条件。这个小程序的功能就是可以自定义发送apr包,tcp包,udp包,icmp包,可以定义包中的各个字段。并且可以开启监视功能,发送的包会被记录,返回的包也会被记录并被显示(适用于winxp以上操作系统)
二、基本操作
1 发送区(填好各种字段后,发送就可以)
2 监视过滤区
3 监视输出区(如果你发送一个apr包,可以看到,马上收到一个返回,并且能看到你发送的包)
三、一些经验
1、TCP,UDP的检验和应该包括其中的数据,而IP头的检验和只应该计算IP头部
ip: ipHeader.checksum = Checksum((USHORT*)szSendBuf, sizeof(ipHeader));
tcp: tcpHeader.th_sum = Checksum((USHORT*)szSendBuf, sizeof(psdHeader) + sizeof(tcpHeader)+strlen(data));
2、IP头部的长度,应该除以4
ipHeader.h_len = (4<<4 | sizeof(ipHeader)/sizeof(unsigned long)); //要除4(32BIT)
3、要注意网络字节顺序和windows循序的的不同,大端模式,高位存放高字节,小端则反之
ipHeader.sourceIP=inet_addr(szIP);