Nmap:从范围内查找免费 IP

Nmap:从范围内查找免费 IP

有没有办法扫描网络上的免费 IP?我用过,nmap -sP 192.168.1.0/24但这实际上显示的是已启动的主机。

答案1

只要满足某些先决条件,像这样使用 Nmap 是完成您所要求操作的一种相当准确的方法:

  1. 您必须以 root 身份(或 Windows 上的管理员)运行扫描才能发送 ARP 请求,而不是 TCP 连接。否则,当地址只是被防火墙保护时,扫描可能会将地址报告为“关闭”。
  2. 您只能从与扫描的地址范围位于同一数据链路(第 2 层)上的系统执行此操作。否则,Nmap 将需要使用可能被防火墙阻止的网络层探测。

为了获取“可用”地址,您需要获取 Nmap 报告为“关闭”的地址列表。您可以使用简单的 awk 命令执行此操作:

sudo nmap -v -sn -n 192.168.1.0/24 -oG - | awk '/Status: Down/{print $2}'

使用的 Nmap 选项摘要:

  • 当您使用该-v选项时,Nmap 除了会打印“启动”的地址外,还会打印它发现的“停止”的地址。
  • -sP我用较新的拼写代替了-sn,它仍然可以完成相同的扫描,但意味着“跳过端口扫描”而不是误导性的“Ping 扫描”(因为主机发现阶段不一定意味着 ICMP Echo 扫描或 Ping)。
  • -n选项会跳过反向 DNS 查找,这会为您节省一些时间,因为您只关心 IP 地址而对名称不感兴趣。
  • -oG选项告诉 Nmap 输出可 grepable格式,这更便于 awk 处理。参数“ -”指示它将此输出发送到 stdout。

然后,awk 命令搜索“Status: Down”并打印第二个字段,其中包含 IP 地址。

当然,如果您有权访问交换机的运行配置或 DHCP 服务器的租约,您可以更权威地获得这个答案,而无需进行可能触发安全警报的扫描。

答案2

不确定 n-map,但可以合理地假设,如果您编写一个 ping 脚本,向每个地址发送 1 个 ping,则返回“目标无法访问”的任何主机都是未占用的,而返回“请求超时”的任何主机都是占用的,但没有响应 ping。这两个响应之间的区别在于“目标无法访问”没有收到对其 ARP 请求的响应。“请求超时”意味着某些东西确实响应了 ARP 请求,但没有响应 ICMP 数据包。

答案3

这是另一个受 Anders Larsson 启发的作品

对于 172.18.5.{129..254} 中的 ip; 执行 { ping -c 1 -W 1 $ip ; } &> /dev/null || echo $ip & done | 排序

意思是:“尝试 ping 范围内的所有 IP。如果 ping 失败,则打印该 IP”

如果你

nmap -v -sn -n 192.168.1.0/24 -oG - | awk '/Status: Down/{print $2}'

运行速度很快,但我注意到一些报告为“关闭”的主机实际上是“启动”的

答案4

PowerShell 中也有同样的事情......

((nmap -v -sn -n 10.208.2.0/24 -oG - ) -match "Status\:\sDown") | foreach {($_).Split(" ")[1]}

相关内容