计算机网络抓包课程设计.docx
- 文档编号:10483276
- 上传时间:2023-02-13
- 格式:DOCX
- 页数:10
- 大小:68.08KB
计算机网络抓包课程设计.docx
《计算机网络抓包课程设计.docx》由会员分享,可在线阅读,更多相关《计算机网络抓包课程设计.docx(10页珍藏版)》请在冰豆网上搜索。
计算机网络抓包课程设计
课程设计报告
课程:
计算机通信与网络
题目:
网络流量解析程序的实现
学号:
—、任务扌苗述3
二、windump的安装和使用3
三、windump文件格式3
四、程序实现6
(1)算法()6
(2)编码中的关键问题6
(3)头文件6
(4)源文件7
五、总结10
文件头
—
数据包头
链路层数据
—、任务描述
编写一个网络流量解析程序
输入:
曲“Windump-旷'抓取的二进制流量文件
输出:
文件中所有IP报文主要字段的信息
时间戳源IP目的IP高层协议总长度
二、windump的安装和使用
(—)找到windump官方
(二)下载同—版本的winpcap和windump
(三)先安装windump动态库
(四)Windump是个命令行程序
三、windump文件格式
抓取的每个链路层帧都被附加16字节的数据包头,其中8-11是帧在文件中的存储长度或抓取长度,
12-15则是该帧的实际长度(按照编程的习惯,从0开始数)。
由于抓取的时候可能发生截取,两个值可能不一致,使用“・sO“抓取的话,两个值相同。
假设第一个数据包头的8~11字节是60000000(十六进制),当读取顺序为“D4C3B2A1"时,表示整数值0X00000060,即十进制数96。
则意味着从40字节开始的96个字节是第一个帧的抓取。
文件头
数据包头
锚路层数据
数据包头
链路层数据
・・・
目的地址源地址类型数拥
目的地址
源地址
类型
数拥
IP数据报
链路层数据的1273字节
=0X0800
2~3字节二总长度16~19字节二目的地址
|_首部||数据部分
fIP数据报
发送在前
四、程序实现
(1)算法0
首部
数据部分
解析程序的算法流程图
(2)编码中的关键问题
如何读取二进制文件,如何输出文本文件
如何将二进制数据以十进制形式输出
(3)头文件
#include〈iost:
reani>
nclude〈fstream〉
(4)源文件
#include
#include
usingnamespacestd;
intread()
{ifstreaminf(”f3・daF,ios:
:
binary);
if(!
inf)
{cout«Hcan,topeninputfileXn/1;
exit(l);
}
charch;
intcount=0;
intc=0;
intn=0;
intp=0;
inti=0;
ints=24;
intw=0;
unsignedcharm;
unsignedcharb;
//inf.seekg(54,ios:
:
beg);
ofstrcamout;
out.open(He:
\\test.txtH);
for(i=0;i<10;i++)
{
inf.seekg(s+8uos:
:
beg);
inf.get(ch);
b=ch;
inta=(int)b;
cout«H数据包长度u«endl;
out«"数据包长度"<<,
cout«a«endl;
w=a;
inf.seekg(s+30.ios:
:
beg);out«a«,'vvcndl;
//system(”pause”);
//inf.get(ch);b=ch;a=(int)b;cout«a«endl;inf.get(ch);
b=ch:
m=b»4;
a=(int)m:
cout«H版本H«a«endl:
out«H版本M«a«endl;
b=ch;
m=b&15:
a=(int)m;
cout«H首部长度H«a«endl;
out«H首部长度n«a«endl;inf.get(ch);
b=ch;
a=(int)b;
cout«H区分服务M«a«endI;
out«H区分服务°«a«endl;inf.get(ch);
b=ch;
a=(int)b*16*16;
inf.get(ch);
b=ch;
c=(int)b;
n=c+a;
cout«H总长度H«n«endl;
out«n总长度H«n«endl;inf.get(ch);
b=ch;
a=(int)b*16*16;
inf.get(ch);
b=ch:
c=(int)b;
n=c+a;
cout«H标识H«n«endl;
out«H标识H«n«endl;inf.get(ch);
b=ch;
m=b»4;
a=(int)m;
cout«H标志M«a«end1;
out«H标志H«a«end1:
inf.get(ch);
inf.get(ch);
b=ch;
a=(int)b;
cout«H生存时间H«a«end1;
out«H生存时间n«a«endl;
inf.get(ch);
b=ch;
a=(int)b;
cout«H协议H«a«endl;
out«H协议M«a«endl;
inf.get(ch);
b=ch;
c=(int)b*16*16;
inf.get(ch);
b=ch;
a=(int)b;
n=a+c;
cout«H首部校验和H«n«cndl:
out«H首部校验和u«n«endl;
inf.get(ch);
b=ch;
a=(int)b;
inf.get(ch);
b=ch;
c=(int)b;
inf.get(ch);
b=ch;
n=(int)b;
inf.get(ch);
b=ch;
p=(int)b;
cout«H源地址”vvavvTvvcvvTvvnvvTvvpvvcndl;out«H源地址M«a«\,«c«\,«n«\,«p«endl:
inf.get(ch);
b=ch;
a=(int)b;
inf.get(ch);
b=ch;
c=(int)b;
inf.get(ch);
b=ch;
n=(int)b;
inf.get(ch):
b=ch;
p=(int)b;
cout«H目的地址H«a«,.,«c«\*«n«\,«p«endl;
out«N目的地址,,«a«,.,«c«V«n«,/«p«endI«endl«endl«endl«endl;s=s+16+w:
}
inf.closeO;
return0;
}
intmain()
{cout«H解析数据包n«endl;
getchar();
read();
return0;
}
五、总结
通过这次实验对网络中的数据包有了新的认识,了解了数据链路层帧的格式,以及帧头的14个字节分别是什么和IP数据的结构。
其次对windump软件的操作更加熟悉,能够根据抓来的流量进行详细的分析。
在将解析好的IF数据报存入文件中时,山于存在非IP数据报使得大量的IP□数组浪费同时也使得读出IP数据报的文件中有异常数据(体现在空数组的初始化)。
山于是单个字节的读入二进制文件,所以程序并未实现将文件的所有容一次性都读入存而是采取认为的选定长度,而数据报的解析通样是使用人为的输入解析个数来惊喜解析,这使得程序的功能不是那么强大、完整。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计