使用 Python 和 Nmap 对网络进行自定义扫描的指南

2023-04-21 00:00:00 扫描 自定义 指南

针对网络进行自定义扫描是网络安全中的一项重要任务。Python 和 Nmap 是两个常用的工具,其中 Python 是编程语言,而 Nmap 是一款网络扫描工具。下面是详细步骤和代码演示。

步骤一:安装 Nmap 和 Python-nmap

Nmap 是一个命令行工具,可以使用官网提供的安装程序或者在终端使用类 Unix 系统中的包管理器进行安装。Python-nmap 是一个 Python 库,封装了 Nmap 工具,可以通过 pip 进行安装。在终端中使用以下命令进行安装:

pip install python-nmap

步骤二:创建 Nmap 扫描对象

创建 Nmap 扫描对象的步骤如下:

  1. 导入 python-nmap 库
  2. 创建 NmapHostDiscovery 对象
  3. 设置扫描参数
  4. 调用 .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 地址或域名进行扫描。

相关文章