web-dev-qa-db-ja.com

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

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

2
twigg

これによると 「Unix&Linux StackExchange」の質問と回答のスレッド インストールされているプリンタのリストは、 _lpstat -s_ またはSudoでのみ取得できます。 (_Sudo lpstat -s_)完全なデバイスパスを取得します。または多分 _nmap -A_ を使用していますか?

とはいえ、おそらく arpgrep および sed パイプ(_|_)でチェーンして使用すると次のように機能します。

_arp -a | grep Printer | awk '{ print $2 }' | sed 's/[()]//g'
_

そのコマンドは次のように機能します。

  • _arp -a_は、すべてのarpトラフィックを表示します。
  • _grep Printer_は、名前にPrinterが含まれる行の_arp -a_出力を解析します。
  • _awk '{ print $2 }'_はIPアドレスを取得しますが、括弧(_(_/_)_)で囲みます。
  • 次に、sed 's/[()]//g'はIPアドレスをクリーンアップして、括弧を削除します。

とはいえ、ネットワーク上にWi-Fiプリンターが1台もないため、ローカルセットアップでこの概念をテストする簡単な方法はありませんが、機能すると思います。 grep引数を「printers」または「print」に調整する必要があるかもしれません。よくわかりません。これらは主にブレインストーミングのアイデアであり、この問題に取り組むのに役立つか、少なくとも正しい方向に進むのに役立つことを願っています。

1
JakeGould

Lpinfoはどうですか(CUPSがインストールされている必要があります)
(ここでPerlを使用して他のものを除外します)
参照 ここ

$ Sudo lpinfo -l -v |  Perl -ne 'print if /^Device: uri = socket:/ .. /info/'

デバイス:uri = socket://192.168.0.3
クラス=ネットワーク
情報= OfficejetJ6400シリーズ
デバイス:uri = socket://192.168.0.5:9100
クラス=ネットワーク
情報= HP Officejet Pro 8610

2
AAAfarmclub