Linux arp命令详解及C/C++代码实现

ARP(地址解析协议)是一种网络协议,用于从 IP 地址中找出设备的硬件 (MAC) 地址。当设备想要与本地网络上的其他设备通信时使用它,发送设备使用 ARP 将 IP 地址转换为 MAC 地址。

设备发送一个 ARP 请求消息,其中包含接收设备的 IP 地址。 本地网段上的所有设备都会看到该消息,但只有具有该 IP 地址的设备会使用包含其 MAC 地址的 ARP 回复消息进行响应。 发送设备现在有足够的信息将数据包发送到接收设备。

在这里插入图片描述

ARP过程的解释:

假设主机 A 想与主机 B 通信。主机 A 知道主机 B 的 IP 地址,但不知道主机 B 的 MAC 地址。为了找出主机B的MAC地址,主机A发送一个ARP请求,列出主机B的IP地址作为目的IP地址,MAC地址为FF:FF:FF:FF:FF:FF(以太网广播) .交换机会将帧转发到所有接口。

网段上的每个设备都会收到该数据包,但由于目标 IP 地址是主机 B 的 IP 地址,因此只有主机 B 会回复 ARP 回复数据包,并列出其 MAC 地址。

Linux中的arp命令是什么

ARP 代表“地址解析协议”,是一种用于将 IP 地址映射到局域网上的物理 MAC 地址的协议。
在这里插入图片描述
在局域网上,客户端计算机尝试联系服务器,同一广播域上的两台计算机之间的通信是指局域网。ARP 缓存是一个 IP 地址表及其对应的 MAC 地址。

要查看 Linux 上的 ARP 表,请打开终端输入以下命令:

arp -a

在这里插入图片描述
可以在输出中看到您的计算机 ARP 表, 第一列是IP地址,第二列对应MAC地址。还可以通过使用 arp 命令指定 IP 地址来查找特定 IP 地址的 ARP 缓存条目:

arp -a <IP地址>

在这里插入图片描述

下面给出了一些 ARP 命令:

arp -s

该命令用于在ARP表中添加静态条目,将IP地址解析为物理地址。 要在 ARP 表中添加静态条目,在终端上编写 arp -s 命令以及设备的 IP 地址和 MAC 地址。

arp -s 192.168.67.15 00-a5-00-34-c3-09

下面我们来看看怎么在ARP 表中删除条目:

arp -d

当您要从特定接口的 ARP 表中删除条目时使用此命令。 要删除条目,请在要删除的命令提示符中写入 arp -d 命令以及 IP 地址。

arp -d 192.168.67.23

您还可以从 ARP 表中删除所有条目。 此命令将从表中删除或刷新所有条目。

arp -d *

Linux arp命令C/C++代码实现

int main(int argc, char **argv)
{
	int isInsert = 0;
	char *ip;
	int opt;

	/* 设置 socket */
	socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
	if (socket_fd < 0)
	{
		fprintf(stderr, "socket open failure: %s\n", strerror(errno));
		exit(EXIT_FAILURE);
	}

	/* 处理参数  */
	while ((opt = getopt(argc, argv, "vhai:g:d:s:")) != -1)
	{
		switch (opt)
		{
			case 'v':
				arp_debug();
				break;
			case 'h':
				arp_display_usage();
				break;
			case 'i':
				arp_debug_dump(optarg);
				arp_change_device(optarg);
				break;
			case 'a':
				arp_display_all();
				break;
			case 'g':
				arp_debug_dump(optarg);
				arp_get_entry(optarg);
				break;
			case 'd':
				arp_debug_dump(optarg);
				arp_delete_entry(optarg);
				break;
			case 's':
				/* 注意:对于 option s,需要在这里破解,并始终假设这是最后一个选项 
 				 */
				arp_debug_dump(optarg);
				isInsert = 1;
				ip = optarg;
				break;	
			default:
				isInsert = 0;
				fprintf(stderr, "getopt failure: please run 'arp -h' for the usage\n");
				break;
		}
	}
	
    if(argc < 2)
    {
		/* 显示 ARP 缓存中的所有条目  */
		arp_display_all();
    }	

	
	/* 获取 MAC 地址的额外参数  */
	if (isInsert == 1)
	{
		arp_debug_dump(argv[optind]);
		arp_set_entry(ip, argv[optind]);
	}

	/* 关闭套接字 */
	close(socket_fd);
	return 0;
}

编译运行:

在这里插入图片描述

总结

了解了 ARP 是什么以及它是如何工作的。 及如何查找本地网络的 ARP 缓存和特定 IP 地址。希望这将帮助您解决与网络相关的问题,更多详细信息可以查看man手册。

欢迎关注微信公众号【程序猿编码】,需要arp命令完整源码的添加本人微信号(c17865354792)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值