nmap 到 awk 到 sed。有没有更好的办法?

Mik*_*gas 4 dhcp awk 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 //'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

脚本输出

 192.168.3.100
Run Code Online (Sandbox Code Playgroud)

工作只需要几秒钟,但有更好/更清洁/更快的方法吗?

jes*_*e_b 11

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

nmap -sP 192.168.3.0/24 \
  | awk '/192.168.3/ && !/192.168.3.1$/{print $NF}'
Run Code Online (Sandbox Code Playgroud)

这告诉awk打印匹配行的最后一个字段


roa*_*ima 8

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

nmap -oG - -sn 192.168.3.2-254 | awk '$NF=="Up" {print $2}'
Run Code Online (Sandbox Code Playgroud)

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

nmap -oX - -sP 192.168.3.2-254 | xmlstarlet sel -t -m '//address[@addrtype="ipv4"]' -v '@addr' -n
Run Code Online (Sandbox Code Playgroud)

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


顺便提一下,虽然您的系统管理员可能希望您的打印机使用 DHCP,但他们几乎没有理由不能安排它具有已知不变的地址。(我为网络上的打印机这样做,这样打印机软件就不需要担心 IP 地址意外更改。)有时这被称为“粘性”地址,以区别于静态(非 DHCP)地址或伪随机动态 (DHCP) 地址。

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