利用 Python 和 Nmap 构建一个强大的网络扫描器

2023-04-21 00:00:00 扫描器 强大 构建一个

我们可以使用 Python 的第三方库 python-nmap 来和 Nmap 进行交互,从而构建一个网络扫描器。以下是具体步骤和示例代码:

  1. 安装 python-nmap

可以通过在命令行中运行以下命令来安装:

pip install python-nmap
  1. 导入必要模块和定义 IP 地址

首先,我们需要导入 nmapsocket 模块,并定义需要扫描的 IP 地址:

import nmap
import socket

# Defining the target IP address or hostname
target_host = "pidancode.com"
  1. 定义一个函数来扫描 IP 地址

我们可以定义一个函数来扫描 IP 地址,并使用 nmap.PortScanner() 对象来配置扫描选项:

def scan(target_host):
    nm = nmap.PortScanner()
    nm.scan(hosts=target_host, arguments='-sS -O -F -T4')

    for host in nm.all_hosts():
        print('Host : %s (%s)' % (host, nm[host].hostname()))
        print('State : %s' % nm[host].state())

        for proto in nm[host].all_protocols():
            print('----------')
            print('Protocol : %s' % proto)

            lport = nm[host][proto].keys()
            for port in sorted(lport):
                print('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))

在上面的代码中,我们使用了以下扫描选项:

  • -sS:使用 SYN 扫描,这是一种最常用的扫描技术之一。
  • -O:进行操作系统探测,这将帮助我们识别目标系统正在运行的操作系统。
  • -F:进行快速扫描,这将扫描常用端口而不是所有端口。
  • -T4:设置扫描速度,这将使扫描速度更快而不影响扫描结果。
  1. 运行扫描函数并输出结果

最后,我们可以运行 scan() 函数,并输出扫描结果:

# Running the scan function
if __name__ == '__main__':
    print('Starting scan on host:', target_host)
    scan(target_host)

下面是完整的示例代码,你可以将其复制到你的 Python 环境中并运行:

import nmap
import socket

# Defining the target IP address or hostname
target_host = "pidancode.com"

def scan(target_host):
    nm = nmap.PortScanner()
    nm.scan(hosts=target_host, arguments='-sS -O -F -T4')

    for host in nm.all_hosts():
        print('Host : %s (%s)' % (host, nm[host].hostname()))
        print('State : %s' % nm[host].state())

        for proto in nm[host].all_protocols():
            print('----------')
            print('Protocol : %s' % proto)

            lport = nm[host][proto].keys()
            for port in sorted(lport):
                print('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))

# Running the scan function
if __name__ == '__main__':
    print('Starting scan on host:', target_host)
    scan(target_host)

运行结果将如下所示:

Starting scan on host: pidancode.com
Host : 47.52.47.125 ()
State : up
----------
Protocol : tcp
port : 22   state : open
port : 80   state : open
port : 443  state : open

相关文章