《网络编程与协议分析》课程设计报告
网络编程实训课程学习总结开发网络应用与通信协议

网络编程实训课程学习总结开发网络应用与通信协议网络编程是计算机科学中的一个重要分支,通过网络编程,我们可以实现各种各样的功能,比如开发网络应用和通信协议。
在进行网络编程的学习过程中,我深刻领悟到了网络编程的重要性以及其中的一些技术要点,下面我将对我的学习经历进行总结。
首先,在网络编程实训课程中,我学习了网络编程的基础知识。
网络编程是一门涉及到多方面技术的学科,要想在这个领域有所建树,必须要掌握基本的网络概念和相关的技术。
在实训课程中,我们首先学习了TCP/IP协议,这是互联网最基础的通信协议,也是网络编程的基础。
通过学习TCP/IP协议,我深入理解了网络通信的原理和关键技术,掌握了socket编程的基本方法和技巧。
我们还学习了HTTP和FTP等应用层协议,了解了它们的工作原理和应用场景。
其次,我在网络编程实训课程中学习了几种常用的编程语言和框架。
在实际的网络编程中,我们需要使用一些编程语言和框架来实现具体的功能。
在课程中,我们学习了Java和Python这两种常用的编程语言,它们在网络编程中都有广泛的应用。
我们学习了Java的Socket编程和Python的Twisted框架,通过实践项目,我掌握了使用这两种语言进行网络编程的基本技能。
此外,我们还学习了一些Web开发框架,比如Django和Flask,这些框架可以帮助我们快速开发具有网络功能的应用。
网络编程实训课程还涉及了一些进阶的主题,比如网络安全和性能优化。
网络安全是在进行网络编程时必须要重视的问题,我们学习了一些常见的网络攻击方式和防范措施,学习了一些加密和认证的方法。
性能优化是在开发网络应用时需要考虑的问题,我们学习了一些优化的技巧和策略,比如使用缓存、优化数据库查询等。
通过网络编程实训课程的学习,我对网络编程有了更深入的理解和掌握。
我学会了使用各种编程语言和框架来进行网络编程,能够独立地开发一些简单的网络应用和通信协议。
同时,我也了解了网络编程领域的一些前沿技术和发展趋势,为以后的学习和研究打下了基础。
网络通信协议分析课程设计源代码和实验报告+帧封装、IP数据包解析和发送TCP数据包

网络协议分析课程设计之协议编程实验一帧封装实验目的:•编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。
•要求程序为命令行程序。
比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfile outputfile,其中,inputfile为原始数据文件,outputfile为输出结果。
•输出:对应input1和input2得结果分别为output1和output2。
试验要求:•编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。
•要求程序为命令行程序。
比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfile outputfile,其中,inputfile为原始数据文件,outputfile为输出结果。
输出:对应input1和input2得结果分别为output1和output2验设计相关知识:帧:来源于串行线路上的通信。
其中,发送者在发送数据的前后各添加特殊的字符,使它们成为一个帧。
Ethernet从某种程度上可以被看作是机器之间的数据链路层连接。
按802.3标准的帧结构如下表所示(802.3标准的Ethernet帧结构由7部分组成)802.3标准的帧结构其中,帧数据字段的最小长度为46B 。
如果帧的LLC 数据少于46B ,则应将数据字段填充至46B 。
填充字符是任意的,不计入长度字段值中。
在校验字段中,使用的是CRC 校验。
校验的范围包括目的地址字段、源地址字段、长度字段、LLC 数据字段。
循环冗余编码(CRC)是一种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在通信领域广泛地用于实现差错控制。
CRC 校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误。
网络协议课程设计

