计算机网络抓包课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

课程:计算机通信与网络

题目:网络流量解析程序的实现学号:

姓名:

一、任务描述 (3)

二、windump的安装和使用 (3)

三、windump文件格式 (3)

四、程序实现 (6)

(1)算法() (6)

(2)编码中的关键问题 (6)

(3)头文件 (6)

(4)源文件 (7)

五、总结 (10)

一、任务描述

编写一个网络流量解析程序

输入:由“Windump –W ”抓取的二进制流量文件

输出:文件中所有IP 报文主要字段的信息

时间戳 源IP 目的IP 高层协议 总长度

二、windump 的安装和使用

(一)找到windump 官方网站

(二)下载同一版本的winpcap 和windump

(三) 先安装windump 动态链接库

(四)Windump 是个命令行程序

三、windump 文件格式

数据包头 链路层数据 数据包头 链路层数据 文件头 24字节,并且前4个字节是“A1 B2 C3 D4”或“D4 C3 B2 A1”,用来标识数据包头中的多字节整数的读取顺序是顺着读或倒着读。

数据包头 链路层数据

数据包头 链路层数据 文件头

抓取的每个链路层帧都被附加16字节的数据包头,其中8~11是帧在文件中的存储长度或抓取长度,12~15则是该帧的实际长度(按照编程的习惯,从0开始数)。由于抓取的时候可能发生截取,两个值可能不一致,使用“-s 0”抓取的话,两个值相同。

假设第一个数据包头的8~11字节是60 00 00 00(十六进制),当读取顺序为“D4 C3 B2 A1”时,表示整数值0X00 00 00 60,即十进制数96。则意味着从40字节开始的96个字节是第一个帧的抓取。

四、程序实现(1)算法()

(2)编码中的关键问题

如何读取二进制文件,如何输出文本文件如何将二进制数据以十进制形式输出(3)头文件

#include

#include

(4)源文件

#include

#include

using namespace std;

int read()

{ ifstream inf("f3.dat",ios::binary);

if(!inf)

{cout<<"can't open input file\n,";

exit(1);

}

char ch;

int count=0;

int c=0;

int n=0;

int p=0;

int i=0;

int s=24;

int w=0;

unsigned char m;

unsigned char b;

//inf.seekg(54,ios::beg);

ofstream out;

out.open("e:\\test.txt");

for(i=0;i<10;i++)

{

inf.seekg(s+8,ios::beg);

inf.get(ch);

b=ch;

int a=(int)b;

cout<<"数据包长度"<

out<<"数据包长度"<<' ';

cout<

w=a;

inf.seekg(s+30,ios::beg);

out<

//system("pause");

//inf.get(ch);b=ch;a=(int)b;cout<

b=ch;

m=b>>4;

a=(int)m;

cout<<"版本"<

out<<"版本"<

b=ch;

m=b&15;

a=(int)m;

cout<<"首部长度"<

out<<"首部长度"<

inf.get(ch);

b=ch;

a=(int)b;

cout<<"区分服务"<

out<<"区分服务"<

inf.get(ch);

b=ch;

a=(int)b*16*16;

inf.get(ch);

b=ch;

c=(int)b;

n=c+a;

cout<<"总长度"<

out<<"总长度"<

inf.get(ch);

b=ch;

a=(int)b*16*16;

inf.get(ch);

b=ch;

c=(int)b;

n=c+a;

cout<<"标识"<

out<<"标识"<

inf.get(ch);

b=ch;

m=b>>4;

a=(int)m;

cout<<"标志"<

out<<"标志"<

inf.get(ch);

inf.get(ch);

b=ch;

a=(int)b;

cout<<"生存时间"<

out<<"生存时间"<

inf.get(ch);

b=ch;

a=(int)b;

cout<<"协议"<

out<<"协议"<

inf.get(ch);

b=ch;

c=(int)b*16*16;

inf.get(ch);

b=ch;

a=(int)b;

n=a+c;

cout<<"首部校验和"<

out<<"首部校验和"<

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<<"源地址"<

b=ch;

a=(int)b;

inf.get(ch);

b=ch;

c=(int)b;

inf.get(ch);

b=ch;

n=(int)b;

相关文档
最新文档