全球旧事资料 分类
实验三发送TCP数据包
实验目的:
设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构使大家对TCP协议的工作原理有更深入以及TCP协议与IP协议的关系,的认识。

实验要求:
本程序的功能是填充一个TCP数据包,并发送给目的主机。以命令行形式运行:Se
dTCPsource_ipsource_portdest_ipdest_port其中Se
dTCP为程序名;source_ip为源IP地址;source_port为源端口;dest_ip为目的IP地址;dest_port为目的端口。其他的TCP头部参数自行设定。数据字段为“Thisismyhomeworkof
etwork”成功发送后在屏幕上输出“se
dOK”。
课程设计分析:
使用原始套接字定义IP头部、TCP头部和伪头部的数据结构填充数据包发送数据包
设计思想:
本课程设计的目标是发送一个TCP数据包,可以利用原始套接字来完成这个工作。整个程序由初始化原始套接字和发送TCP数据包两个部分组成。创建一个原始套接字,并设置IP头选项SOCKETsocksocksocketAF_INETSOCK_RAWIPPROTO_IP或者:sockWSASoccketAF_INETSOCK_RAWIPPROTO_IPNULL0WSA_FLAG_OVERLAPPED
f设置SOCK_RAW标志,表示我们声明的是一个原始套接字类型。为使用发送接收超时设置必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。其中flag设置为ture,并设定IP_HDRINCL选项,表明自己来构造IP头。注意,如果设置IP_HDRINCL选项,那么必须具有admi
istrator权限,要不就必须修改注册表:HKEY_LOCAL_MACHINESystemCurre
tCo
trolSetServicesAfdParameter修改键:DisableRawSecurity(类型为DWORD),把值修改为1。如果没有,就添加。BOOLFlagTRUEsetsockoptsockIPPROTO_IPIP_HDRINCLcharFlagsizeofFlagi
ttimeout1000;setsockoptsockSOL_SOCKETSO_SNDTIMEOchartimeoutsizeoftimeout在这里我们使用基本套接字SOL_SOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时时间设置为1000ms。构造IP头和TCP头
这里,IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。
计算校验和的子函数
在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下:
USHORTchecksumUSHORTbufferi
tsizeu
sig
edlo
gcksum0whilesize1cksumbuffersizesizeofUSHORTifsize
fcksumUCHARbuffercksumcksum16cksum0xffffcksumcksum16retur
USHORTcksum
程序流程图:
开始
构造原始套接字,并初始化
填充IP头部
计算IP头部检验r
好听全球资料 返回顶部