Python 中使用 Nmap 的示例代码

2023-04-21 00:00:00 python 代码 示例

首先,要使用 Nmap 库,需要安装 python-nmap 包:

pip install python-nmap

然后,可以使用如下代码扫描指定 IP 地址上开放的端口:

import nmap

nm = nmap.PortScanner()

# 扫描指定IP的端口
result = nm.scan(hosts='192.168.1.1', arguments='-p 80,443')
print(result)

执行该脚本后,会打印如下结果:

{'nmap': {'command_line': 'nmap -oX - -p 80,443 192.168.1.1', 'scanstats': {'timestr': 'Tue Nov  3 14:01:51 2020', 'elapsed': '2.06', 'uphosts': '1', 'downhosts': '0', 'totalhosts': '1'}}, 'scan': {'192.168.1.1': {'hostnames': [], 'addresses': {'ipv4': '192.168.1.1'}, 'tcp': {80: {'state': 'closed', 'reason': 'syn-ack', 'reason_ttl': '64'}, 443: {'state': 'closed', 'reason': 'syn-ack', 'reason_ttl': '64'}}, 'udp': {}}}}

其中,扫描结果中会包含开放端口的信息。如果结果为空,则表示指定的 IP 并没有开放该端口。此外,还可以控制扫描方式、扫描范围等参数。例如,下面的代码使用 SYN 扫描方式,扫描整个 192.168.1.0/24 子网,查找开放的 SSH 服务:

import nmap

nm = nmap.PortScanner()

# 使用SYN扫描方式,扫描子网
result = nm.scan(hosts='192.168.1.0/24', arguments='-sS -p 22')

# 遍历扫描结果,输出开放的SSH服务
for host in nm.all_hosts():
    if nm[host].has_tcp(22) and nm[host]['tcp'][22]['state'] == 'open':
        print(f"Host: {host}, Port: 22(open)")

执行该脚本后,会输出类似如下的结果:

Host: 192.168.1.1, Port: 22(open)
Host: 192.168.1.2, Port: 22(open)
Host: 192.168.1.100, Port: 22(open)

其中,使用 has_tcp 方法判断是否开放了 TCP 端口,使用 state 属性判断该端口是否处于“开放”状态。

相关文章