私はネットワークに1台のコンピュータと1台のプリンタしかないプロジェクトを進めています。私が望むのは、プリンタがネットワークに接続されているときを検出することです。私もコンピュータが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 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}'
grep
または代わりにXML出力を使用したい場合
nmap -oX - -sP 192.168.3.2-254 | xmlstarlet sel -t -m '//address[@addrtype="ipv4"]' -v '@addr' -n
バージョンに必要な場合は、-sP
最新バージョンを代わりに使用してください。-sn
nmap
ところで、システム管理者はプリンタがDHCPを使用したいと思うかもしれませんが、既知の不変アドレスを持つように準備してはいけません。 (プリンタソフトウェアが予期せず変更されるIPアドレスを心配する必要がないように、ネットワーク上のプリンタに対してこれを行います。)これを静的(非DHCP)アドレスと区別するために「固定」アドレスとも呼ばれます。または擬似ランダム動的(DHCP)アドレス。
DHCPサーバー自体がサブネットにないことは確実ですか?それ以外の場合、プリンタは動的アドレスをどのように取得しますか?
答え3
おそらくより効率的な解決策は、次のものを使用することですgrep
(Perl正規表現のサポートでGNU grepまたはgrepが必要です)。
nmap -sP 192.168.3.0/24 \
| grep -o -P '192.168.3.(?!1$)[0-9]+'
これは192.168.3
、除外で始まるすべてのIPアドレスと一致するgrep -o(のみ)です。192.168.3.1
答え4
プリンタのIPアドレスがある場合は、Get Hostnameを使用できますnmblookup -A 'IP address'
。 IPアドレスでコンピュータを見つけるのではなく、この名前のコンピュータをネットワークに要求するので、後でIPが変更された場合に役立ちます。