当前位置:文档之家› 《网络编程与协议分析》课程设计报告

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

计算机科学与技术学院课程设计成绩单

优秀: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; //上层协议

相关主题