-------------精选文档-----------------
计算机网络课程设计
——机械工业出版社
第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
#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<
out.setf(ios::left);
out<
out<
out<
out.unsetf(ios::hex|ios::uppercase); for(i=0;i<3;i++)
out<
out.setf(ios::left);
out<
out.setf(ios::uppercase); for(i=0;i<5;i++)
out<
out<
out.unsetf(ios::hex|ios::uppercase);
可编辑
-------------精选文档-----------------
}
out<
ltime=localtime(&header->ts.tv_sec); out.fill('0');
out< >tm_min<<':'< 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数据包(完整程序代码)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)