可以发送任意包的网络协议学习工具

一、动因 

 我们在学习网络协议的时候,比如看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);

 

四、下载

src: https://files.cnblogs.com/xiongwjw/SendAnyPacket_src.zip

bin: https://files.cnblogs.com/xiongwjw/SendAnyPacket_bin.zip

  这是对大家熟悉网络协议很有用的小工具,看源代码,知道如何一点点构造一个包,如何获取一个包然后分析里面的每一个字节模块,是挺好玩的事情。用c++写。希望大家喜欢。

posted on 2012-08-26 23:41  西瓜头  阅读(1595)  评论(3)    收藏  举报