1、 计算机科学与技术学院计算机科学与技术学院 课课 程程 设设 计计 报报 告告 课程名称课程名称:网络编程与协议分析网络编程与协议分析 专专 业:业: 班班 级:级: 学学 号:号: 姓姓 名:名: 指导老师:指导老师: 网络编程与协议分析课程设计报告网络编程与协议分析课程设计报告 一、课设一、课设题目:题目: 网络数据包抓取与分析软件 二、课设要求二、课设要求: 1) 能抓取本地主机所在局域网子网内的所有数据包 2) 分析并显示所抓取数据包的 IP 头部各字段的信息 3) 分析并显示所抓取数据包的封装在 IP 数据包内的协议头部字段信息(TCP、UDP、 ICMP 等) 4) 生成日志信息,
2、以文本文档形式保存 5) 分析并显示所抓取数据包应用层协议头部字段信息(HTTP、FTP、DNS、Telnet、 SMTP、POP 等各种应用层协议中至少取三种) 三、用到的基本概念及原理三、用到的基本概念及原理 (3)Winpcap 的组成和结构的组成和结构 (4)Winpcap 基本原理基本原理 (5)NPF 在在 windows 系统中的位置系统中的位置 (6)系统构架)系统构架 四四、部分代码、部分代码 1)初始化套接字初始化套接字 BOOL CTestDlg:SockInit() WSADA TA wsa; if(WSAStartup(MAKEWORD(2,2), m_sock=so
3、cket(AF_INET,SOCK_RAW,0); if(m_sock=INV ALID_SOCKET) AfxMessageBox(“socket fail!“); SOCKADDR_IN addr; addr.sin_family=AF_INET; addr.sin_port=htons(5000); struct hostent FAR * pHostent; char FAR name25; gethostname(name, 25); pHostent = gethostbyname(name); memcpy( if(bind(m_sock,(SOCKADDR *) DWORD d
4、wBytesRet; unsigned int optval = 1; int pCount=0; if(INVALID_SOCKET=(WSAIoctl(m_sock,SIO_RCVALL, 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.
5、GetExStyle(); dwStyles 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.Inse
6、rtColumn(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_CE