收藏 分销(赏)

计算机网络课程设计(第五章)发送ARP数据包(完整程序代码).doc

上传人:天**** 文档编号:10506107 上传时间:2025-05-31 格式:DOC 页数:6 大小:114.13KB
下载 相关 举报
计算机网络课程设计(第五章)发送ARP数据包(完整程序代码).doc_第1页
第1页 / 共6页
计算机网络课程设计(第五章)发送ARP数据包(完整程序代码).doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述
计算机网络课程设计 ——机械工业出版社 第5章:发送ARP数据包 课程设计目的: ARP协议用于完成IP地址与MAC 地址之间的转换。熟悉ARP协议对于IP数据包的传送过程具有重要意义。本课程设计的主要目的是通过封装与发送ARP帧,了解ARP协议的工作原理与ARP帧的结构。 完整程序代码: #include<iostream.h> #include<pcap.h> #pragma comment(lib,"wpcap.lib") #pragma comment(lib,"ws2_32.lib") typedef struct PhyFrame { unsigned char DstMAC[6]; unsigned char SrcMAC[6]; unsigned short FrameType; }PHYFRAME; typedef struct ArpFrame { unsigned short HardwareType; unsigned short ProtocolType; unsigned char MACLen; unsigned char IPLen; unsigned short Flag; unsigned char SrcMAC[6]; unsigned char SrcIP[4]; unsigned char DstMAC[6]; unsigned char DstIP[4]; unsigned char Padding[18]; }ARPFRAME; typedef struct ArpPacket { PHYFRAME phyFrame; ARPFRAME arpFrame; }*ARPPACKET; ArpPacket arpPacket; int CheckMAC(char *argv,unsigned char *mac_addr) { char mac[18]; int i=0,j=0,k=0; strcpy(mac,argv); int m=strlen(argv); for(i=0;i<m;i++) { if(mac[i]<'-'||(mac[i]>'-'&&mac[i]<'0')||(mac[i]>'9'&&mac[i]<'A')||(mac[i]>'Z'&&mac[i]<'a')||mac[i]>'z') { cout<<"mac address error"<<endl; return 0; } else { if(mac[i]!='-') j++; else { k++; if(j>2) { cout<<"mac address errot"<<endl; return 0; } else j=0; if(k>5) { cout<<"mac address error"<<endl; return 0; } } } } for(i=0;i<6;i++) { while(*(mac+j)=='-') j++; if(*(mac+j)>='0'&&*(mac+j)<='9') mac_addr[i]=(unsigned char)(*(mac+j)-'0'); if(*(mac+j)>='a'&&*(mac+j)<='z') mac_addr[i]=(unsigned char)(*(mac+j)-'a'+10); if(*(mac+j)>='A'&&*(mac+j)<='Z') mac_addr[i]=(unsigned char)(*(mac+j)-'A'+10); j++; mac_addr[i]*=16; if(*(mac+j)>='0'&&*(mac+j)<='9') mac_addr[i]+=(unsigned char)(*(mac+j)-'0'); if(*(mac+j)>='a'&&*(mac+j)<='z') mac_addr[i]+=(unsigned char)(*(mac+j)-'a'+10); if(*(mac+j)>='A'&&*(mac+j)<='Z') mac_addr[i]+=(unsigned char)(*(mac+j)-'A'+10); j++; } return 1; } int CheckIP(char *argv,unsigned char *ip_addr) { char ip[16]; int i=0,j=0,k=0; strcpy(ip,argv); int m=strlen(argv); for(i=0;i<m;i++) { if(ip[i]<'.'||(ip[i]>'.'&&ip[i]<'0')||ip[i]>'9') { cout<<"IP address error!"<<endl; return 0; } else { if(ip[i]!='.') j++; else { k++; if(j>3) { cout<<"IP address error!"<<endl; return 0; } else j=0; if(k>3) { cout<<"IP address error!"<<endl; return 0; } } } } for(i=0;i<4;i++) { while(*(ip+j)=='.') j++; ip_addr[i]=(unsigned char)atoi(ip+j); } return 1; } void main(int argc,char *argv[]) { if(argc!=5) { cout<<"please input command: SendArp source_ip source_mac dest_ip dest_mac"<<endl; return; } int i=0; memset(&arpPacket,0,sizeof(arpPacket)); if(!CheckMAC(argv[4],arpPacket.phyFrame.DstMAC)) return; if(!CheckMAC(argv[2],arpPacket.phyFrame.SrcMAC)) return; arpPacket.phyFrame.FrameType=htons((unsigned short)0x0608); arpPacket.arpFrame.HardwareType=(unsigned short)0x0100; arpPacket.arpFrame.ProtocolType=(unsigned short)0x0008; arpPacket.arpFrame.MACLen=(unsigned char)6; arpPacket.arpFrame.IPLen=(unsigned char)4; if(!CheckMAC(argv[2],arpPacket.arpFrame.SrcMAC)) return; if(!CheckIP(argv[1],arpPacket.arpFrame.SrcIP)) return; if(!CheckMAC(argv[4],arpPacket.arpFrame.DstMAC)) return; if(!CheckIP(argv[3],arpPacket.arpFrame.DstIP)) return; for(i=0;i<18;i++) arpPacket.arpFrame.Padding[i]=0; pcap_if_t *alldevs; pcap_if_t *d,*head=NULL; pcap_t *fp; char errbuf[PCAP_ERRBUF_SIZE]; if(pcap_findalldevs(&alldevs,errbuf)==-1) { cout<<"Unable to create adapter list!"<<endl; return; } i=0; for(d=alldevs;d;d=d->next) { cout<<++i<<": "<<d->name; if(d->description) cout<<" "<<d->description<<endl; } if(i==0) { cout<<"No adapter found!"<<endl; return; } cout<<"Enter the interface number (1-"<<i<<")"; int k; cin>>k; if(k<1||k>i) { cout<<"Out of range!"<<endl; return; } for(d=alldevs,i=1;i<k;d=d->next,i++); head=d; if((fp=pcap_open_live(head->name,1000,1,1000,errbuf))==NULL) { cout<<"Unable to open the adapter!"<<endl; pcap_freealldevs(alldevs); return; } if(pcap_sendpacket(fp,(unsigned char*)&arpPacket,sizeof((unsigned char*)&arpPacket))==-1) { cout<<"ARP packet send error!"<<endl; return; } cout<<"Source MAC: "<<argv[1]<<endl; cout<<"Source IP: "<<argv[2]<<endl; cout<<"Dest MAC: "<<argv[3]<<endl; cout<<"Dest MAC: "<<argv[4]<<endl; cout<<"ARP packet send success!"<<endl; } 结果截图
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服