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

Linux arp命令详解及C/C++代码实现ARP(地址解析协议)是一种网络协议,用于从IP地址中找出设备的硬件(MAC)地址。当设备想要与本地网络上的其他设备通信时使用它,发送设备使用ARP将IP地址转换为MAC地址。设备发送一个ARP请求消息,其中包含接收设备的IP地址。本地网段上的所有设备都会看到该消息,但只有具有该IP地址的设备会使用包含其MAC地址的ARP回复消息进行响应。发送设备现在有足够的信息将数据包发送到接收设备。ARP过程的解释:假设主机A想与主机B通信。主机A知道主机

大家好,欢迎来到IT知识分享网。

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)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15329.html

(0)
上一篇 2024-02-18 22:00
下一篇 2024-02-19 14:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信