2024年4月2日发(作者:)

socket抓包程序实验报告

《网络编程与协议分析》课程设计报告

一、课设题目:

局域网数据包抓取与分析软件

二、课设要求:

1) 抓取本地主机所在局域网子网内的所有数据包

2) 分析并显示所抓取数据包的IP头部各字段的信息

3) 分析并显示所抓取数据包的封装在IP数据包内的协议头部字段信息(TCP、

UDP、

ICMP等)

4) 生成日志信息,以文本文档形式保存

三、部分代码

1)初始化套接字

BOOL CTestDlg::SockInit()

{

WSADATA wsa;

if(WSAStartup(MAKEWORD(2,2),&wsa)!=0)

{

AfxMessageBox("WSAStartup fail!");

}

m_sock=socket(AF_INET,SOCK_RAW,0);

if(m_sock==INVALID_SOCKET)

{

AfxMessageBox("socket fail!");

}

SOCKADDR_IN addr;

_family=AF_INET;

_port=htons(5000);

struct hostent FAR * pHostent;

char FAR name[25];

gethostname(name, 25);

pHostent = gethostbyname(name);

memcpy(&_addr.S_un.S_addr,pHostent->h_addr_list[0],pHostent-

>h_len);

if(bind(m_sock,(SOCKADDR *)&addr,sizeof(addr))!=0)

{

AfxMessageBox("bind fail!");

}

DWORD dwBytesRet;

unsigned int optval = 1;

int pCount=0;

if(INVALID_SOCKET==(WSAIoctl(m_sock,SIO_RCVALL,&optval,sizeof(optval

),

NULL, 0, &dwBytesRet, NULL, NULL)))

{

AfxMessageBox("WSAIoctl Fail!");

return false;