有没有一种方法可以通过命令行扫描网络上的计算机并获取它们的 IP、MAC 和 DNS 名称,而无需了解它们的任何信息?
答案1
nmap -v -sn 192.168.1.0/24 | grep -v down
附注当然,您可以根据需要更改子网设置。
pps。根据 nmap 版本,是否显示 MAC 地址。 5.21+(debian 测试+)显示。 5.0(目前在 Debian 稳定版中)不是。
答案2
arp -a
将转储所有这些信息,而无需安装nmap
。但是,nmap
会进行主动扫描,因此它会更新。
答案3
如果你真的一点头绪都没有,你应该先被动地听网络的。本地网络非常混乱,大多数数据包都会发送到所有网络设备。通过分解数据包的层,您可以了解很多有关拓扑的信息。请注意,有时这是根本不可能的,这取决于网络。
例如:
以太网帧为您提供以太网地址。
ARP(地址解析协议)将以太网地址与网络地址耦合,并给出有关网络设备之间关系的隐式提示。
IP(互联网协议)为您提供了两个具有 IP 地址的主机之间的关系。
TCP(传输控制协议)让您了解哪些服务(端口)处于活动状态以及哪些计算机相互聊天。
UDP(用户数据报协议)提供与 TCP 相同的信息。实际上,您不仅可以进行主动扫描,还可以了解更多信息。
如果您想查找特定信息,可以使用 tcpdump 或使用 pcap 库。我制造了一个小例子在 Perl 中。它转储所有硬件地址、网络地址、tcp 和 udp 端口。