Linux
Nmap 掃描啟用 SNMP 的設備
支持 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 輸出(使用
-oX
or-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 輸出解析庫以最常見的程式語言提供。