linux - 从已知主机名列表中获取 IP 和 MAC 信息的方法

标签 linux

我有一个混合 Linux 发行版(一些 Solaris、一些 RedHat、一些 Ubuntu)的主机名列表,我需要获取每个发行版上任何以太网设备的 IP 和 MAC。

我没有任何这些服务器的 root 访问权限,因此我在一台服务器上编写了一个 bash 脚本,该脚本在其他服务器上远程运行,并返回从 ifconfig 的输出解析的 IP 和 MAC。因为这个脚本使用了expect文件来传入我的密码,所以执行时间比较长,而且不太优雅。

必须有更好的方法来做到这一点。我知道一些工具可以为我做到这一点,但不幸的是我无法安装任何其他软件包,因为我没有这样做的权限。

arp -a 的输出正是我想要的,但问题是其中一些条目似乎有多个 IP 和主机名绑定(bind)到同一 MAC 地址。所以我得到如下条目: HOSTNAME-1 (IP-1) 位于 eth0 上的 SAME_MAC_ADDR [ether] HOSTNAME-2 (IP-2) 位于 eth0 上的 SAME_MAC_ADDR [ether] ? (IP-2) 位于 eth0 上的 SAME_MAC_ADDR [ether]

有没有办法首先从我拥有的主机名列表中获取所有 IP 和 MAC 地址?我猜 arp 是我需要的?

其次,如果有重复,是否有办法获取与每个 MAC 地址关联的所有其他主机名或 IP?

最佳答案

arp 命令将显示您所连接的主机已知的 MAC 地址和关联的 IP 地址列表。

ifconfig 是正确的工具(或某些发行版中的“ip a”)。为什么不尝试在每台计算机中放置一个 cron 作业,将“ip a”或“ifconfig”的结果存储到临时文件中,或者在每个远程主机中执行该命令,只需下载该文件并在本地服务器中进行解析?

如果没有,他们在 *IX 框中获取网络适配器准确信息的唯一方法是进入主机并询问此信息。

关于linux - 从已知主机名列表中获取 IP 和 MAC 信息的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335711/

相关文章:

linux - VIM:替换当前 C/C++ 函数中所有出现的单词

linux - 制作-j 8 g++ : internal compiler error: Killed (program cc1plus)

linux - 使用 MacOS、Linux 和 Windows 的 SVN

linux - ip6tables 设置阻止 ipv6 碎片

c++ - 在 C++ 中使用 system() 时,我的程序卡住了,我该如何让它继续?

linux - 复制扇区?

c++ - aio_read 和 read/EWOULDBLOCK 有什么区别?

linux - 根据键对文件进行排序并按数据中心分组

linux - 使用 ldapsearch 只返回一个值

c++ - OpenProcess/ReadProcessMemory/WriteProcessMemory/CloseHandle 等效项