解析ARP数据包计算机网络课程设计Word格式.docx
- 文档编号:16386214
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:11
- 大小:81.38KB
解析ARP数据包计算机网络课程设计Word格式.docx
《解析ARP数据包计算机网络课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《解析ARP数据包计算机网络课程设计Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
1.以命令行的形式运行,如下所示:
arpparselogfile
其中,arpparse为程序名;
logfile为日志文件名。
2.程序输出内容如下所示:
源IP地址 源MAC地址 目的IP地址 操作 时间
各部分的说明如下所示:
●源IP地址:
输出ARP消息格式中的源IP地址字段。
●源MAC地址:
输出ARP消息格式中的源物理地址字段。
●目的IP地址:
输出ARP消息格式中的目的IP地址字段。
●目的MAC地址:
输出ARP消息格式中的目的物理地址字段。
●操作:
输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应答,则为2。
●时间:
该ARP包产生的时间
3.当程序接收到键盘输入Ctrl+C时退出。
三、课程设计分析
1.课程设计中的重点及难点
1)程序中会用到Winpcap,Winpcap是Win32环境下数据包捕获的开放代码函数库。
基于Winpcap的应用程序一般按照下面几个步骤进行设计:
●输出网卡设备列表。
●选择网卡并打开。
●捕获数据包时,可能需要设置过滤器。
●捕获数据包或者发送数据包。
2)在程序设计过程中需要注意网络—主机字节顺序的转化。
由于不同的计算机系统所采用的数据表示方式不同,对于2B或4B的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数据包头部的表示长度或类型的数据转换成本地机的表达形式。
可以利用函数ntohs()将网络字节序转换为主机字节序。
3)选择网卡并打开时,注意选择可用的网卡。
2.参考算法
1)取得当前网卡设备列表。
2)选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。
3)设置过滤器,此处的过滤器正则表达式为“arp”或者“etherproto\\arp”。
4)捕获数据包并进行处理(包括输出各IP地址,物理地址,操作类型以及时间)。
由于要记录日志文件,为了便于输出流参数,建议采用pcap_next_ex()函数。
流程图如下图所示:
3.核心代码
●ARP数据包结构
structarppkt{
unsignedshorthdtyp;
//硬件类型。
值0001表示其为Ethernet
unsignedshortprotyp;
//协议类型。
值0800表示上层协议为IP
unsignedcharhdsize;
//硬件地址长度。
值为06
unsignedcharprosize;
//协议地址长度。
值为04
unsignedshortop;
//操作值为0001/0002,分别表示ARP请求/应答
u_charsmac[6];
//源MAC地址,6B
u_charsip[4];
//源IP地址,4B
u_chardmac[6];
//目的MAC地址
u_chardip[4];
//目的IP地址
};
●获取网络设备列表,并以混杂模式打开网络设备
//获取网络设备列表
if(pcap_findalldevs(&
alldevs,errbuf)==-1)
{
cout<
<
"
Errorinpcap_findalldevs:
errbuf;
return;
}
//选择Ethernet卡
for(d=alldevs;
d;
d=d->
next)
{
//以混杂模式打开网卡,以接受所有的帧
if((adhandle=pcap_open_live(d->
name,1000,1,300,errbuf))==NULL)
{
cout<
\nUnabletoopentheadapter."
;
pcap_freealldevs(alldevs);
//释放设备列表
return;
}
if(pcap_datalink(adhandle)==DLT_EN10MB&
&
d->
addresses!
=NULL)
break;
●编译过滤器并设置过滤器,只捕获ARP数据包
charpacket_filter[]=”etherproto\\arp”;
//过滤,选择arp协议
if(pcap_compile(adhandle,&
fcode,packet_filter,1,netmask)<
0)
{cout<
\nUnabletocompilethepacketfilter.Checkthesyntax.\n"
pcap_freealldevs(alldevs);
return;
}
//设置过滤器
if(pcap_setfilter(adhandle,&
fcode)<
\nErrorsettingthefilter.\n"
●循环捕获ARP包,并进行解析
while((result=pcap_next_ex(adhandle,&
header,&
pkt_data))>
=0)
{
输出ARP数据包的各个域的内容到文件和屏幕上
四、源程序及运行截图
1.源程序如下:
#include<
winsock2.h>
#pragmacomment(lib,"
Ws2_32.lib"
)//用到ntobs()
//等同于点击"
project-setting-link"
打开object/librarymodule编辑框后加入文件
wpcap.lib"
)
#include"
pcap.h"
//此头文件没有包含在VC中,需要另外加入
fstream.h>
iomanip.h>
//格式化输出需要用到
conio.h>
//用到_getch()
//注意到接收的数据包头中代表类型,数据长度的字段采用的是big-endian
//所以对于2B/4B的数据要用ntohs()转换为本机形式
//ARP包结构
unsignedshortop;
voidpacket_handler(constpcap_pkthdr*header,constu_char*pkt_data,ostream&
out);
voidmain(intargc,char*argv[])
if(argc!
=2)
Usage:
arpparselogfilename"
endl;
pressanykeytocontinue."
_getch();
pcap_if_t*alldevs;
pcap_if_t*d;
pcap_t*adhandle;
charerrbuf[PCAP_ERRBUF_SIZE];
u_intnetmask;
charpacket_filter[]="
etherproto\\arp"
structbpf_programfcode;
structpcap_pkthdr*header;
constu_char*pkt_data;
if(pcap_findalldevs(&
addressess!
if(d==NULL)
\nNointerfacesfound!
MakesureWinpcapisinstalled.\n"
//获得子网掩码
netmask=((sockaddr_in*)(d->
netmask))->
sin_addr.s_un.s_addr;
//编译过滤器,只捕获ARP包
if(pcap_compile(adhandle,&
{cout<
//设置过滤器
if(pcap_setfilter(ashandle,&
cout<
\t\tlisteningon"
description<
..."
endl<
//显示提示信息及每项含义
ofstreamfout(argv[1],ios:
:
app);
//日志记录文件
//为了查看日志时的方便,其中加入了日期记录
time_tt;
time(&
t);
fout.seekp(0,ios:
end);
if(fout.tellp()!
fout<
fout<
\t\tARPrequest
(1)/reply
(2)on"
ctime(&
SourIpAddr"
"
SourMACAddress"
<
DesIpAddr"
DesMACAddress"
OP"
Time"
intresult;
while((result=pcap_next_ex(adhandle,&
if(result==0)
continue;
packer_handler(header,pkt_data,cout);
packet_handler(header,pkt_data,fout);
out)
arpkt*arph=(arppkt*)(pkt_data+14);
for(inti=0;
i<
3;
i++)
out<
int(arph->
sip[i])<
'
.'
out.setf(ios:
left);
setw(3)<
sip[3])<
out.unsetf(ios:
uppercase);
for(i=0;
5;
hex<
setw
(2)<
smac[i])<
-'
smac[5])<
out.fill(oldfillchar);
hex|ios:
dip[3])<
//输出目的MAC地址
out.fill('
0'
);
out<
dmac[i])<
ntohs(arph->
op)<
structtm*ltime;
ltime=localtime(&
header->
ts.tv_sec);
ltime->
tm_hour<
tm_min<
tm_sec;
2.运行截图如下:
五、心得体会
本次课程设计,完成了在xp环境下的解析ARP数据包。
在具体实现获取网络中的ARP数据包解析数据包的内容,并将其写入日志文件的过程中,使我更加清楚物理地址、IP地址的关联,源地址与目的地址的关系,以及二者对数据类型的格式要求。
最重要的是通过这次的实际训练让我对ARP协议更加理解。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故才行。
课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。
随着科学技术发展的日新月异,网络已经成为当今计算机发展中空前活跃的领域,在生活中可以说是无处不在,因此作为二十一世纪的计算机专业的大学生来说掌握网络组网技术是十分重要的。
六、参考文献
【1】谢希人著.计算机网络(第四版)大连理工大学出版社2003
【2】宋凯等著.计算机网络.北京:
清华大学出版社2010
【3】吴功宜等著.计算机网络课程设计.北京:
机械工业出版社2005.9
【4】李爱华等著.面向对象程序设计(C++语言).北京:
清华大学出版社2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 解析 ARP 数据包 计算机网络 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)