logo资料库

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

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
《网络编程与协议分析》课程设计报告
一,课设题目:
二、课设要求:
三、部分代码
1)初始化套接字
2)初始化表格
3)ip,tcp,udp,icmp头部定义
4)“开始”按钮事件
5)数据包抓取与初步处理
6)表格单击事件
7)“停止”按钮事件
四、程序截图
(1)“开始”(2)“停止”
(3)TCP
(4)UDP
(5)ICMP
五、课设小结
计算机科学与技术学院课程设计成绩单 课程名称: 姓名 综合成绩 性别 学号 班级 指导教师: 成绩等级 程序运行情况 (占总成绩 20%) □能正确运行 (20 分) □基本能正确运行 □能运行但结果不完善 (15 分) (10 分) 程 序 功 能 的 完 善 程度 (占总成绩 10%) □完善 (10 分) □基本完善 (8 分) □不完善 (5 分) 程 序 结 构 的 合 理 性 (占总成绩 10%) □合理 (10 分) □基本合理 (8 分) □不太合理 (5 分) 对 问 题 的 答 辩 情 况 (占总成绩 40%) 学 生 的 工 作 态 度 与独立工作能力 (占总成绩 10%) □概念正确有创新 □能正确回答所有问题 □基本能正确回答 (40 分) (35 分) □部分问题回答概念不清晰 (20 分) (30 分) □工作态度认真能独立完成任务 □工作态度认真但独立性较差 (10 分) □工作态度基本认真但缺乏独立性 (8 分) (5 分) 设 计 报 告 的 规 范 性 (占总成绩 10%) □符合规范 (10 分) □基本符合规范 □规范性较差 (8 分) (5 分) 优秀:90 分~100 分 良好:80 分~89 分 中等:70~79 分 及格:60~69 分 不及格 0 分~59 分 武汉科技大学计算机科学与技术学院制表 第 1 页
计算机科学与技术学院 课 程 设 计 报 告 课程名称: 网络应用开发 专 业: 网络工程 班 级: 13 级 02 班 学 号: 201301145034 姓 名: 指导老师: 商洁 杨湘 第 2 页
目录 《网络编程与协议分析》课程设计报告........................................................................................ 1 一,课设题目:........................................................................................................................ 2 二、课设要求:........................................................................................................................ 2 三、部分代码 ............................................................................................................................ 2 (1)初始化套接字 .......................................................................................................... 2 (2)初始化表格 .............................................................................................................. 3 (3)ip,tcp,udp,icmp 头部定义 ...............................................................................4 (4)“开始”按钮事件 .................................................................................................... 5 (5)数据包抓取与初步处理 .......................................................................................... 5 (6)表格单击事件 .......................................................................................................... 7 (7)“停止”按钮事件 .................................................................................................... 9 四、程序截图 .......................................................................................................................... 12 (1)开始..............................................................................................................................13 (2)结束..............................................................................................................................13 (3)TCP.............................................................................................................................. 13 (4)UDP..............................................................................................................................13 (5)ICMP............................................................................................................................14 五、课设小结 .......................................................................................................................... 14 第 1 页
《网络编程与协议分析》课程设计报告 一,课设题目: 局域网数据包抓取与分析软件 二、课设要求: 抓取本地主机所在局域网子网内的所有数据包 分析并显示所抓取数据包的 IP 头部各字段的信息 分析并显示所抓取数据包的封装在 IP 数据包内的协议头部字段信息(TCP、UDP、ICMP 等) 生成日志信息,以文本文档形式保存 三、部分代码 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); 第 2 页
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; } 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); 第 3 页
return true; } 3)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; unsigned int ip_DeIp; //版本&首部长度 //服务类型 //总长度 //标识 //标识&片偏移 //生存时间 //上层协议 //首部校验和 //源 ip //目的 ip }; struct tcphead { unsigned short tcp_SoPort; unsigned short tcp_DePort; unsigned int tcp_Seq; unsigned int tcp_Ack; unsigned char tcp_LenAndRes; unsigned char tcp_Flag; unsigned short tcp_Win; unsigned short tcp_Wum; unsigned short tcp_Mov; //16 位的源端口 //16 位的目的端口 //32 位的序列号 //32 位的确认号 //4 位的首部长度和 4 位的保留字 //2 位的保留字和 6 位的标志位 //16 位的窗口大小 //16 位校验和 //16 位的紧急数据偏移量 }; struct udphead { unsigned short udp_SoPort; unsigned short udp_DePort; unsigned short udp_Len; unsigned short udp_Sum; //源端口 //目的端口 //总长度 //校验和 }; 第 4 页
struct icmphead { unsigned char icmp_Type; unsigned char icmp_Code; unsigned short icmp_Sum; }; 4)“开始”按钮事件 //类型 //代码 //16 位检验和 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; 第 5 页
char RecvBuf[65535] = {0}; char soip[16]; char deip[16]; char buf[100]; int i=0; while(1) { 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->ip_EdiAndLen>>4); lis->SetItemText(i,0,buf); sprintf(buf,"%d",ih->ip_EdiAndLen&0xf); lis->SetItemText(i,1,buf); sprintf(buf,"%d",ih->ip_Serve); lis->SetItemText(i,2,buf); sprintf(buf,"%d",ih->ip_Len); lis->SetItemText(i,3,buf); sprintf(buf,"%d",ih->ip_Sign); lis->SetItemText(i,4,buf); sprintf(buf,"%d",ih->ip_MarkAndMove >>13); lis->SetItemText(i,5,buf); sprintf(buf,"%d",ih->ip_MarkAndMove&0x1fff); lis->SetItemText(i,6,buf); sprintf(buf,"%d",ih->ip_Ttl); 第 6 页
分享到:
收藏