《网络编程与协议分析》课程设计报告
更新时间:2024-05-20 16:23:01 阅读量: 综合文库 文档下载
- 网络编程与协议分析实验推荐度:
- 相关推荐
计算机科学与技术学院课程设计成绩单
课程名称:网络编程与协议分析 指导教师: 姓名 性别 男 学号 班级 综合成绩 程序运行情况 (占总成绩20%) 成绩等级 □能正确运行 □基本能正确运行 □能运行但结果不完善 (20分) (15分) (10分) 程序功能的完善 程度 □完善 □基本完善 □不完善 (占总成绩10%) (10分) (8分) (5分) 程序结构的合理 性 □合理 □基本合理 □不太合理 (占总成绩10%) (10分) (8分) (5分) 对问题的答辩情□概念正确有创新 □能正确回答所有问题 □基本能正确回答 况 (40分) (35分) (30分) (占总成绩40%) □部分问题回答概念不清晰 (20分) 学生的工作态度□工作态度认真能独立完成任务 □工作态度认真但独立性较差 与独立工作能力 (10分) (8分) (占总成绩10%) □工作态度基本认真但缺乏独立性 (5分) 设计报告的规范 性 □符合规范 □基本符合规范 □规范性较差 (占总成绩10%) (10分) (8分) (5分) 优秀:90分~100分 良好:80分~89分 中等:70~79分 及格:60~69分 不及格0分~59分
武汉科技大学计算机科学与技术学院制表
计算机科学与技术学院
课 程
课程名称:网络编程与协议分析专 业:班 级:学 号:姓 名:指导老师:设 计 报 告
《网络编程与协议分析》课程设计报告
一、课设题目:
网络数据包抓取与分析软件
二、课设要求:
1) 能抓取本地主机所在局域网子网内的所有数据包 2) 分析并显示所抓取数据包的IP头部各字段的信息
3) 分析并显示所抓取数据包的封装在IP数据包内的协议头部字段信息(TCP、UDP、
ICMP等)
4) 生成日志信息,以文本文档形式保存
5) 分析并显示所抓取数据包应用层协议头部字段信息(HTTP、FTP、DNS、Telnet、
SMTP、POP等各种应用层协议中至少取三种)
三、用到的基本概念及原理
(3)Winpcap的组成和结构
4)Winpcap基本原理
5)NPF在windows系统中的位置
((
(6)系统构架
四、部分代码
1)初始化套接字
BOOL CTestDlg::SockInit() { WSADATA wsa; if(WSAStartup(MAKEWORD(2,2),&wsa)!=0) { AfxMessageBox(\ } m_sock=socket(AF_INET,SOCK_RAW,0); if(m_sock==INVALID_SOCKET) { AfxMessageBox(\ } 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) { AfxMessageBox(\ } 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(\ 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,\版本\ m_List.InsertColumn(2,\头部长度\ m_List.InsertColumn(3,\服务类型\ m_List.InsertColumn(4,\总长度\ m_List.InsertColumn(5,\标识符\ m_List.InsertColumn(6,\标志位\ m_List.InsertColumn(7,\片偏移\ m_List.InsertColumn(8,\生存周期\ m_List.InsertColumn(9,\协议\ m_List.InsertColumn(10,\首部校验和\ m_List.InsertColumn(11,\源地址\ m_List.InsertColumn(12,\目的IP地址\
}
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; //源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)“开始”按钮事件
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) { 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, \
sprintf(buf,\lis->SetItemText(i,0,buf);
sprintf(buf,\lis->SetItemText(i,1,buf); sprintf(buf,\lis->SetItemText(i,2,buf); sprintf(buf,\lis->SetItemText(i,3,buf); sprintf(buf,\lis->SetItemText(i,4,buf);
sprintf(buf,\lis->SetItemText(i,5,buf);
sprintf(buf,\lis->SetItemText(i,6,buf); sprintf(buf,\lis->SetItemText(i,7,buf);
switch((int)ih->ip_Protocol) { case 1:sprintf(buf,\ case 2:sprintf(buf,\
}
case 6:sprintf(buf,\ case 8:sprintf(buf,\ case 9:sprintf(buf,\ case 17:sprintf(buf,\ case 41:sprintf(buf,\ case 89:sprintf(buf,\ default:sprintf(buf,\}
lis->SetItemText(i,8,buf); sprintf(buf,\lis->SetItemText(i,9,buf); sprintf(buf,\lis->SetItemText(i,10,buf); sprintf(buf,\lis->SetItemText(i,11,buf); i++;
Sleep(100); }
return true;
6)表格单击事件
void CTestDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; CString buf; char tem[100]; int i; if(pNMListView->iItem != -1) { i=pNMListView->iItem; CString strtemp; CNewDlg newdlg;
iphead *iph=(iphead *)(ddat[i].buff);
tcphead th=*((tcphead *)(ddat[i].buff+(iph->ip_EdiAndLen&0xf)*4)); udphead uh=*((udphead *)(ddat[i].buff+(iph->ip_EdiAndLen&0xf)*4)); icmphead ih=*((icmphead *)(ddat[i].buff+(iph->ip_EdiAndLen&0xf)*4)); switch((int)iph->ip_Protocol) {
case 6: sprintf(tem,\源端口:%d\\r\\n\ buf+=tem; sprintf(tem,\目的端口:%d\\r\\n\ buf+=tem; sprintf(tem,\序列号:%d\\r\\n\ buf+=tem; sprintf(tem,\确认号:%d\\r\\n\ buf+=tem; sprintf(tem,\数据偏移:%d\\r\\n\ buf+=tem; sprintf(tem,\保留:%d\\r\\n\ buf+=tem; sprintf(tem,\标志:%d\\r\\n\ buf+=tem; sprintf(tem,\窗口:%d\\r\\n\ buf+=tem; sprintf(tem,\校验和:%d\\r\\n\ buf+=tem; sprintf(tem,\紧急指针:%d\\r\\n\ buf+=tem; newdlg.m_data=buf; break; case 17: sprintf(tem,\源端口:%d\\r\\r\\n\ buf+=tem; sprintf(tem,\目的端口:%d\\r\\n\ buf+=tem; sprintf(tem,\长度:%d\\r\\n\ buf+=tem; sprintf(tem,\校验和:%d\\r\\n\ buf+=tem; newdlg.m_data=buf; break; case 1: sprintf(tem,\类型:%d\\r\\n\ buf+=tem;
}
}
sprintf(tem,\代码:%d\\r\\n\ buf+=tem; sprintf(tem,\校验和:%d\\r\\n\ buf+=tem; newdlg.m_data=buf; break; default: AfxMessageBox(\ newdlg.m_data=\}
newdlg.DoModal();
*pResult = 0;
7)“停止”按钮事件
void CTestDlg::OnStop() { // TODO: Add your control notification handler code here
SuspendThread(m_thr); DWORD code; CString strDate; CString strBuf;
int index = m_List.GetItemCount(); int i,j = 0;
GetExitCodeThread(m_thr,&code); if (code != STILL_ACTIVE) { AfxMessageBox(\程序初始化失败!\\n请检查配置后重新运行!\ } else { CTime ttime = CTime::GetCurrentTime();
strDate.Format(\
ay());
strDate += ttime.Format(\
ofstream outfile(\outfile< while (j < index) { for (i = 0;i < 12;i++) { strBuf = m_List.GetItemText(j,i); switch(i) { case 0: outfile< } } case 7: outfile< outfile.close(); AfxMessageBox(\数据已写入日志文件!\ GetDlgItem(IDC_STOP)->EnableWindow(FALSE); GetDlgItem(IDC_START)->EnableWindow(TRUE); GetDlgItem(IDC_START)->SetFocus(); 五、程序截图 “开始” “停止” TCP UDP
正在阅读:
《网络编程与协议分析》课程设计报告05-20
人教版一下6.胖乎乎的小手03-08
旅游景区管理档09-09
剪纸手工制作大赛活动实施方案12-16
顶岗实习周记 家具橱柜CAD实习等01-11
西部产业结构调整与集聚优化发展研究06-18
我的小屋作文450字07-10
医院职工内部投诉管理制度(最新)11-23
(湘教版)五年级上语文一课一练9牧童评画04-02
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 网络编程
- 协议
- 课程
- 报告
- 分析
- 设计
- 《中餐冷拼厨房实务》职业标准 - 图文
- 人大网大计算机应用基础试题答案资料
- 变频调速电梯系统设计
- 上市公司重大事项
- 校园欺凌(暴力)事件的思考和预防(讲稿)
- 柳钢高架桥梁监理细则
- 九三学社入社申请书
- 新闻学专业英语
- TEM TE TM模的区别
- 河北省农业综合开发财政资金县级报账实施细则
- 二年级数学下册 用7、8、9的乘法口诀求商练习导学案
- 水吸收二氧化硫填料吸收塔设计说明书完整版 - 图文
- 中英文对照版立式水轮发电机组安装工艺分解
- 广东省佛山市2016年普通高中高三教学质量检测文综政治试题 doc
- 2017年学前教育专业教育技能比赛方案
- 人教版二年级数学下册导学案 用7、8、9的乘法口诀求商练习
- 2019云南玉溪公务员考试行测言语理解之细节判断题
- 金融工程经典案例
- 全国2010年4月高等教育政治经济学(财)自考试题
- 西安医学院超星尔雅百年风流人物曾国藩考试答案2016最新