我有一个项目,我知道一台计算机和一台打印机将是网络上唯一的东西。我想要做的是检测打印机何时连接到网络。我也知道电脑是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 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
打印匹配行的最后一个字段
如果您知道自己对其中的一部分不感兴趣,则无需扫描整个子网。(避开计算机意味着你不需要丢弃它的结果。)
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
而不是较新的。-sn
nmap
顺便提一下,虽然您的系统管理员可能希望您的打印机使用 DHCP,但他们几乎没有理由不能安排它具有已知不变的地址。(我为网络上的打印机这样做,这样打印机软件就不需要担心 IP 地址意外更改。)有时这被称为“粘性”地址,以区别于静态(非 DHCP)地址或伪随机动态 (DHCP) 地址。
您确定 DHCP 服务器本身不在您的子网上吗?否则,您的打印机将如何获得其动态地址?