教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

socket抓包程序实验报告

来源:网络收集 时间:2026-09-04
导读: mfc写的抓包程序,抓ip,tcp,udp,icmp,并显示首部信息 《网络编程与协议分析》课程设计报告 一、课设题目: 局域网数据包抓取与分析软件 二、课设要求: 1) 抓取本地主机所在局域网子网内的所有数据包 2) 分析并显示所抓取数据包的IP头部各字段的信息 3) 分

mfc写的抓包程序,抓ip,tcp,udp,icmp,并显示首部信息

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

一、课设题目:

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

二、课设要求:

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;

addr.sin_family=AF_INET;

addr.sin_port=htons(5000);

struct hostent FAR * pHostent;

char FAR name[25];

gethostname(name, 25);

pHostent = gethostbyname(name);

memcpy(&addr.sin_addr.S_un.S_addr,pHostent->h_addr_list[0],pHostent->h_len);

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

mfc写的抓包程序,抓ip,tcp,udp,icmp,并显示首部信息

{ } 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; } return true;

2)初始化表格

BOOL CTestDlg::ListInit()

{

DWORD dwStyle = GetWindowLong(m_List.m_hWnd, GWL_STYLE); SetWindowLong(m_List.m_hWnd,GWL_STYLE,dwStyle|LVS_REPO); DWORD dwStyles = m_List.GetExStyle();

dwStyles &= ~LVS_EX_CHECKBOXES;

m_List.SetExtendedStyle(dwStyles|LVS_EX_FULLROWSELECT|LVXGRIDLINES);

m_List.InsertColumn(1,"版本",LVCFMT_CENTER,40,0);

m_List.InsertColumn(2,"头部长度",LVCFMT_CENTER,60,1);

m_List.InsertColumn(3,"服务类型",LVCFMT_CENTER,60,2);

m_List.InsertColumn(4,"总长度",LVCFMT_CENTER,50,3);

m_List.InsertColumn(5,"标识符",LVCFMT_CENTER,50,4);

m_List.InsertColumn(6,"标志位",LVCFMT_CENTER,50,5);

m_List.InsertColumn(7,"片偏移",LVCFMT_CENTER,50,6);

m_List.InsertColumn(8,"生存周期",LVCFMT_CENTER,60,7);

m_List.InsertColumn(9,"协议",LVCFMT_CENTER,40,8);

m_List.InsertColumn(10,"首部校验和",LVCFMT_CENTER,80,9);

m_List.InsertColumn(11,"源地址",LVCFMT_CENTER,100,10);

m_List.InsertColumn(12,"目的IP地址",LVCFMT_CENTER,100,11);

}

return true;

3)ip,tcp,udp,icmp头部定义

mfc写的抓包程序,抓ip,tcp,udp,icmp,并显示首部信息

struct iphead

{

unsigned char ip_EdiAndLen; //版本&首部长度

unsigned char ip_Serve; //服务类型

unsigned short int ip_Len; //总长度

unsigned short int ip_Sign; //标识

unsigned short int ip_MarkAndMove; //标识&片偏移

unsigned char ip_Ttl; //生存时间

unsigned char ip_Protocol; //上层协议

unsigned short int ip_Sum; //首部校验和

unsigned int ip_SoIp; //源ip

unsigned int ip_DeIp; //目的ip

};

struct tcphead

{

unsigned short tcp_SoPort; //16位的源端口

unsigned short tcp_DePort; //16位的目的端口

unsigned int tcp_Seq; //32位的序列号

unsigned int tcp_Ack; //32位的确认号

unsigned char tcp_LenAndRes; //4位的首部长度和4位的保留字 unsigned char tcp_Flag; //2位的保留字和6位的标志位 unsigned short tcp_Win; //16位的窗口大小

unsigned short tcp_Wum; //16位校验和

unsigned short tcp_Mov; //16位的紧急数据偏移量

};

struct udphead

{

unsigned short udp_SoPort; //源端口

unsigned short udp_DePort; //目的端口

unsigned short udp_Len; //总长度

unsigned short udp_Sum; //校验和

};

struct icmphead

{

unsigned char icmp_Type; //类型

unsigned char icmp_Code; //代码

unsigned short icmp_Sum; //16位检验和

};

4)“开始”按钮事件

mfc写的抓包程序,抓ip,tcp,udp,icmp,并显示首部信息

void CTestDlg::OnStart()

{

// TODO: Add your control notification handler code here

DWORD code;

if (!GetExitCodeThread(m_thr,&code) || (code != STILL_ACTIVE))

{

alldata * recvdata=new alldata;

recvdata->lis=&m_List;

recvdata->sock=m_sock;

m_thr=CreateThread(NULL,0,RecvProc,(LPVOID)recvdata,0,NULL); CloseHandle(m_thr);

}

else

{

m_List.DeleteAllItems();

ResumeThread(m_thr);

}

GetDlgItem(IDC_STOP)->EnableWindow(TRUE);

GetDlgItem(IDC_START)->EnableWindow(FALSE);

GetDlgItem(IDC_STOP)->SetFocus();

}

5)数据包抓取与初步处理

DWORD WINAPI CTestDlg::RecvProc(LPVOID lpParameter)

{

SOCKET sock=((alldata*)lpParameter)->sock;

CListCtrl * lis=(CListCtrl *)(((alldata*)lpParameter)->lis);

struct iphead *ih;

SOCKADDR_IN tem;

char RecvBuf[65535] = {0};

char soip[16];

char deip[16];

char buf[100];

int i=0;

while(1)

mfc写的抓包程序,抓ip,tcp,udp,icmp,并显示首部信息

if(int a=recv(sock,ddat[++count].buff,sizeof(ddat[count].buff),0)<=0) continue; ih=(struct iphead *)(ddat[count].buff); tem.sin_addr.s_addr=ih->ip_SoIp; strncpy(soip,inet_ntoa(tem.sin_addr),16); tem.sin_addr.s_addr=ih->ip_DeIp; strncpy(deip,inet_ntoa(tem.sin_addr),16); lis->InsertItem(i, "fdgfg"); sprintf(buf,"%d",ih-> …… 此处隐藏:6465字,全部文档内容请下载后查看。喜欢就下载吧 ……

socket抓包程序实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1810070.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)