python3实现高效的端口扫描


Posted in Python onAugust 31, 2019

我们通过python-nmap实现一个高效的端口扫描工具,与定时作业crontab及邮件告警结合,可以很好的帮助我们及时发现异常开放的高危端口。当然,该工具也可以作为业务服务端口的可用性探测,例如扫描192.168.209.121-125网段Web服务端口80s是否处于open状态。我们这里所采用的scan方法arguments参数指定为-v -PE -p + 端口, -v表示启用细节模式,可以返回非up状态主机清单;-PE表示采用TCP同步扫描(TCP SYN)方式; -p指定扫描端口范围。程序输出部分采用三个for循环体,第一层遍历扫描主机,第二层为遍历协议,第三层为遍历端口,最后输出主机状态。

具体脚本port_scanner.py代码如下:

import sys
import nmap

scan_row = []
input_data = input('Please input hosts and port: ')
#scan_row以空格分隔
scan_row = input_data.split(' ')

if len(scan_row) != 2:
 print("Input errors, example \"192.168.209.0/24 80,443,22 \"")
 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])
 sys.exit(0)
except Exception as e:
 print("Unexpected error:", sys.exc_info()[0])
 print(str(e))
 sys.exit(0)

try:
 #调用扫描方法,参数指定扫描主机hosts,nmap扫描命令行参数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('Host : %s (%s)' % (host, nm[host].hostname()))
 #输出主机状态,如up、down
 print('State : %s' % nm[host].state())
 #遍历扫描协议,tcp、udp
 for proto in nm[host].all_protocols():
  print('--------------')
  #输出协议名
  print('Protocol : %s' % proto)

  #获取协议的所有扫描端口
  lport = list(nm[host][proto].keys())
  #端口列表排序
  lport.sort()
  #遍历端口输出端口与状态
  for port in lport:
   print('port %s\tstate : %s' % (port, nm[host][proto][port]['state']))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Mysql自动备份脚本
Jul 14 Python
python使用reportlab实现图片转换成pdf的方法
May 22 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
利用python将xml文件解析成html文件的实现方法
Dec 22 Python
Python实现的txt文件去重功能示例
Jul 07 Python
python重试装饰器的简单实现方法
Jan 31 Python
python如何制作缩略图
Apr 30 Python
numpy linalg模块的具体使用方法
May 26 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
wxPython实现带颜色的进度条
Nov 19 Python
python如何把字符串类型list转换成list
Feb 18 Python
python实现学生成绩测评系统
Jun 22 Python
python nmap实现端口扫描器教程
May 28 #Python
Python3多线程版TCP端口扫描器
Aug 31 #Python
简单了解python协程的相关知识
Aug 31 #Python
利用rest framework搭建Django API过程解析
Aug 31 #Python
Python进度条的制作代码实例
Aug 31 #Python
python类的实例化问题解决
Aug 31 #Python
python检测服务器端口代码实例
Aug 31 #Python
You might like
php中数字0和空值的区别分析
2014/06/05 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
详解Python中类的定义与使用
2017/04/11 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
Python求凸包及多边形面积教程
2020/04/12 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
python实现磁盘日志清理的示例
2020/11/05 Python
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
啤酒销售实习自我鉴定
2013/09/24 职场文书
采购文员岗位职责
2013/11/20 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
公司合作协议范文
2014/10/01 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