欢迎来到天天文库
浏览记录
ID:14604322
大小:40.00 KB
页数:12页
时间:2018-07-29
《windows 2000下的raw socket编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Windows2000下的RawSocket编程Windows2000在TCP/IP协议组件上做了很多改进,功能也有增强。比如在协议栈上的调整,增大了默认窗口大小,以及高延迟链接新算法。同时在安全性上,可应用IPSec加强安全性,比NT下有不少的改进。MicrosoftTCP/IP组件包含“核心协议”、“服务”及两者之间的“接口”。传输驱动程序接口(TDI)与网络设备接口规范(NDIS)是公用的。此外,还有许多用户模型应用程序的更高级接口。最常用的接口是WindowsSockets、远程过程调用(RPC)和NetBIOS。WindowsSockets是一个编程接口,它是在加州大学伯克利
2、分校开发的套接字接口的基础上定义的。它包括了一组扩展件,以充分利用MicrosoftWindows消息驱动的特点。规范的1.1版是在1993年1月发行的,2.2.0版在1996年5月发行。Windows2000支持Winsock2.2版。在Winsock2中,支持多个传输协议的原始套接字,重叠I/O模型、服务质量控制等。这里介绍WindowsSockets的一些关于原始套接字(RawSocket)的编程。同Winsock1相比,最明显的就是支持了RawSocket套接字类型,通过原始套接字,我们可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。1、创建
3、一个原始套接字,并设置IP头选项。SOCKETsock;sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);或者:s=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);这里,我们设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。创建原始套接字后,IP头就会包含在接收的数据中,如果我们设定IP_HDRINCL选项,那么,就需要自己来构造IP头。注意,如果设置IP_HDRINCL选项,那么必须具有administrator权限,要不就必须修改注册表:HKEY_LO
4、CAL_MACHINESystemCurrentControlSetServicesAfdParameter修改键:DisableRawSecurity(类型为DWORD),把值修改为1。如果没有,就添加。BOOLblnFlag=TRUE;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&blnFlag,sizeof(blnFlag);对于原始套接字在接收数据报的时候,要注意这么几点:1、如果接收的数据报中协议类型和定义的原始套接字匹配,那么,接收的所有数据就拷贝到套接字中。2、如果绑定了本地地址,那么只有接收数据IP头中对应的远端
5、地址匹配,接收的数据就拷贝到套接字中。3、如果定义的是外部地址,比如使用connect(),那么,只有接收数据IP头中对应的源地址匹配,接收的数据就拷贝到套接字中。2、构造IP头和TCP头这里,提供IP头和TCP头的结构://StandardTCPflags#defineURG0x20#defineACK0x10#definePSH0x08#defineRST0x04#defineSYN0x02#defineFIN0x01typedefstruct_iphdr//定义IP首部{unsignedcharh_lenver;//4位首部长度+4位IP版本号unsignedchartos;//
6、8位服务类型TOSunsignedshorttotal_len;//16位总长度(字节)unsignedshortident;//16位标识unsignedshortfrag_and_flags;//3位标志位unsignedcharttl;//8位生存时间TTLunsignedcharproto;//8位协议(TCP,UDP或其他)unsignedshortchecksum;//16位IP首部校验和unsignedintsourceIP;//32位源IP地址unsignedintdestIP;//32位目的IP地址}IP_HEADER;typedefstructpsd_hdr//定义
7、TCP伪首部{unsignedlongsaddr;//源地址unsignedlongdaddr;//目的地址charmbz;charptcl;//协议类型unsignedshorttcpl;//TCP长度}PSD_HEADER;typedefstruct_tcphdr//定义TCP首部{USHORTth_sport;//16位源端口USHORTth_dport;//16位目的端口unsignedintth_seq;//32位序列号unsigne
此文档下载收益归作者所有