1.环境:Centos7+python3.6
2.nmap介绍:python nmap是一个python库,它有助于使用nmap端口扫描器。它可以方便地操作nmap扫描结果,将是一个完美的用于希望自动扫描任务的系统管理员的工具和报告。
3.安装

#安装nmap工具
yum -y install nmap
#pip安装nmap模块
pip3 install python-nmap

4.假如pip安装不可用,编译安装python-nmap模块

#到官网下载对应版本安装包
wget http://xael.org/norman/python/python-nmap/python-nmap-0.4.1.tar.gz
#解压缩
tar -zxvf python-nmap-0.4.1.tar.gz
#安装
cd python-nmap-0.4.1
python setup.py install

5.端口扫描代码示例

#!/usr/bin/python3
#-*-coding:UTF-8-*-
import nmap
import sys
#hosts = input('请输入IP或者域名地址:')
#port = input('请输入端口号或端口范围:')
scan_row=[]
input_data=input('请输入主机地址和端口:')
scan_row=input_data.split(' ')
if len(scan_row)!=2:
        print('输入格式错误!主机地址与端口之间以空格为间隔,端口与端口以逗号间隔')
        sys.exit(0)
hosts=scan_row[0]       #接收的主机
port=scan_row[1]        #输入的端口号
try:
        nm = nmap.PortScanner() #创建端口扫描对象
except nmap.PortScannerError:
        print('Nmap not found',sys.exc_info()[0])
except:
        print('Unexpected error:',sys.exc_info()[0])
        sys.exit(0)
try:
        #调用扫描方法,参数指定扫描主机hosts和port,扫描命令行参数arguments
        nm.scan(hosts=hosts,arguments=' -v -sS -p'+port)
except Exception as e:
        print('Scan error:'+str(e))
for host in nm.all_hosts():     #遍历扫描主机
        print('--------------------------------')
        print('主机:%s (%s)'%(host, nm[host].hostname()))      #输出主机及主机名
        print('状态:%s'%(nm[host].state()))    #输出主机状态
for proto in nm[host].all_protocols():  #遍历扫描协议,如tcp,udp
        print('--------------------------------')
        print('协议:%s'%(proto))
        lport = nm[host][proto].keys()  #获取协议的所有扫描端口
        #lport.sort()   #端口列表排序
        for port in lport:      #遍历端口及输出端口与状态
                print('端口:%s 状态:%s:'%(port,nm[host][proto][port]['state']))
                print(nm[host].tcp(port))