网络协议课程设计一、课程目标知识目标:1. 学生能够理解网络协议的基本概念,掌握TCP/IP协议簇的核心协议工作原理;2. 学生能够描述不同网络层(如物理层、数据链路层、网络层、传输层等)的主要协议及其功能;3. 学生能够解释域名系统(DNS)、动态主机配置协议(DHCP)等应用层协议的工作流程。
技能目标:1. 学生能够运用所学知识分析网络通信中的问题,并能够选择合适的网络协议进行解决;2. 学生通过案例学习,能够模拟设计简单的网络通信协议,提升实际操作能力;3. 学生能够利用网络协议知识配置基本的网络设备,进行网络故障排查。
情感态度价值观目标:1. 培养学生对网络协议的兴趣,激发他们探索网络通信领域的热情;2. 学生通过学习网络协议,认识到网络技术对社会发展的重要性,增强社会责任感和团队合作精神;3. 学生在学习过程中,能够遵循网络安全规范,树立正确的网络道德观念。
课程性质:本课程为计算机网络基础知识课程,旨在帮助学生建立网络协议的基本观念,提高实际操作能力。
学生特点:学生为初中年级,具备一定的计算机操作基础,对网络知识有一定的好奇心,但缺乏系统的网络协议知识。
教学要求:结合学生特点,注重理论与实践相结合,采用案例分析、小组合作等教学方法,使学生在掌握知识的同时,提高实际操作和团队协作能力。
通过明确具体的课程目标,为教学设计和评估提供依据。
二、教学内容1. 网络协议基本概念:介绍协议的定义、作用和分类,以课本第二章第一节为基础,使学生理解网络协议的重要性。
- 协议的定义与作用- 协议的分类与层次结构2. TCP/IP协议簇:分析TCP/IP协议簇的四大层(网络接口层、网络层、传输层、应用层),结合课本第二章第二节,重点讲解各层的主要协议。
- 网络接口层与数据链路层协议- 网络层协议(IP、ICMP等)- 传输层协议(TCP、UDP等)- 应用层协议(HTTP、FTP、SMTP、DNS等)3. 网络协议配置与故障排查:以课本第二章第三节为例,教授如何配置网络设备,进行网络故障排查。
网络协议编程课程设计

HUNAN CITY UNIVERSITY网络协议编程课程设计说明书设计题目:基于MFC框架的Echo协议模拟软件的设计与实现专业:网络工程学生姓名:*****班级学号:1206101-28分组成员: 1206101-05 *****、1206101-31******1206101-28何***指导教师:****老师*****老师2015 年 07月 03日《网络协议编程课程设计》说明书学号:1206101-28姓名:****一、设计时间2015年06月29日-----07月03日。
二、设计地点湖南城市学院信息楼507机房。
三、设计目的1、巩固《网络协议编程》课程涉及的基本知识,培养灵活运用知识进行独立设计的能力;2、掌握TCP/IP网络程序框架、Winsock API、高级网络编程API的使用;3、提高综合运用所学的理论知识独立分析和解决问题的能力;4、进一步熟悉利用Visual C++6.0进行开发的能力;5、培养查阅资料,独立思考问题的能力。
四、设计小组成员1206101-05**** 1206101-31**** 1206101-28****五、指导老师****老师、****老师。
六、设计课题经过小组组员的讨论,决定选取选题(18 基于MFC框架的Echo协议模拟软件的设计与实现),编写一个基于MFC框架的Echo协议模拟软件。
理由:1、Echo协议(也称回声协议)是一个非常简单的协议,它主要用于网络可达性的检测中。
2、该系统功能相对简单,易于实现,适于初学者。
3、该系统牵涉到TCP协议、CAsysncSocket类、C/S模式以及MFC框架,采用VC6.0编制程序模拟Echo协议的基本功能,需要灵活运用这些知识解决实际问题,有利于培养网络系统开发的实际动手能力。
七、基本思路及关键问题的解决方法本系统的开发采用基于MFC的Echo协议的C/S模式,服务器在端口7检测接收到的信息,如果收到信息,则原封不动地重发回客户端。
网络协议编程课程设计java

网络协议编程课程设计java一、课程目标知识目标:1. 让学生理解网络协议编程的基本概念,掌握Java语言实现网络编程的方法;2. 使学生掌握TCP/IP协议族的原理,了解不同网络协议的特点和应用场景;3. 引导学生掌握套接字编程技术,学会使用Java语言实现客户端与服务器端的数据传输。
技能目标:1. 培养学生运用Java语言编写网络应用程序的能力,学会使用套接字进行网络通信;2. 培养学生分析、解决网络编程中遇到的问题,提高实际编程能力;3. 培养学生团队协作能力,学会共同开发、调试网络应用程序。
情感态度价值观目标:1. 培养学生热爱编程,对网络协议编程产生浓厚兴趣;2. 培养学生积极探究、主动学习的精神,敢于面对编程过程中的困难与挑战;3. 引导学生树立正确的网络安全意识,认识到网络协议编程在实际应用中的重要性。
本课程针对高年级学生,具备一定的Java编程基础和网络知识。
课程性质为理论与实践相结合,注重培养学生的实际编程能力。
教学要求学生在理解网络协议原理的基础上,通过实际编程实践,掌握Java网络编程技术,培养解决实际问题的能力。
课程目标的设定旨在使学生能够达到上述学习成果,为后续深入学习网络编程打下坚实基础。
二、教学内容1. 网络协议编程基本概念:介绍网络编程的背景、意义,对比不同网络协议,如TCP、UDP、HTTP等,分析各自优缺点及适用场景。
教材章节:第1章 网络编程概述2. Java网络编程基础:讲解Java网络编程的核心类库,如包,重点介绍InetAddress、Socket、ServerSocket等类的使用方法。
教材章节:第2章 Java网络编程基础3. 套接字编程:详细讲解套接字编程原理,包括TCP套接字和UDP套接字的使用,举例说明如何实现客户端与服务器端的数据传输。
教材章节:第3章 套接字编程4. 多线程网络编程:介绍多线程在网络编程中的应用,学会使用Java多线程实现并发网络通信,提高程序性能。
网络编程协议课程设计

