Linux

Nmap 掃描啟用 SNMP 的設備

  • May 1, 2018

支持 SNMP 的設備的 Nmap 掃描網路:

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

我正在嘗試弄清楚如何使該 nmap 僅返回對像中具有特定條目的設備snmp-sysdescr

snmp-sysdescr: “目標設備名稱”

那可能嗎?

Nmap 不包含太多的輸出過濾選項:--open將輸出限製到包含開放埠(任何開放埠)的主機。-v0將阻止任何輸出到螢幕。

相反,完成此操作的最佳方法是保存掃描的XML 輸出(使用-oXor-oA輸出選項),它將以易於解析的 XML 格式包含掃描收集的所有資訊。然後,您可以使用 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

您也可以使用Ndiff來執行此操作,這是一個與 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 輸出解析庫以最常見的程式語言提供。

引用自:https://unix.stackexchange.com/questions/340354