您当前的位置:首页 > 计算机 > 编程开发 > Python

Python-nmap使用介绍

时间:03-30来源:作者:点击数:

介绍

Nmap大家都很熟悉,很强大的网络扫描工具,可以用来进行主机发现、端口扫描、服务及版本检测、操作系统检测等。而python-nmap是可以调用nmap的一个模块文件,安装命令如下:

pip install python-nmap

安装后即可使用import导入,如果没有安装则会提示没有找到该模块,如下图。

参数

Python-nmap模块中有一个portscanner类,它是nmap工具的封装,以下为常见函数说明:

scan:用来对目标进行扫描,其中需要传入三个参数,host(字符串表示要扫描的主机,可以是ip或域名),ports(字符串表示要扫描的端口,形式和nmap一样,可以用逗号和横线分隔),arguments(字符串即nmap扫描时所用的参数,例如sS对目标进行TCP半开放端口扫描,即SYN)。示例如下:

import nmap

nm = nmap.PortScanner()
nm.scan(‘192.168.1.111’,’1-500’,’-sS’)

all_hosts:返回一个被扫描的主机列表。

command_line:返回当前扫描所使用的命令行。

csv:返回一个csv格式的输出,可结合print使用,例如print(nm.csv())。

has_host:检查是否有host的扫描结果。

scaninfo:列出一个扫描信息的结构。

hostname:获取主机名。

state:获取状态(up,down,unknown,skipped)。

all_protocols:获取执行的协议。

keys:格式为nm[host][proto].keys,用来获取tcp所有端口号。或者直接使用all_tcp获取所有tcp端口号,all_udp可获取所有udp端口号。

tcp(port):获取port端口相关信息,或者[‘tcp’][port]形式,[‘tcp’][port][‘state’]可获取port端口的状态。

示例

例如扫描192.168.150.134的1-1000端口,相关代码如下:

import nmap
 
nm = nmap.PortScanner()
nm.scan('192.168.150.134', '1-1000')
 
for host in nm.all_hosts():
    print('--------------------------------------------------')
    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 = sorted(nm[host][proto].keys())
        for port in lport:
            print('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))

运行结果如下:

问题总结

上面简单的扫描器虽然短短几行代码,但会有一些问题出现。

  1. 错误提示:AttributeError: 'module' object has no attribute 'PortScanner',也就是在模块没有找到portscanner这个函数。这里网上搜索方法一个是修改文件名,避免文件名为nmap这种(即python的文件名不能和文件中import导入的模块名相同,否则会加载不到模块,从而提示一些方法函数找不到)。再一个是模块安装错误,执行的是pip install nmap,而不是pip install python-nmap,解决办法就是pip uninstall nmap命令卸载nmap。

我这里是都没有解决,可能是哪里加载错误,如果都不行可以试试这个办法,去官网http://xael.org/pages/python-nmap-en.html下载python-nmap的包,下载后里面有一个example的示例文件,这个文件你会发现可以运行,而它就用到了nmap模块,所以这里可以直接把下载的python-nmap包里的nmap文件夹放到python的安装目录,这时候再执行即可。

  1. 错误提示:环境变量中没有找到nmap,python-nmap执行本机必须要装有nmap程序,因为python-nmap是个模块,它运行调用的却是nmap程序。Nmap会默认配置环境变量,我这里情况是pycharm执行报此错误,查看环境变量,用户环境变量是配置的,系统环境变量没配,把系统环境变量配上即可。
  2. 错误提示:dict_items object has no attribute sort,即找不到sort函数,网上教程很多是python2环境,在获取端口号时都是这个写法:
lport = nm[host][proto].keys()
lport.sort()

Python3后,迭代对象不再支持sort函数了,这里可以把获取的端口列表给到sorded函数,也就是上面示例中的写法。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门