在局域网进行IP包捕获的一种方法

在局域网进行IP包捕获的一种方法,第1张

在局域网进行IP包捕获的一种方法,第2张

首先是几种结构的定义(网上搜索或查阅相关文献):

er = 1 >//定义IP地址结构
结构IP地址
{
无符号短IP _ a,
IP _ b,
IP _ c,
IP _ d;
};

//定义IP数据头的结构
struct IP _ header
{
unsigned short IP _ version,/*IP的版本号*/
IP _ HDR _ len,/*IP头的长度*/
IP _ tos/* IP包的服务类型*/
IP _ total _ len,/* IP包的总长度*/
IP _ ID,/* IP包段标识符*/
ip_flags,/。/*IP数据包的校验和*/

Struct IP address IP _ src _ addr,/* IP数据包的源IP地址*/
IP _ dest _ addr;/* IP数据包的目的IP地址*/
} IP header;

//IP包的链表结构
struct stru _ IP _ link
{
char RCV _ IP _ BUF[max _ IP _ size];
struct stru _ IP _ link * next;
};

然后是协议的定义(包括对应的头文件#include #include):

Ord dwcontrolcode = SiO _ rcvall,/*接收所有IP数据包*/
dw protocol = IP proto _ IP;/*协议类型是IP*/

然后是相应的捕获处理:

1.加载Winsock;

2.创建套接字连接以接收原始IP数据包;

3.绑定到接口;

4.设置WSAIoctl并接收所有IP数据包。

参考代码:

if (WSAIoctl(s,dwIoControlCode,&optval,sizeof(optval),
NULL,0,&dwBytesRet,NULL,NULL) == SOCKET_ERROR)
...

5.然后设置一个线程来捕获:

(1)创建用于接收IP分组的链表头;
(2)设置一个标识符,如果为真,则连续捕获IP包;
(3)建立一个新节点,将捕获的数据包添加到该节点;
(4)如果链表长度达到指定长度,则创建一个线程解析链表的IP包;当IP包的链表小于给定长度且IP捕获停止时,设置另一种处理链表的方法;
(5)为下一个IP数据包链表创建一个链表头。

6.建立一个线程解析并显示IP包,解析IP包,然后显示IP包。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 在局域网进行IP包捕获的一种方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情