欢迎访问宙启技术站
智能推送

PythonnmapPortScanner()库的使用示例和方法解析

发布时间:2023-12-24 15:05:30

Python-nmap是一个用于执行Nmap扫描的Python库,它允许你以编程方式扫描主机,端口和服务。它提供了一种简单而强大的方法来使用Nmap扫描工具,并且可以很容易地在Python脚本中集成。

下面是Python-nmap库的使用示例和一些常用方法解析。

示例1:扫描单个主机的开放端口

import nmap

def scan_ports(host):
    nm = nmap.PortScanner()
    nm.scan(host, arguments='-p 1-1000')
    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('Protocol : %s' % proto)

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

scan_ports('127.0.0.1')

上面的代码创建了一个扫描器对象nm,并使用scan方法扫描了127.0.0.1主机的开放端口。然后,通过遍历nm对象的属性来获取扫描结果,并打印出端口和状态。

示例2:扫描多个主机的开放端口

import nmap

def scan_ports(hosts):
    nm = nmap.PortScanner()
    for host in hosts:
        nm.scan(host, arguments='-p 1-1000')
        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('Protocol : %s' % proto)

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

scan_ports(['127.0.0.1', '192.168.0.1'])

这个示例与示例1类似,不同的是它接受一个列表参数hosts,并循环遍历该列表扫描每个主机的开放端口。

示例3:获取服务信息

import nmap

def get_service_info(host):
    nm = nmap.PortScanner()
    nm.scan(host, arguments='-p 1-1000 -sV')
    for host in nm.all_hosts():
        for proto in nm[host].all_protocols():
            print('Protocol : %s' % proto)

            lport = nm[host][proto].keys()
            lport.sort()
            for port in lport:
                print('Port : %s\tState : %s\tService : %s' % (port, nm[host][proto][port]['state'], nm[host][proto][port]['name']))

get_service_info('127.0.0.1')

这个示例通过设置arguments参数为-sV来获取服务的详细信息。它扫描了127.0.0.1主机的开放端口,并输出端口、状态和服务名称。

方法解析:

1. scan(hosts=None, ports=None, arguments=None, sudo=False):执行扫描操作。hosts参数接受要扫描的主机或主机列表,ports参数接受要扫描的端口范围,arguments参数接受其他Nmap扫描参数,sudo参数指示是否使用sudo权限执行扫描。

2. all_hosts():获取所有扫描到的主机列表。

3. state():获取主机的状态(up或down)。

4. all_protocols():获取主机支持的协议列表。

5. keys():获取给定协议的端口列表。

6. ['proto'][port]['state']:通过索引访问特定主机、协议和端口的状态。

7. ['proto'][port]['name']:通过索引访问特定主机、协议和端口的服务名称。

总结:

Python-nmap库提供了一个方便的方法来执行Nmap扫描,并获取主机、端口和服务的详细信息。它具有简单易用的API,并且可以与其他Python代码集成,使扫描任务更加自动化和灵活。上述示例和方法解析可以帮助你快速上手并使用这个功能强大的库。