python实现高效的端口扫描器基础

一 点睛

如今互联网安全形势日趋严峻,给系统管理员带来很大的挑战,网络的开放性以及黑客的攻击是造成网络不安全的主因。稍有疏忽将给黑客带来可乘之机,给企业带来无法弥补的损失。比如由于系统管理员误操作,导致核心业务服务器的22、21、3389、3306等高危端口暴露在互联网上,大大提高了被入侵的风险。因此,定制一种规避此安全事故的机制已经迫在眉睫。

Python的第三方模块pythonnmap来实现高效的端口扫描,达到发现异常时可以在第一时间发现并处理,将安全风险降到最低的目的。python-nmap模块作为nmap命令的Python封装,可以让Python很方便地操作nmap扫描器,它可以帮助管理员完成自动扫描任务和生成报告。

二 安装

1 安装nmap工具

[root@localhost data]# yum -y install nmap

2 安装python-nmap

[root@localhost data]# pip install python-nmap

三 模块常用方法说明

本篇介绍python-nmap模块的两个常用类,一个为PortScanner() 类,实现一个nmap工具的端口扫描功能封装;另一个为 PortScannerHostDict()类,实现存储与访问主机的扫描结果,下面介绍

PortScanner()类的一些常用方法。 

1 scan(self,hosts='127.0.0.1',ports=None,arguments='-sV')

实现指定主机、端口、nmap命令行参数的扫描。

  • hosts:字符串类型,表示扫描的主机地址,格式可以用“scanme.nmap.org”、“198.116.0-255.1-127”、“216.163.128.20/20”表示; 
  • ports:字符串类型,表示扫描的端口,可以用“22,53,110,143-4564”来表示;
  • arguments为字符串类型,表示nmap命令行参数,格 式为“-sU-sX-sC”。

示例:

>>> import nmap
>>> nm = nmap.PortScanner()
>>> nm.scan('192.168.0.21-120','3310')
{'nmap': {'scanstats': {'uphosts': '2', 'timestr': 'Sun Feb 24 10:32:00 2019', 'downhosts': '98', 'totalhosts': '100', 'elapsed': '9.31'}, 'scaninfo': {'tcp': {'services': '3310', 'method': 'syn'}}, 'command_line': 'nmap -oX - -p 3310 -sV 192.168.0.21-120'}, 'scan': {'192.168.0.120': {'status': {'state': 'up', 'reason': 'localhost-response'}, 'hostnames': [{'type': '', 'name': ''}], 'vendor': {}, 'addresses': {'ipv4': '192.168.0.120'}, 'tcp': {3310: {'product': 'Clam AV', 'state': 'open', 'version': '', 'name': 'clam', 'conf': '10', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': ''}}}, '192.168.0.106': {'status': {'state': 'up', 'reason': 'arp-response'}, 'hostnames': [{'type': '', 'name': ''}], 'vendor': {}, 'addresses': {'mac': '64:6E:69:F2:CF:0D', 'ipv4': '192.168.0.106'}, 'tcp': {3310: {'product': '', 'state': 'filtered', 'version': '', 'name': 'dyna-access', 'conf': '3', 'extrainfo': '', 'reason': 'no-response', 'cpe': ''}}}}}

2 command_line(self)

返回的扫描方法映射到具体nmap命令行。

示例:

>>> nm.command_line()
'nmap -oX - -p 3310 -sV 192.168.0.21-120'

3 scaninfo(self)方法,返回nmap扫描信息,格式为字典类型。

>>> nm.scaninfo()
{'tcp': {'services': '3310', 'method': 'syn'}}

4 all_hosts(self)方法,返回nmap扫描的主机清单,格式为列表类型。

>>> nm.all_hosts()
['192.168.0.106', '192.168.0.120']

5 PortScannerHostDict()类的一些常用方法

>>> nm['192.168.0.120'].hostname()             # 返回扫描对象的主机名
''
>>> nm['192.168.0.120'].state()                # 返回扫描对象的状态,包括4种状态(up、 down、unknown、skipped)
'up'
>>> nm['192.168.0.120'].all_protocols()        # 返回扫描的协议
['tcp']
>>>
>>> nm['192.168.0.120'].all_tcp()              # 返回TCP协议扫描的端口
[3310]
>>> nm['192.168.0.120'].tcp(3310)              # 返回扫描TCP协议port(端口)的信息
{'product': 'Clam AV', 'state': 'open', 'version': '', 'name': 'clam', 'conf': '10', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': ''}

 

你可能感兴趣的:(python,python)