我想获取一个文本文件,列出哪些 IP 地址位于我的本地子网以及它们连接到哪个以太网交换机。理想情况下,机器的名称会很好,但我可以手动计算出来。
有人建议使用 NMAP。我试过,但选项太多了,不知所措。有没有一个选项可以给我提供这类信息。
我的直觉是,由于交换机对 IP 是透明的,因此很难找到交换机信息。有人可以建议一种方法吗?
答案1
例如使用
nmap -sP -PR 192.168.1.0/24
(使用适当的网络地址和掩码)
映射主机。-sP
跳过端口扫描,同时-PR
请求 ARP 扫描,它只在本地网络上有效,但不能被防火墙阻止(实际上,它可以,但这非常不切实际)。
您可以使用一些脚本将其过滤为示例列表:
nmap -sP -PR 192.168.1.0/24 2>/dev/null |grep "appears to be up" |awk '{print $2}'
要获取物理位置,您需要一个可管理的交换机。好的可管理交换机将响应 SNMP,并允许您查询特定 MAC 地址的位置。
/proc/arp
您首先需要将 IP 映射到 MAC 地址,您可以尝试处理 nmap 的输出,但查阅系统 ARP 表(在 *nix 上读取,或尝试该arp
命令)更容易。
获得 MAC 地址后,通过 SNMP 获取端口的标准方式通常是通过 Q-BRIDGE-MIB(如果您的交换机处理 VLAN)或(IIR)P-BRIDGE-MIB。例如,您可以使用 net-snmp 工具查询它:
snmpget -v2c -c public 192.168.1.1 Q-BRIDGE-MIB::dot1qTpFdbPort.y.x.x.x.x.x.x
其中public
是 SNMP 社区的名称,192.168.1.1
是转变y
是 VLAN ID,是MACx
地址的十进制编码字节。您可能需要在交换机上启用 SNMP,允许从您的站点进行访问,使用不同的社区名称和/或协议版本。
对于不处理 VLAN 的交换机,据我所知,P-BRIDGE-MIB 中有等效条目。
要了解地址编码的工作原理,您可以使用snmpwalk
检索交换机的完整转发表,如下所示:
smpwalk -v2c -c public 192.168.1.1 Q-BRIDGE-MIB::dot1qTpFdbPort
如果您有多个交换机,则每个 MAC 都会出现在正确交换机的正确端口上,但也会出现在其他交换机的相关中继端口上,因此您需要一种方法来过滤掉中继端口。
答案2
列出所有使用网关的主机(可能是交换机(或路由器)
arp-scan -I eth0 -l
答案3
不确定您使用的是哪种操作系统,但在某种程度上,您可以从您的机器中找到信息。您应该运行 wireshark(ethereal)工具。这将让您了解在网络之间传输的所有数据包。您不会获得所有机器的列表,但将能够看到许多网络和机器。之后,您可以检查您的 arp 表,还可以找到机器的 IP、mac 地址。您的子网掩码应该会告诉您当前网络中允许多少台机器。