1、
计算机网络课程设计
——机械工业出版社
第5章:发送ARP数据包
课程设计目的:
ARP协议用于完成IP地址与MAC 地址之间的转换。熟悉ARP协议对于IP数据包的传送过程具有重要意义。本课程设计的主要目的是通过封装与发送ARP帧,了解ARP协议的工作原理与ARP帧的结构。
完整程序代码:
#include
2、 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
3、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,
4、j=0,k=0;
strcpy(mac,argv);
int m=strlen(argv);
for(i=0;i 5、j++;
else
{
k++;
if(j>2)
{
cout<<"mac address errot"< 6、c+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)> 7、'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 ch 8、ar *ip_addr)
{
char ip[16];
int i=0,j=0,k=0;
strcpy(ip,argv);
int m=strlen(argv);
for(i=0;i 9、 j++;
else
{
k++;
if(j>3)
{
cout<<"IP address error!"< 10、ile(*(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"< 11、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=(unsi 12、gned 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(! 13、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 adapte 14、r list!"< 15、";
int k;
cin>>k;
if(k<1||k>i)
{
cout<<"Out of range!"< 16、
return;
}
if(pcap_sendpacket(fp,(unsigned char*)&arpPacket,sizeof((unsigned char*)&arpPacket))==-1)
{
cout<<"ARP packet send error!"<
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818