计算机科学与技术学院课程设计成绩单
优秀: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==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 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(INV ALID_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; //上层协议