大家好,欢迎来到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