使用 Python 和 Nmap 对网络进行自定义扫描的指南
针对网络进行自定义扫描是网络安全中的一项重要任务。Python 和 Nmap 是两个常用的工具,其中 Python 是编程语言,而 Nmap 是一款网络扫描工具。下面是详细步骤和代码演示。
步骤一:安装 Nmap 和 Python-nmap
Nmap 是一个命令行工具,可以使用官网提供的安装程序或者在终端使用类 Unix 系统中的包管理器进行安装。Python-nmap 是一个 Python 库,封装了 Nmap 工具,可以通过 pip 进行安装。在终端中使用以下命令进行安装:
pip install python-nmap
步骤二:创建 Nmap 扫描对象
创建 Nmap 扫描对象的步骤如下:
- 导入 python-nmap 库
- 创建 NmapHostDiscovery 对象
- 设置扫描参数
- 调用 .scan() 方法进行扫描
以下是终端中的代码,用于扫描本地主机的端口情况:
import nmap nm = nmap.PortScanner() nm.scan(hosts='127.0.0.1', arguments='-sS')
上述代码中,-sS 参数表示使用 SYN 扫描方式。nm 对象的 hosts 参数指定了要扫描的 IP 地址。
步骤三:解析扫描结果
使用 Nmap 进行扫描后,需要对扫描结果进行解析。python-nmap 库封装了 Nmap 扫描结果并提供方便的接口。以下是一个示例代码,用于获取本地主机的已开放端口列表:
open_ports = [] for host in nm.all_hosts(): for proto in nm[host].all_protocols(): lport = nm[host][proto].keys() for port in lport: if nm[host][proto][port]['state'] == 'open': open_ports.append(port) print('Open ports: {}'.format(open_ports))
上面的代码中,首先使用 .all_hosts() 方法获取所有主机的 IP 地址,然后使用双重循环遍历每个主机的每个协议和端口。如果某个端口的状态为“open”,则将端口号添加到 open_ports 列表中。
演示代码:以下代码使用 Python-nmap 扫描 pidancode.com,打印其中开放的端口列表。
import nmap target = 'pidancode.com' nm = nmap.PortScanner() nm.scan(hosts=target, arguments='-sS') open_ports = [] for host in nm.all_hosts(): for proto in nm[host].all_protocols(): lport = nm[host][proto].keys() for port in lport: if nm[host][proto][port]['state'] == 'open': open_ports.append(port) print('Open ports on {}: {}'.format(target, open_ports))
输出结果:
Open ports on pidancode.com: [80, 443]
接下来,以下代码使用 Python-nmap 扫描 皮蛋编程 网址,打印其中开放的端口列表。
import nmap target = '皮蛋编程' nm = nmap.PortScanner() nm.scan(hosts=target, arguments='-sS') open_ports = [] for host in nm.all_hosts(): for proto in nm[host].all_protocols(): lport = nm[host][proto].keys() for port in lport: if nm[host][proto][port]['state'] == 'open': open_ports.append(port) print('Open ports on {}: {}'.format(target, open_ports))
输出结果:
Open ports on 皮蛋编程: []
由于“皮蛋编程”不是一个有效的 IP 地址或域名,所以上述代码无法正常工作。在实际使用中,需要使用有效的 IP 地址或域名进行扫描。
相关文章