我是一名 Web 开发人员,正在尝试更好地处理安全问题。我试图找出一种方法(在基于 Linux/Debian 的发行版上)来列出我的上网本所在的同一 LAN 上的所有计算机。我尝试了“arp -n”,但我觉得这不是一个完整的列表,因为我的 iPhone 和上网本在同一个 Wi-Fi 路由器上,而且没有出现。有没有更好的方法来获取共享同一网关的所有机器的完整列表?
答案1
答案2
我使用的就是 nmap,以及使用要扫描的网络 CIDR 块表示法的地址。首先,您需要安装 nmap,因为它可能未随您的发行版预装。在 Ubuntu 上:
sudo apt-get install nmap
接下来使用 ifconfig 找出你的网络地址:
ifconfig
我想要扫描的接口的 ifconfig 输出:
wlan1 Link encap:Ethernet HWaddr 00:1f:3b:03:d2:bf
inet addr:192.168.1.104 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
...
使用 inet addr 和 Mask 找出 CIDR 表示法中的网络地址,有关 CIDR 的更多信息这里。 地址是:
192.168.1.0/24
使用 -sP 参数运行 nmap,它只会扫描检查主机是否在线:
sudo nmap -sP 192.168.1.0/24
nmap 输出将会像这样:
Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds
就是这样,如果你需要更多有关 nmap 的帮助,请参阅nmap 官方文档,或者运行:
nmap --help
答案3
arp -n
仅显示您的 LAN 上已与您的计算机通信过的计算机。您可以通过 ping 广播和所有主机多播地址来更好地填充该列表:
“全 1”(二进制)广播地址。请注意,大多数 IP 堆栈会将其转换为您所连接的所有子网的子网广播地址:
ping 255.255.255.255
当前子网的子网广播地址。假设您位于 192.168.1.0/24:
ping 192.168.1.255
“所有主机”多播地址。我非常喜欢这个地址,因为它更有可能找到为其他 IP 子网配置的主机,这些主机恰好与您连接到同一个以太网 LAN:
ping 224.0.0.1
请注意,此方法以及迄今为止我在其他答案中看到的其他方法仅查找当前网络上的 IP 可访问主机。这可能就是您需要关心的全部内容,但攻击者有可能在不通过 IP 可见的情况下窥探网络或对网络进行恶意攻击。
答案4
nmap 扫描
要扫描一系列 IP 地址的状态,这很简单:
sudo nmap -sn 192.168.1.2-20
在哪里:
-sn: Ping Scan - disable port scan
笔记:
- 在 Nmap 的早期版本中,
-sn
被称为-sP
我在 Mac OS X(基于 BSD)上执行了此操作。我不确定 Linux 版本是否有任何差异。