好文档 - 专业文书写作范文服务资料分享网站

计算机网络课程设计(第六章)解析ARP数据包(完整程序代码)

天下 分享 时间: 加入收藏 我要投稿 点赞

-------------精选文档-----------------

计算机网络课程设计

——机械工业出版社

第6章:解析ARP数据包

课程设计目的:

本课程设计的主要目的是对网络上的ARP数据包进行解析,从而熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。 课程设计的内容和要求 :

通过编制程序获取网络中的ARP数据包解析数据包的内容显示在标准输出上

并同时写入日志文件。

程序的具体要求如下所示 1、以命令行的形式运行

其中

2、程序输出内容如下所示

将结果

arp arp.log

arp为程序名 arp.log为日志文件名。

源IP地址 源MAC地址 目的IP地址 操作 时间

各部分的说明如下所示

源IP地址输出ARP消息格式中的源IP地址字段 源MAC地址

输出ARP消息格式中的源物理地址字段

目的IP地址输出ARP消息格式中的目的IP地址字段。 目的MAC地址输出ARP消息格式中的目的物理地址字段

操作

时间

输出ARP消息格式中的操作字段若为ARP请求则为1

该ARP包产生的时间

若为ARP应答则为2

3、当程序接收到键盘输入Ctrl+C时字段

完整程序代码:

#include #include #include #include \ #include

#pragma comment(lib,\ #pragma comment(lib,\ struct arppkt {

unsigned short hdtyp; unsigned short protyp;

可编辑

-------------精选文档-----------------

};

unsigned char hdsize; unsigned char prosize; unsigned short op; u_char smac[6]; u_char sip[4]; u_char dmac[6]; u_char dip[4];

void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream &out) {

arppkt* arph=(arppkt*)(pkt_data+14); for(int i=0;i<3;i++)

out<sip[i])<<'.';

out.setf(ios::left);

out<sip[3])<<\ out.unsetf(ios::left); char oldfillchar=out.fill('0'); out.setf(ios::uppercase); for(i=0;i<5;i++)

out<smac[i])<<'-';

out<smac[5])<<\ out.fill(oldfillchar);

out.unsetf(ios::hex|ios::uppercase); for(i=0;i<3;i++)

out<dip[i])<<'.';

out.setf(ios::left);

out<dip[3])<<\ out.unsetf(ios::left); out.fill('0');

out.setf(ios::uppercase); for(i=0;i<5;i++)

out<dmac[i])<<'-';

out<dmac[5])<<\ out.fill(oldfillchar);

out.unsetf(ios::hex|ios::uppercase);

可编辑

-------------精选文档-----------------

}

out<op)<<\ struct tm *ltime;

ltime=localtime(&header->ts.tv_sec); out.fill('0');

out<tm_hour<<':'<

>tm_min<<':'<tm_sec;

void main(int argc,char *argv[]) {

if(argc!=2) { }

pcap_if_t *alldevs; pcap_if_t *d; pcap_t *adhandle;

char errbuf[PCAP_ERRBUF_SIZE]; u_int netmask;

char packet_filter[]=\ struct bpf_program fcode; struct pcap_pkthdr *header; u_char *pkt_data;

cout<<\ return;

//获取网络设备列表

if (pcap_findalldevs(&alldevs,errbuf)==-1) {

cout<<\ return; }

//选择一个ethernet网卡 for(d=alldevs;d;d=d->next) {

if((adhandle=pcap_open_live(d->name,1000,1,300,errbuf))==NULL) {

可编辑

-------------精选文档-----------------

cout<<\ }

if(pcap_datalink(adhandle)==DLT_EN10MB&&d->addresses!=NULL) }

if(d==NULL) {

cout<<\ return; }

netmask=((sockaddr_in*)(d->addresses->netmask))->sin_addr.S_un.S_addr; if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0) {

cout<<\ pcap_freealldevs(alldevs); return; }

if(pcap_setfilter(adhandle,&fcode)<0) {

cout<<\ pcap_freealldevs(alldevs); return; }

cout<<\ ofstream fout(argv[1],ios::app); time_t t; time(&t);

fout.seekp(0,ios::end); if(fout.tellp()!=0) fout<

fout<<\

cout<<\Addr\

break;

pcap_freealldevs(alldevs); return;

可编辑

-------------精选文档-----------------

fout<<\Addr\ pcap_freealldevs(alldevs); int result;

while((result=pcap_next_ex(adhandle,&header,&pkt_data))>=0) {

if(result==0)

continue;

packet_handler(header,pkt_data,cout); packet_handler(header,pkt_data,fout); } }

结果截图

可编辑

计算机网络课程设计(第六章)解析ARP数据包(完整程序代码)

-------------精选文档-----------------计算机网络课程设计——机械工业出版社第6章:解析ARP数据包课程设计目的:本课程设计的主要目的是对网络上的ARP数据包进行解析,从而熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。课程设计的内容和要求:通过编制
推荐度:
点击下载文档文档为doc格式
7ej905mzmz3uh255c6he20sz532alg00cdc
领取福利

微信扫码领取福利

微信扫码分享