课程设计分析为了获取网络中的IP数据包,必须对网卡进行编程,在这里我们使用套接字(socket)进行编程。但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式出发的数据包。对于其他形式的数据包,如已到达网络接口但却不是发送到此地址的数据包,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。我们要想获取流经网络设备的所有数据包,就需要将网卡设置为混杂模式。本程序主要由三部分构成:初始化原始套接字,反复监听捕获数据包和解析数据包。下面就结合核心代码对程序的具体实现进行讲解,同时使程序流程更加清晰,去掉了错误检查等保护性代码。1. 使用原始套接字套接字分为三种,即流套接字(Stream Socket)、数据报套接字(Datagram Socket)和原始套接字(Raw Socket)。要进行IP数据包的接受与发送,应使用原始套接字。创建原始套接字的代码如下:SOCKET sock;Sock=WSASoccet(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0