计网实验二 IP数据包捕获程序设计(含截图)

更新时间:2024-05-15 08:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二 IP数据包捕获程序设计

实验报告

班级 xxxx 姓名 xx 学号xxxxx

一、程序源代码:

//接受获取数据包数目 int n;

n=Int32::Parse(textBox2->Text); WSADATA WSAData;

WSAStartup(MAKEWORD(2,2),&WSAData); socket(AF_INET,SOCK_RAW,IPPROTO_IP); sockaddr_in HostAddr; HostAddr.sin_family=AF_INET; hostent *pHostent; char HostName[128]; gethostname(HostName,128); pHostent=gethostbyname(HostName);

HostAddr.sin_addr.s_addr=(*(in_addr*)pHostent->h_addr).s_addr; SOCKET Socket;

Socket=socket(AF_INET,SOCK_RAW,IPPROTO_IP);

bind(Socket,(PSOCKADDR)&HostAddr,sizeof(HostAddr)); int RecvTime=5000; //设置网卡为混杂模式 // 建立于Winsock库a的绑定

// 创建原-始套接字

//获取本地主机名称

// 套接字绑定本地网卡

// 设置接收超时时间

setsockopt(Socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&RecvTime,sizeof(RecvTime)); DWORD dwValue=1;

ioctlsocket(Socket,IOC_VENDOR,&dwValue);

for(int i=0;i

ip_head IpHead = *(ip_head*)RecvBuf; //一次解析IP头的相应字段

textBox1->Text=textBox1->Text+\+\+(i+1)+\

+\版本\+IpHead.Version.ToString()+\ +\总长度\+IpHead.TotalLen.ToString()+\ +\标志位\+IpHead.Identifier.ToString()+\ +\片偏移\+IpHead.FragOffset.ToString()+\

//接数据包

recv(Socket,RecvBuf,sizeof(RecvBuf),0);

}

+\协议\+IpHead.Protocol.ToString()+\ +\源地址\+IpHead.SourceAddr.ToString()+\ +\目的地址\+IpHead.DestinAddr.ToString()+\ +\;

closesocket(Socket); WSACleanup();

二、程序截图:

三、实验心得:

一开始按照指导书代码发现出现好多错误,大部分为变量没有定义之类的,认真从头看来几遍代码才发现;

而且指导书没有指定需要包含的头文件,后来自己百度了一些套接字的相关库文件然后加了上去

当程序能够在实验室成功运行后,回到宿舍用自己电脑发现捕获的ip数据包的数据全部为0,Google了发现RecvBuf[int]的参数值应为1024的倍数,故将其由原来的65535改小为1024后,程序成功运行。

本文来源:https://www.bwwdw.com/article/ho07.html

Top