Nmap输出

Nmap输出

我有一个项目,我知道网络上只有一台计算机和一台打印机。我想要做的是检测打印机何时连接到网络。我也知道电脑是192.168.3.1。然而,使用 DHCP,我将不知道打印机地址(是的,可以将其设置为静态以使其更容易,但是,“他们”不喜欢这样。“他们”希望它是动态的)

我拥有的是一个执行以下操作并且有效的脚本。

nmap -sP 192.168.3.0/24 \
  | awk '/192.168.3/ && !/192.168.3.1$/' \
  | sed 's/Nmap scan report for //'

Nmap输出

 Nmap scan report for 192.168.3.1
 Host is up (0.014s latency).
 Nmap scan report for 192.168.3.100
 Host is up (0.012s latency).
 Nmap done: 256 IP addresses (2 hosts up) scanned in 2.54 seconds

脚本输出

 192.168.3.100

只需几秒钟即可工作,但有更好/更干净/更快的方法吗?

答案1

您可以使用以下awk命令来完成此操作:

nmap -sP 192.168.3.0/24 \
  | awk '/192.168.3/ && !/192.168.3.1$/{print $NF}'

这表明awk打印匹配行的最后一个字段

答案2

如果您知道自己对部分子网不感兴趣,则无需扫描整个子网。 (避开计算机意味着您不需要丢弃其结果。)

nmap -oG - -sn 192.168.3.2-254 | awk '$NF=="Up" {print $2}'

或者如果您更喜欢使用 XML 输出而不是grep输出

nmap -oX - -sP 192.168.3.2-254 | xmlstarlet sel -t -m '//address[@addrtype="ipv4"]' -v '@addr' -n

如果您的版本需要,请使用-sP而不是较新的版本。-snnmap


顺便说一句,虽然您的系统管理员可能希望您的打印机使用 DHCP,但他们应该没有理由不安排它拥有一个已知的不变地址。 (我对网络上的打印机执行此操作,以便打印机软件无需担心 IP 地址意外更改。)有时,这称为“粘性”地址,以将其与静态(非 DHCP)地址或伪随机动态 (DHCP) 地址。

您确定 DHCP 服务器本身不在您的子网上吗?否则,您的打印机将如何获得其动态地址?

答案3

也许一个更有效的解决方案仅使用grep(需要 GNU grep 或支持 perl 正则表达式的 grep):

nmap -sP 192.168.3.0/24 \
  | grep -o -P '192.168.3.(?!1$)[0-9]+'

这是 grep -o (仅)与任何以192.168.3除了以下开头的 IP 相匹配的 IP 地址192.168.3.1

答案4

获得打印机的 IP 地址后,您可以使用 获取主机名nmblookup -A 'IP address'。如果将来 IP 发生变化,这应该会有所帮助,因为您将向网络请求具有此名称的计算机,而不是尝试通过 IP 地址查找计算机。

相关内容