Nmapでプリンターを見つける


回答:


37

何らかの理由でOSフィンガープリントを実行したくない場合は、よりターゲットを絞ったポートスキャンを実行できます。

nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml

プリンターと印刷システムに共通のポートをスキャンします。

  • 9100 =ほとんどのプリンターのRAWポート(直接IPポートとも呼ばれる)
  • 515 = LPR / LPDポート、ほとんどのプリンター、および古いプリントサーバー
  • 631 = IPPポート、ほとんどの最新プリンター、およびCUPSベースのプリントサーバー用

出力はXMLです。


あなたの答えはとても役に立ちました!
ライアンテニー

これはうまくいきませんでした。
マーティントーマ14

9

この返信は、最初の質問に直接回答します。2番目の質問では、コマンドを理解すると、プリンターのIPアドレスもファイルに入れることができます。だからここに行きます:

nmap -p 515,631,9100 -oG - 10.81.129.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs --replace=$ipaddress snmpget -v 1 -O v -c public $ipaddress system.sysDescr.0 | sed 's/STRING:\s//'

過程説明

  1. ネットワークをスキャンして、デフォルトのプリンタポ​​ートでリッスンしているネットワークエンティティを検索します。
  2. 前の手順の結果を使用して、これらのデバイスのSNMPサポートを確認します。
  3. SNMPがサポートされている各デバイスについて、ネットワークエンティティにデバイスの説明を照会します。

コマンドの内訳

nmapの - ネットワークスキャン。Nmap.org

  • -p 515,631,9100 TCPポート515、631、および9100をスキャンします。
  • -oG - grep対応の出力形式を使用します。
  • -sU -p 161 UDPポート161をスキャンします。

gawkのAWK - プロセス、列指向のテキストデータ。デフォルトでは、空白は行を列に分割します。ウィキペディア

  • gawk '/regexp/' この正規表現に一致する行を除外するには、gawkで正規表現を使用します。
  • gawk '{<code>}' awk Cのような入力言語を使用して、出力を操作します。
  • gawk '{/open/print $2}' 「open」に一致する行を検索し、2番目の列を印刷します。

xarg - ビルドして与えられた入力からコマンドを実行します。デフォルトでは、空白は行を引数に分割します。ウィキペディア

  • --delimiter='\n' 空白ではなく、改行(\ n)ごとに引数を区切ります。
  • --replace=$ipaddress各行について、引数を$ ipaddressに保存します。

snmpgetまたはsnmpwalk - SNMP GET要求を使用して、ネットワークエンティティに関する情報を照会します。net-snmp.orgWikipediaの SNMPに関する詳細)

  • -c public コミュニティストリングをパブリックに設定します。
  • -v 1 SNMPバージョンを1に設定します。
  • -O v OIDを出力しません。
  • system.sysDescr.0照会する変数。この特定の変数の説明:「エンティティのテキストによる説明。この値には、システムのハードウェアタイプ、ソフトウェアオペレーティングシステム、およびネットワークソフトウェアの完全な名前とバージョンIDを含める必要があります。 」

sedの - パースした変換テキスト。ウィキペディア

  • 's/day/night/' 文字列dayが最初に出現する行を見つけて、それをnightに置き換えます。
  • 's/STRING:\s//'STRING:\ sを見つけて、何も置き換えないでください。これにより、STRING:\ sが入力から削除されます。\ sは空白を表します。

UNIXでサポートされているコマンドがいくつかあります。個人的には、Cygwinを使用してこれらのコマンドを取得するWindowsマシンでこのチェーンを動作させました。


2
Linuxでは、次のバリエーションを使用してIPとSNMPシステム文字列を表示しました。「--replace = $ ipaddressに」私の環境では動作しませんでした:nmap -p 515,631,9100 -oG - 192.168.100.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs -I{} sh -c 'echo {} ; snmpget -v 1 -O v -c public {} system.sysDescr.0' | sed 's/STRING:\s//'
NoelProf

@NoelProfのバージョンはCentOS 6でうまく機能します。改善される可能性があるものの1つはUDPスキャン部分です。チェーン全体を試しましたが、一部のプリンターは発見されませんでした。特に、VPNの背後にいる場合。UDPポート161で応答した場合に1回だけテストするためだと考えました。しかし、途中でUDPが失われる可能性があります。複数回確認することをお勧めします。
masgo

5

最も簡単な方法は、スキャンするnmap -Oことです。通常、nmapはマシンがプリンターであるかOSに基づいていないかを正しく判断します。

nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile

1行に1つのエントリを作成し、「outfile」というファイルにダンプする必要があります。明らかに、IP範囲をスキャンしている範囲に変更します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.