网络编程协议课程设计一、课程目标知识目标:1. 理解网络编程协议的基本概念和作用;2. 掌握常见的网络协议(如TCP/IP、HTTP、FTP等)的工作原理和特点;3. 了解网络编程中数据传输、连接建立和维护的相关知识;4. 学会运用网络编程协议解决实际问题。
技能目标:1. 能够运用所学知识,编写简单的网络应用程序;2. 能够熟练使用网络协议分析工具,对网络数据进行抓包和分析;3. 能够诊断和解决网络编程中遇到的问题;4. 提高团队协作和沟通能力,通过小组讨论和实践,共同完成网络编程项目。
情感态度价值观目标:1. 培养学生对网络编程的兴趣,激发学习热情;2. 培养学生的创新意识和实践能力,敢于尝试新方法解决问题;3. 增强学生的网络安全意识,遵守网络道德规范,尊重他人隐私;4. 培养学生的团队协作精神,提高沟通能力和责任感。
本课程针对高中年级学生,结合网络编程协议的知识深度,旨在帮助学生掌握网络编程的基本知识和技能,培养他们运用网络编程解决实际问题的能力。
课程目标具体、可衡量,以便学生和教师在教学过程中能够清晰地了解课程的预期成果。
通过分解课程目标为具体的学习成果,教师可以更好地进行教学设计和评估,提高课程的实用性和有效性。
二、教学内容1. 网络编程基础理论- 网络协议概念与分层模型- 网络编程的基本概念与编程接口2. 常见网络协议及其工作原理- TCP/IP协议族:IP协议、TCP协议、UDP协议- 应用层协议:HTTP协议、FTP协议、SMTP协议、DNS协议3. 网络编程实践- 套接字编程:基于TCP和UDP的网络应用程序编写- 网络数据传输:数据编码与解码、数据完整性校验- 网络应用案例分析:简单聊天室、文件传输等4. 网络编程调试与分析- 网络抓包工具:Wireshark的使用方法- 网络编程问题诊断与调试技巧5. 网络编程项目实战- 项目规划与分工- 项目实施与进度控制- 项目展示与评价教学内容依据课程目标进行选择和组织,注重科学性和系统性。
计算机网络课程设计报告网络协议与应用程序设计

