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)

Linux arp命令详解及C/C++代码实现相关推荐

  1. linux arpwatch 命令详解

    linux arpwatch 命令详解 功能说明:监听网络上ARP的记录. 语 法:arpwatch [-d][-f<记录文件>][-i<接口>][-r<记录文件> ...

  2. linux ifconfig 命令详解

    linux ifconfig 命令详解 功能说明:显示或设置网络设备. 语 法:ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址&g ...

  3. 【网络编程】Linux tcpdump命令详解---编辑中

    目录 即看即用 详细说明 简介 输出信息含义 链路层头 TCP 数据包 UDP 数据包 SMB/CIFS 解码 AFS 请求和回应 KIP AppleTalk协议 IP 数据包破碎 时间戳 反向过滤 ...

  4. linux mingetty 命令详解

    linux mingetty 命令详解 功能说明:精简版的getty. 语 法:mingetty [--long-hostname][--noclear][tty] 补充说明:mingetty适用于本 ...

  5. linux zip 命令详解

    功能说明:压缩文件.  语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期 ...

  6. linux zipinfo 命令详解

    linux zipinfo 命令详解 功能说明:列出压缩文件信息. 语 法:zipinfo [-12hlmMstTvz][压缩文件][文件...][-x <范本样式>] 补充说明:执行zi ...

  7. Linux chkconfig命令详解

    Linux chkconfig命令详解 (2011-03-07 15:49:04) 转载 标签: linux shell chkconfig 杂谈 分类: 工作*Linux chkconfig:    ...

  8. linux uname 命令详解

    linux uname 命令详解 功能说明:显示系统信息. 语 法:uname [-amnrsv][--help][--version] 补充说明:uname可显示电脑以及操作系统的相关信息. 参 数 ...

  9. linux mread 命令详解

    linux mread 命令详解 功能说明:将MS-DOS文件复制到Linux/Unix的目录中. 语 法:mread [MS-DOS文件...][Linux文件或目录] 补充说明:mread为mto ...

最新文章

  1. html元素的分类有哪些?
  2. Android--制作开场动画/MediaPlayer OnCompletionListener
  3. android theme 使用方法,Android入门之Style与Theme用法实例解析
  4. python之爬虫(四)之 Requests库的基本使用
  5. Node.js安装及环境配置之Windows篇
  6. pix2pix, CycleGAN和pix2pixHD(没有公式,容易理解)
  7. 图像分类系统之功能实现概要
  8. 吴恩达机器学习视频学习笔记(4)
  9. linux源码(含有kfifo)下载
  10. word表格删除空白行java_Java批量删除Word中的空白段落
  11. php codeigniter 教程,CodeIgniter操作教程
  12. 微信公众号怎么发红包?
  13. r语言中的或怎么表示什么不同_R语言学习笔记(一)
  14. 非常棒的口才训练方法
  15. 事件循环libevent实现echoclient
  16. ISP--Black Level Correction(黑电平矫正)
  17. NameNode概述
  18. Go 语言几种运算符
  19. 路由dns劫持,路由器DNS劫持简单实现和防范分析
  20. win7下安装svn服务器端及客户端详细步骤

热门文章

  1. 详解《战地3》AA优化之道
  2. gojs去除水印,基于2.1
  3. 以root用户远程连接MySQL8.0问题总结
  4. 崮云湖街道:“钉钉子”精神破译发展密码
  5. iPhone双击背面打开粤康码
  6. js定义全局变量 vue页面_vue + typescript,定义全局变量或者方法
  7. python字体类型arial_Arial Narrow字体是Arial的()
  8. linux系统中drrwx-xr-x 用法详解
  9. 利用d3.js对大数据资料进行可视化分析
  10. 新建表ora-01031:insufficient privileges