Linux のコマンド ラインからプリンターの IP アドレスを取得するにはどうすればよいでしょうか?

Linux のコマンド ラインからプリンターの IP アドレスを取得するにはどうすればよいでしょうか?

ネットワーク上のワイヤレス プリンターの IP アドレスをすべて取得するスクリプトを作成しようとしています。問題は、どこから始めればよいかわからないことです。CUPS について調べてみましたが、どのドキュメントやチュートリアルも、Web インターフェイスの使用に移る前にコマンド ラインについてしか説明しておらず、CLI のみを使用して IP を見つける方法についてはまったく触れられていません。何かアイデアはありますか?

答え1

これによれば「Unix & Linux Stack Exchange」の質問と回答スレッドインストールされているプリンタのリストは、lpstat -ssudoまたは( )を使ってsudo lpstat -s完全なデバイスパスを取得します。または、nmap -A?

とはいえ、おそらくarpgrepそして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

関連情報