Nmap 扫描网络以查找启用 SNMP 的设备:
sudo nmap -sU -p 161 --script default,snmp-sysdescr 26.14.32.120/24
我正在尝试弄清楚如何使 nmap 仅返回snmp-sysdescr
对象中具有特定条目的设备:
snmp-sysdescr:“目标设备名称”
那可能吗?
答案1
Nmap 不包含太多输出过滤选项:--open
将限制输出到包含开放端口的主机(任何开放端口)。-v0
将阻止任何输出到屏幕。
相反,实现这一目标的最佳方法是保存XML输出扫描的信息(使用-oX
或-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
你也可以这样做恩迪夫,这是与 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 输出解析库。
答案2
我们可以通过以下命令使用 nmap nmap -p 161 ip, nmap -p 162 ip
如果主机或设备上的端口是开放的,则开放市场中存在可导致可写 SNMP 信息的漏洞利用
如果端口关闭,则不会出现漏洞
我希望这个信息有效