计算机网络课程设计报告课程设计项目名称:网络协议与应用程序设计系:专业::实验地点:实验日期:一、目的与要求基于典型的网络协议和网络应用的源代码进行分析,通过本科目,使学员了解网络通信流程,掌握网络通信程序的设计以及通信协议的应用技能,培养学员网络协议与网络应用的设计实现能力。
二、实验环境Visual C++6.0三、程序设计3.1 IP报头格式typedef struct tagIPINFO{u_char Ttl; // Time To Liveu_char Tos; // Type Of Serviceu_char IPFlags; // IP flagsu_char OptSize; // Size of options datau_char FAR *Options; // Options data buffer}IPINFO, *PIPINFO生存时间+服务类型+标识字段+数据报大小+数据报缓存区3.2 ICMP报头格式typedef struct tagICMPECHO{u_long Source; // Source addressu_long Status; // IP statusu_long RTTime; // Round trip time in millisecondsu_short DataSize; // Reply data sizeu_short Reserved; // Unknownvoid FAR *pData; // Reply data bufferIPINFO ipInfo; // Reply options}ICMPECHO, *PICMPECHO;源地址+IP状态+往返延迟+返回数据大小+未知接受数据+返回数据缓存+返回IP报头数据函数流程设计//初始化模块:初始化全局标量,初始化加载库。
void main(int argc, char **argv){WSADATA wsaData; // WSADATAICMPECHO icmpEcho; // ICMP Echo reply bufferHANDLE hndlIcmp; // LoadLibrary() handle to ICMP.DLL HANDLE hndlFile; // Handle for IcmpCreateFile() LPHOSTENT pHost; // Pointer to host entry structurestruct in_addr iaDest; // Internet address structure DWORD *dwAddress; // IP Addressint nRet; // General use return codeIPINFO ipInfo; // IP Options structureDWORD dwRet; // DWORD return codeint x;// Check argumentsif (argc != 2){fprintf(stderr,"\nSyntax: pingi HostNameOrIPAddress\n");return;}// Dynamically load the ICMP.DLLhndlIcmp = LoadLibrary("ICMP.DLL");if (hndlIcmp == NULL){fprintf(stderr,"\nCould not load ICMP.DLL\n");return;}// Retrieve ICMP function pointerspIcmpCreateFile = (HANDLE (WINAPI *)(void))GetProcAddress(hndlIcmp,"IcmpCreateFile");pIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE))GetProcAddress(hndlIcmp,"IcmpCloseHandle");pIcmpSendEcho = (DWORD (WINAPI *)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD))GetProcAddress(hndlIcmp,"IcmpSendEcho");// Check all the function pointers//功能控制模块:计算校验和填充数据报文、释放占用资源。
网络编程基础技术实验报告

网络编程基础技术实验报告一、实验目的与要求本次实验旨在使学生掌握网络编程的基本概念,理解TCP/IP协议栈的工作原理,并通过编程实践加深对网络通信过程的理解。
学生需要编写一个简单的网络通信程序,实现客户端与服务器之间的数据传输。
二、实验环境与工具实验环境为Windows操作系统,开发工具选择Visual Studio 2019,编程语言使用C++。
三、实验内容与步骤1. 服务器端程序设计:- 创建一个Socket,绑定到指定端口。
- 监听客户端的连接请求。
- 接受客户端连接,创建一个新的Socket用于通信。
- 接收客户端发送的数据,并将其回显给客户端。
- 关闭连接,释放资源。
2. 客户端程序设计:- 创建一个Socket,连接到服务器指定的IP地址和端口。
- 向服务器发送数据请求。
- 接收服务器回显的数据。
- 关闭连接,释放资源。
四、实验代码实现以下是服务器端和客户端程序的代码实现示例:服务器端代码(Server.cpp):```cpp#include <winsock2.h>#include <windows.h>#pragma comment(lib, "ws2_32.lib")int main() {WSADATA wsaData;SOCKET serverSocket, clientSocket;struct sockaddr_in serverAddr, clientAddr;int clientAddrLen = sizeof(clientAddr);char buffer[1024];WSAStartup(MAKEWORD(2, 2), &wsaData);serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);serverAddr.sin_port = htons(8888);bind(serverSocket, (SOCKADDR*)&serverAddr,sizeof(serverAddr));listen(serverSocket, 5);while (true) {clientSocket = accept(serverSocket,(SOCKADDR*)&clientAddr, &clientAddrLen);recv(clientSocket, buffer, sizeof(buffer), 0);send(clientSocket, buffer, strlen(buffer), 0);closesocket(clientSocket);}closesocket(serverSocket);return 0;}```客户端代码(Client.cpp):```cpp#include <winsock2.h>#include <windows.h>#pragma comment(lib, "ws2_32.lib")int main() {WSADATA wsaData;SOCKET clientSocket;struct sockaddr_in serverAddr;char buffer[1024];WSAStartup(MAKEWORD(2, 2), &wsaData);clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");serverAddr.sin_port = htons(8888);connect(clientSocket, (SOCKADDR*)&serverAddr,sizeof(serverAddr));strcpy_s(buffer, "Hello, Server!");send(clientSocket, buffer, strlen(buffer), 0);recv(clientSocket, buffer, sizeof(buffer), 0);closesocket(clientSocket);return 0;}```五、实验结果与分析实验结果表明,客户端成功连接到服务器,并向服务器发送了数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术学院课程设计成绩单优秀: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("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){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头部定义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; //源ipunsigned 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 hereDWORD 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, "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);lis->SetItemText(i,7,buf);switch((int)ih->ip_Protocol){case1:sprintf(buf,"%s","ICMP");break;case2:sprintf(buf,"%s","IGMP");break;case6:sprintf(buf,"%s","TCP");break;case8:sprintf(buf,"%s","EGP");break;case9:sprintf(buf,"%s","IGP");break;case17:sprintf(buf,"%s","UDP");break;case41:sprintf(buf,"%s","IPv6");break;case89:sprintf(buf,"%s","OSPF");break;default:sprintf(buf,"%s","Error");}lis->SetItemText(i,8,buf);sprintf(buf,"%d",ih->ip_Sum);lis->SetItemText(i,9,buf);sprintf(buf,"%s",soip);lis->SetItemText(i,10,buf);sprintf(buf,"%s",deip);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 hereNM_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);ttttttttt=*((tcphead*)(ddat[i].buff+(iph->ip_EdiAndLen&0xf)*4)); uuuuuuuuu=*((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){case6:sprintf(tem,"源端口:%d\r\n",th.tcp_SoPort);buf+=tem;sprintf(tem,"目的端口:%d\r\n",th.tcp_DePort);buf+=tem;sprintf(tem,"序列号:%d\r\n",th.tcp_Seq);buf+=tem;sprintf(tem,"确认号:%d\r\n",th.tcp_Ack);buf+=tem;sprintf(tem,"数据偏移:%d\r\n",th.tcp_LenAndRes>>4);buf+=tem;sprintf(tem,"保留:%d\r\n",th.tcp_LenAndRes&0xf);buf+=tem;sprintf(tem,"标志:%d\r\n",th.tcp_Flag&0x3f);buf+=tem;sprintf(tem,"窗口:%d\r\n",th.tcp_Win);buf+=tem;sprintf(tem,"校验和:%d\r\n",th.tcp_Wum);buf+=tem;sprintf(tem,"紧急指针:%d\r\n",th.tcp_Mov);buf+=tem;newdlg.m_data=buf;break;case17:sprintf(tem,"源端口:%d\r\r\n",uh.udp_SoPort);buf+=tem;sprintf(tem,"目的端口:%d\r\n",uh.udp_DePort);buf+=tem;sprintf(tem,"长度:%d\r\n",uh.udp_Len);buf+=tem;sprintf(tem,"校验和:%d\r\n",uh.udp_Sum);buf+=tem;newdlg.m_data=buf;break;case1:sprintf(tem,"类型:%d\r\n",ih.icmp_Type);buf+=tem;sprintf(tem,"代码:%d\r\n",ih.icmp_Code);buf+=tem;sprintf(tem,"校验和:%d\r\n",ih.icmp_Sum);buf+=tem;newdlg.m_data=buf;break;default:AfxMessageBox("No Data!");newdlg.m_data="";}newdlg.DoModal();}*pResult = 0;}7)“停止”按钮事件void CTestDlg::OnStop(){//TODO:Add your control notification handler code hereSuspendThread(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("%d-%d-%d-",ttime.GetYear(),ttime.GetMonth(),ttime.GeDay());strDate+=ttime.Format("%H-%M-%S");ofstream outfile("history\\"+strDate + ".log");outfile<<setw(6)<<"版本"<<setw(10)<<"头部长度"<<setw(10)<<"服务类型"<<setw(8)<<"总长度"<<setw(8)<<"标识符"<<setw(8)<<"标志位"<<setw(8)<<"片偏移"<<setw(10)<<"生存周期"<<setw(6)<<"协议"<<setw(12)<<"首部校验和"<<setw(20)<<"源地址"<<setw(20)<<"目的IP地址"<<endl;while(j < index){for (i= 0;i < 12;i++){strBuf=m_List.GetItemText(j,i);switch(i){case0:outfile<<setw(6)<<strBuf;break;case1:outfile<<setw(10)<<strBuf;break;case2:outfile<<setw(10)<<strBuf;break;case3:outfile<<setw(8)<<strBuf;break;case4:outfile<<setw(8)<<strBuf;break;case5:outfile<<setw(8)<<strBuf;break;case6:outfile<<setw(8)<<strBuf;break;case7:outfile<<setw(10)<<strBuf;break;case8:outfile<<setw(6)<<strBuf;break;case9:outfile<<setw(12)<<strBuf;break;case10:outfile<<setw(20)<<strBuf;break;case11:outfile<<setw(20)<<strBuf;outfile<<endl;j++;break;}}}outfile.close();AfxMessageBox("数据已写入日志文件!");}GetDlgItem(IDC_STOP)->EnableWindow(FALSE);GetDlgItem(IDC_START)->EnableWindow(TRUE);GetDlgItem(IDC_START)->SetFocus();}五、程序截图“开始”“停止”TCPUDPICMP六、实验总结通过这次实验我学会了怎么自我去学习,从刚开始的无从下手到慢慢的自我完善。