《计算机网络课程设计(第六章)解析ARP数据包(完整程序代码)(共4页).docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计(第六章)解析ARP数据包(完整程序代码)(共4页).docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上计算机网络课程设计机械工业出版社第6章:解析ARP数据包课程设计目的:本课程设计的主要目的是对网络上的ARP数据包进行解析,从而熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。课程设计的内容和要求 : 通过编制程序获取网络中的ARP数据包解析数据包的内容将结果显示在标准输出上并同时写入日志文件。 程序的具体要求如下所示 1、以命令行的形式运行arp arp.log 其中arp为程序名 arp.log为日志文件名。 2、程序输出内容如下所示 源IP地址 源MAC地址 目的IP地址 操作 时间 各部分的说明如下所示 源IP地址输出ARP消息格式中的源IP地址字段
2、源MAC地址输出ARP消息格式中的源物理地址字段 目的IP地址输出ARP消息格式中的目的IP地址字段。 目的MAC地址输出ARP消息格式中的目的物理地址字段 操作输出ARP消息格式中的操作字段若为ARP请求则为1 若为ARP应答则为2时间该ARP包产生的时间 3、当程序接收到键盘输入Ctrl+C时字段完整程序代码:#include#include#include#include pcap.h#include#pragma comment(lib,ws2_32.lib)#pragma comment(lib,wpcap.lib)struct arppktunsigned short hdtyp;
3、unsigned short protyp;unsigned char hdsize;unsigned char prosize;unsigned short op;u_char smac6;u_char sip4;u_char dmac6;u_char dip4;void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream &out)arppkt* arph=(arppkt*)(pkt_data+14);for(int i=0;i3;i+)outsipi).;out.setf(ios:left);ou
4、tsetw(3)sip3) ;out.unsetf(ios:left);char oldfillchar=out.fill(0);out.setf(ios:uppercase);for(i=0;i5;i+)outhexsetw(2)smaci)-;outhexsetw(2)smac5) ;out.fill(oldfillchar);out.unsetf(ios:hex|ios:uppercase);for(i=0;i3;i+)outdipi).;out.setf(ios:left);outsetw(3)dip3) ;out.unsetf(ios:left);out.fill(0);out.se
5、tf(ios:uppercase);for(i=0;i5;i+)outhexsetw(2)dmaci)-;outhexsetw(2)dmac5) ;out.fill(oldfillchar);out.unsetf(ios:hex|ios:uppercase);outop)ts.tv_sec);out.fill(0);outtm_hour:setw(2)tm_min:setw(2)tm_sec;out.fill(oldfillchar);outendl;void main(int argc,char *argv)if(argc!=2)coutplease input command: parse
6、arp output_fileendl;return;pcap_if_t *alldevs;pcap_if_t *d;pcap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;u_int netmask;char packet_filter=ether proto arp;struct bpf_program fcode;struct pcap_pkthdr *header;u_char *pkt_data;/获取网络设备列表if (pcap_findalldevs(&alldevs,errbuf)=-1) couterror in pcap_find all
7、devs:next) if(adhandle=pcap_open_live(d-name,1000,1,300,errbuf)=NULL) coutaddresses!=NULL) break;if(d=NULL) coutaddresses-netmask)-sin_addr.S_un.S_addr;if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)0) coutUnable to compile the packet filter.Check the syntax.; pcap_freealldevs(alldevs); ret
8、urn;if(pcap_setfilter(adhandle,&fcode)0) coutError setting the filter.; pcap_freealldevs(alldevs); return;coutListening ondescription.endl;ofstream fout(argv1,ios:app);time_t t;time(&t);fout.seekp(0,ios:end);if(fout.tellp()!=0) foutendl;foutttAPP requst(1)/reply(2) on ctime(&t);coutSour IP Addr Sour MAC Address Des IP Addr Des MAC Address OP Timeendl;foutSour IP Addr Sour MAC Address Des IP Addr Des MAC Address OP Time=0) if(result=0) continue; packet_handler(header,pkt_data,cout); packet_handler(header,pkt_data,fout);结果截图专心-专注-专业