预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共18页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

原始套接字是WINSOCK公开的一个套接字编程接口,它让我们可以在IP层对套接字进行编程,控制其行为,常见的应用有抓包(Sniffer)、分析包、洪水攻击、ICMPping等,但它不能截取包(所谓的截取包就是把包拦截下来,要做到这种“防火墙”的功能,还需要再低一层的驱动层才可以做到)。但是能把网络上的包复制到本机就已经是一个很有用的功能了。我就曾经试过在一个局域网里打开我的SNIFFER,然后把同事们电脑发出的包都复制过来了。然后如果再对包进行一些分析,哼哼。。。 其实原始套接字最根本的就是可以在IP层构造自己的IP包,然后把这个IP包发送出去。同样,我们可以把从TCP/UDP传输层过来的包抓取过来并进行分析。。。 要写原始套接字的程序其实也很容易,因为WINDOWS已经帮我们定义实现好了这些接口(WINSOCK)。另外我们还要有一些定义,就是IP包头、UDP包头等的那些结构定义,具体请查看下面的代码。 下面是我定义的一个RawSniffer类,这个类是使用了原始套接字来实现一个侦听器,这个类还依赖于MFC(我一直都在WINDOWS平台下开发,用的比较多的也是MFC,所以对MFC有点偏好。。。)。下面是类的代码: 头文件 #ifndefRAW_DEF_H#defineRAW_DEF_H #include<winsock2.h>#pragmacomment(lib,"ws2_32") #include<ws2tcpip.h>#include<mstcpip.h>//此文件是WindowsplatformSDK的函数,如果找不到,请安装SDK #definePROTOCOL_STRING_ICMP_TXT"ICMP"#definePROTOCOL_STRING_TCP_TXT"TCP"#definePROTOCOL_STRING_UDP_TXT"UDP"#definePROTOCOL_STRING_SPX_TXT"SPX"#definePROTOCOL_STRING_NCP_TXT"NCP"#definePROTOCOL_STRING_UNKNOW_TXT"UNKNOW" //定义IP首部typedefstructip_hdr{unsignedcharh_verlen;//4位首部长度,4位IP版本号unsignedchartos;//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地址}IPHEADER; //定义TCP伪首部typedefstructtsd_hdr{unsignedlongsaddr;//源地址unsignedlongdaddr;//目的地址charmbz;//0charptcl;//协议类型UDP的协议类型为17,TCP为6unsignedshorttcpl;//TCP数据包长度}PSDHEADER; //定义TCP首部typedefstructtcp_hdr{USHORTth_sport;//16位源端口USHORTth_dport;//16位目的端口unsignedintth_seq;//32位序列号unsignedintth_ack;//32位确认号unsignedcharth_lenres;//4位首部长度/6位保留字unsignedcharth_flag;//6位标志位USHORTth_win;//16位窗口大小USHORTth_sum;//16位校验和USHORTth_urp;//16位紧急数据偏移量}TCPHEADER; //定义ICMP首部typedefstructicmp_hdr{unsignedchari_type;//类型unsignedchari_code;//代码unsignedshorti_cksum;//校验码unsignedshorti_id;//非标准的ICMP首部unsignedshorti_seq;unsignedlongtimestamp;}ICMPHEADER; //定义UDP首部//TheUDPpacketislickthis.TookfromRFC768.//0781516232431//+--------+--------+--------+--------+//|Source|Destination