web-dev-qa-db-ja.com

Nmap SNMP対応デバイスのスキャン

SNMP対応デバイスのNmapスキャンネットワーク:

Sudo nmap -sU -p 161 --script default,snmp-sysdescr 26.14.32.120/24

Nmapがsnmp-sysdescrオブジェクトに特定のエントリを持つデバイスのみを返すようにする方法を理解しようとしています:

snmp-sysdescr: "ターゲットデバイス名"

それは可能ですか?

6
triwo

Nmapには、出力フィルタリングオプションの方法が多く含まれていません。--openは、開いているポートを含むホストに出力を制限します(anyopen ports) 。 -v0は、画面への出力を防ぎます。

代わりに、これを実行する最良の方法は、スキャンの XML出力 を保存することです(-oXまたは-oA出力オプションを使用)。これには、解析しやすいXML形式のスキャン。次に、XML解析ツールでフィルタリングして、必要な情報を含めることができます。

1つのコマンドラインXMLパーサーは xmlstarlet です。このコマンドを使用して、「example」という文字列を含むsysdescrを持つターゲットのIPアドレスのみを除外できます。

xmlstarlet sel -t -m "//port/script[@id='snmpsysdescr' and contains(@output,'example')]/../../../address[@addrtype='ipv4']" -v @addr -n output.xml

これは、ツールである Ndiff とPython 2ライブラリがNmapとともに配布されることで行うこともできます。

#!/usr/bin/env python

import ndiff

def sysdescr_contains (value, Host):
  for port in Host.ports:
    for script in filter(lambda x: x.id == u"snmp-sysdescr", port.script_results):
      if value in script.output:
        return True
  return False

def usage ():
  print """Look for <substring> in snmp-sysdescr output and print matching hosts.
Usage: {} <filename.xml> <substring>"""

if __name__ == "__main__":
  import sys
  if len(sys.argv) < 3:
    usage()
    exit(1)

  scan = ndiff.Scan()
  scan.load_from_file(sys.argv[1])

  for Host in filter(lambda x: sysdescr_contains(sys.argv[2], x), scan.hosts):
    print Host.format_name()

他のNmap出力解析ライブラリは、最も一般的なプログラミング言語で使用できます。

3
bonsaiviking

次のコマンドでnmapを使用できますnmap -p 161 ip、nmap -p 162 ip

ホストまたはデバイスでポートが開いている場合、書き込み可能なSNMP情報につながるオープンマーケットで利用可能なエクスプロイトがあります。

ポートが閉じている場合、脆弱性の可能性はありません

この情報が機能することを願っています

0
tkakarla