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

本课程设计通过封装与发送ARP帧的方式,深入理解ARP协议的工作原理及其帧结构。实验使用C++实现了一个简单的ARP数据包构造及发送程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机网络课程设计

——机械工业出版社

第5章:发送ARP数据包

课程设计目的:

ARP协议用于完成IP地址与MAC 地址之间的转换。熟悉ARP协议对于IP数据包的传送过程具有重要意义。本课程设计的主要目的是通过封装与发送ARP帧,了解ARP协议的工作原理与ARP帧的结构。

完整程序代码:

#include

#include

#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

{

if(mac[i]'-'&&mac[i]'9'&&mac[i]'Z'&&mac[i]'z')

{

cout<

return 0;

}

else

{

if(mac[i]!='-')

j++;

else

{

k++;

if(j>2)

{

cout<

return 0;

}

else

j=0;

if(k>5)

{

cout<

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];

i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值