数据包的捕获与分析.docx
- 文档编号:6494009
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:16
- 大小:124.47KB
数据包的捕获与分析.docx
《数据包的捕获与分析.docx》由会员分享,可在线阅读,更多相关《数据包的捕获与分析.docx(16页珍藏版)》请在冰豆网上搜索。
数据包的捕获与分析
TCP/IP协议课程设计
设计说明书
数据包的捕获与分析
起止日期:
2013年11月25日至2013年11月29日
学生姓名
班级
学号
成绩
指导教师(签字)
计算机与通信学院(部)
2013年12月29日
目录
1课程设计简介1
1.1课程设计的目的1
1.2课程设计内容1
2课程设计实现过程2
2.1ip数据包的格式2
2.2系统流程图3
2.3程序设计3
3设计总结10
参考文献11
1课程设计简介
1.1课程设计的目的
(1)使学生掌握网络通信协议的基本工作原理;
(2)培养学生基本掌握网络编程的基本思路和方法;
(3)能提高学生对所学计算机网络理论知识的理解能力;
(4)能提高和挖掘学生对所学知识的实际应用能力和创新能力;
(5)提高学生的科技论文写作能力。
1.2课程设计内容
1)ip数据包的格式
2)系统流程图
3)程序设计
4)运行测试
2课程设计实现过程
2.1ip数据包的格式
IP数据包格式包含了标头固定部分,标头可变部分和数据区三部分。
IP数据报标头部分固定为20个字节,其中包含了12个参数域,各参数域隐含着网间协议的传输机制。
IP具体的标头格式如图1所示。
各参数域的具体含义如下:
1)版本号:
长度4位,表示所使用的IP协议的版本。
IPv4版本号字段值为4;IPV6版本号字段号的值为6.
2)标头长:
长度4位,定义了一个以4B为一个单位的IP包的报头长度
3)服务类型:
共8位,高3位组成优先级子域,随后4位组成服务类型子域。
4)数据报总长度:
总长度为2B(即6位)。
定义了以字节为单位的数据报的总长度。
5)重装标识:
长度16位,用于识别IP数据报的编号,让目的主机判断新来的数据属于哪个分组。
6)分片标识:
共3位,最高位为0;DF禁止分片标识。
DF=0,可以分片;DF=1,不能分片。
MF:
分片标识。
MF=0,表示接的是最后一个分片;MF=1,不是最后一个分片。
7)片偏移值:
共13位,说明分片在整个数据报中的相对位置。
8)生存周期:
8位,用来设置数据数据报在整个网络传输过程中的寿命。
常以一个数据报可以经过的最多的路由器跳步数来控制。
9)协议类型:
共8位,表示该IP数据报的高层协议类型。
10)标头校验和:
共16位,用于存放检查报头错误的校验码。
11)源、宿主机地址:
共32位,分别表示发送和接受数据报的源主机和宿主机的IP地址。
12)选项数据域:
0-40B,用于控制和测试。
IP数据包的格式为:
2.2系统流程图
2.3程序设计
1)ip数据包定义
typedefstruct_IP_HEADER//定义IP头
{
union
{
BYTEVersion;//版本(前4位)
BYTEHdrLen;//IHL(后4位),报头标长
};
BYTEServiceType;//服务类型
WORDTotalLen;//总长
WORDID;//标识
union
{
WORDFlags;//标志(前3位)
WORDFragOff;//分段偏移(后13位)
};
BYTETimeToLive;//生命期
BYTEProtocol;//协议
WORDHdrChksum;//头校验和
DWORDSrcAddr;//源地址
DWORDDstAddr;//目的地址
BYTEOptions;//选项
}IP_HEADER;
//逐位解析IP头中的信息
2)界面设计
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CSnipperDlgdialog
CSnipperDlg:
:
CSnipperDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CSnipperDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CSnipperDlg)
m_num=0;
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCSnipperDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSnipperDlg)
DDX_Control(pDX,IDC_LIST1,m_list);
DDX_Text(pDX,IDC_EDIT1,m_num);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSnipperDlg,CDialog)
//{{AFX_MSG_MAP(CSnipperDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//ON_BN_CLICKED(IDC_BUTTON1,OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CSnipperDlgmessagehandlers
BOOLCSnipperDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
LONGlStyle;
lStyle=GetWindowLong(m_list.m_hWnd,GWL_STYLE);//获取当前窗口style
lStyle&=~LVS_TYPEMASK;//清除显示方式位
lStyle|=LVS_REPORT;//设置style
SetWindowLong(m_list.m_hWnd,GWL_STYLE,lStyle);//设置style
DWORDdwStyle=m_list.GetExtendedStyle();
dwStyle|=LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle|=LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle|=LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle);//设置扩展风格
m_list.InsertColumn(0,"字段",LVCFMT_LEFT,300);//插入列
m_list.InsertColumn(1,"内容",LVCFMT_LEFT,300);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCSnipperDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCSnipperDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCSnipperDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCSnipperDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
nRow=0;
FILE*file;
if((file=fopen("课程设计.txt","wb+"))==NULL)
{
printf("failtoopenfile%s");
return;
}
各种方法定义
voidgetVersion(BYTEb,BYTE&version)
{
version=b>>4;//右移4位,获取版本字段
}
voidgetIHL(BYTEb,BYTE&result)
{
result=(b&0x0f)*4;//获取头部长度字段
}
char*parseServiceType_getProcedence(BYTEb)
{
switch(b>>5)//获取服务类型字段中优先级子域
{
case7:
return"NetworkControl";
break;
case6:
return"InternetworkControl";
break;
case5:
return"CRITIC/ECP";
break;
case4:
return"FlashOverride";
break;
case3:
return"Flsah";
break;
case2:
return"Immediate";
break;
case1:
return"Priority";
break;
case0:
return"Routine";
break;
default:
return"Unknow";
break;
}
}
char*parseServiceType_getTOS(BYTEb)
{
b=(b>>1)&0x0f;//获取服务类型字段中的TOS子域
switch(b)
{
case0:
return"Normalservice";
break;
case1:
return"Minimizemonetarycost";
break;
case2:
return"Maximizereliability";
break;
case4:
return"Maximizethroughput";
break;
case8:
return"Minimizedelay";
break;
case15:
return"Maximizesecurity";
break;
default:
return"Unknow";
}
}
voidgetFlags(WORDw,BYTE&DF,BYTE&MF)//解析标志字段
{
DF=(w>>14)&0x01;
MF=(w>>13)&0x01;
}
voidgetFragOff(WORDw,WORD&fragOff)//获取分段偏移字段
{
fragOff=w&0x1fff;
}
char*getProtocol(BYTEProtocol)//获取协议字段共8位
{
switch(Protocol)//以下为协议号说明:
{
case1:
return"ICMP";
case2:
return"IGMP";
case4:
return"IPinIP";
case6:
return"TCP";
case8:
return"EGP";
case17:
return"UDP";
case41:
return"IPv6";
case46:
return"RSVP";
case89:
return"OSPF";
default:
return"UNKNOW";
}
}
3)IP抓包解析程序
voidipparse(FILE*file,char*buffer)//IP抓包解析
{
IP_HEADERip=*(IP_HEADER*)buffer;//通过指针把缓冲区的内容强制转化为IP_HEADER数据结构
fseek(file,0,SEEK_END);
/*解析版本信息*/
BYTEversion;
getVersion(ip.Version,version);
fprintf(file,"版本=%d\r\n",version);
/*解析IP头长度*/
BYTEheaderLen;
getIHL(ip.HdrLen,headerLen);
fprintf(file,"头长度=%d(BYTE)\r\n",headerLen);
/*解析服务类型*/
fprintf(file,"服务类型=%s,%s\r\n",
parseServiceType_getProcedence(ip.ServiceType),
parseServiceType_getTOS(ip.ServiceType));
/*解析数据报长度*/
fprintf(file,"总长度=%d(BYTE)\r\n",ip.TotalLen);
/*解析数据报ID*/
fprintf(file,"标识=%d\r\n",ip.ID);
/*解析标志位*/
BYTEDF,MF;
getFlags(ip.Flags,DF,MF);
fprintf(file,"标志DF=%d,MF=%d\r\n",DF,MF);
/*解析分段偏移*/
WORDfragOff;
getFragOff(ip.FragOff,fragOff);
fprintf(file,"分段偏移值=%d\r\n",fragOff);
/*解析生存期*/
fprintf(file,"生存期=%d(hopes)\r\n",ip.TimeToLive);
/*解析协议*/
fprintf(file,"协议=%s\r\n",getProtocol(ip.Protocol));
/*解析头部校验和*/
fprintf(file,"头部校验和=0x%0x\r\n",ip.HdrChksum);
/*解析源IP地址*/
fprintf(file,"源IP地址=%s\r\n",inet_ntoa(*(in_addr*)&ip.SrcAddr));
/*解析目的IP地址*/
fprintf(file,"目的IP地址=%s\r\n",inet_ntoa(*(in_addr*)&ip.DstAddr));
fprintf(file,"---------------------------------------------\r\n");
}
4)程序运行测试结果
3设计总结
这次计算机网络课程设计是解析IP数据包,通过这次上机充分应用了所学的计算机网络和C语言的知识,并上网搜索一部分相当资料,粗略设计出该程序。
通过本次课程设计,充分运用了所学的计算机网络知识,设计出了如何解析IP数据包,从而更加深刻的了解到了IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
在课程设计的过程也碰到的不少问题。
该程序也存在着不少的缺陷,比如并不是所有的数据包都能捕获,如:
IP数据包以外的数据包都抓不到;只支持ICMP、IGMP、TCP、UDP这些协议。
参考文献
[1]袁庆龙,候文义.Ni-P合金镀层组织形貌及显微硬度研究[J].太原理工大学学报,2001,32
(1):
51-53.
[2] 刘国钧,王连成.图书馆史研究[M].北京:
高等教育出版社,1979:
15-18,31.
[3]孙品一.高校学报编辑工作现代化特征[C].中国高等学校自然科学学报研究会.科技编辑学论文集
(2).北京:
北京师范大学出版社,1998:
10-22.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据包 捕获 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)