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

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

Nmap はネットワークから SNMP 対応デバイスを検索します。

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

snmp-sysdescrnmapがオブジェクトに特定の項目を持つデバイスのみを返すようにする方法を理解しようとしています。

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

それは可能ですか?

ベストアンサー1

Nmapには多くの出力フィルタリングオプションは含まれていません。--openオープンポートを含むホストに出力を制限します(どのオープンポート)。-v0画面に出力されません。

代わりに、これを達成するための最良の方法はXML出力解析が簡単なXML形式でスキャンを介して収集されたすべての情報を含むスキャン情報(使用-oXまたは出力オプション)。-oAその後、XML解析ツールを使用して、必要な情報を含めるようにフィルタリングできます。

コマンドラインXMLパーサーは次のとおりです。xmlstarlet。このコマンドを使用すると、sysdescr「example」文字列を含む宛先のIPアドレスのみをフィルタリングできます。

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

また、これを行うことができますエンディフ、これはNmapと共に配布されるツールであり、Python 2ライブラリです。

#!/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出力解析ライブラリが用意されています。

おすすめ記事