
ネットワーク上のワイヤレス プリンターの IP アドレスをすべて取得するスクリプトを作成しようとしています。問題は、どこから始めればよいかわからないことです。CUPS について調べてみましたが、どのドキュメントやチュートリアルも、Web インターフェイスの使用に移る前にコマンド ラインについてしか説明しておらず、CLI のみを使用して IP を見つける方法についてはまったく触れられていません。何かアイデアはありますか?
答え1
これによれば「Unix & Linux Stack Exchange」の質問と回答スレッドインストールされているプリンタのリストは、lpstat -s
sudo
または( )を使ってsudo lpstat -s
完全なデバイスパスを取得します。または、nmap -A
?
とはいえ、おそらくarp
とgrep
そしてsed
パイプ ( ) で連結すると、|
次のように動作します。
arp -a | grep Printer | awk '{ print $2 }' | sed 's/[()]//g'
そのコマンドは次のように分解されます。
arp -a
すべての ARP トラフィックが表示されます。grep Printer
名前に が含まarp -a
れる行の出力を解析します。Printer
awk '{ print $2 }'
IP アドレスを取得しますが、その前後に括弧 ((
/)
) が付きます。sed 's/[()]//g'
次に、IP アドレスをクリーンアップして括弧を削除します。
とはいえ、私のローカル セットアップでこの概念をテストする簡単な方法はありません (ネットワーク上に Wi-Fi プリンターが 1 台もない) が、機能すると思います。おそらく、このgrep
議論は「プリンター」または「印刷」に調整する必要がありますが、確かなことはわかりません。これらは主にブレインストーミングのアイデアであり、この問題に取り組むのに役立つか、少なくとも正しい方向に導くのに役立つことを願っています。
答え2
lpinfoはどうでしょうか(CUPSがインストールされている必要があります)
(ここではPerlを使用して他のものをフィルタリングします)
ここ
$ sudo lpinfo -l -v | perl -ne 'print if /^Device: uri = socket:/ .. /info/'
デバイス: uri = socket://192.168.0.3
クラス = ネットワーク
情報 = Officejet J6400 シリーズ
デバイス: uri = socket://192.168.0.5:9100
クラス = ネットワーク
情報 = HP Officejet Pro 8610