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显示天气预报
Mar 02 Python
跟老齐学Python之使用Python查询更新数据库
Nov 25 Python
python实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
python django 访问静态文件出现404或500错误
Jan 20 Python
python中利用Future对象回调别的函数示例代码
Sep 07 Python
python模块之time模块(实例讲解)
Sep 13 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
python tornado微信开发入门代码
Aug 24 Python
python enumerate内置函数用法总结
Jan 07 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
Python实现PS滤镜中的USM锐化效果
Dec 04 Python
教你使用pyinstaller打包Python教程
May 27 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
改进的IP计数器
2006/10/09 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
php链表用法实例分析
2015/07/09 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
使用PYTHON接收多播数据的代码
2012/03/01 Python
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
让 python 命令行也可以自动补全
2014/11/30 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
创业计划书六个要素
2013/12/26 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
幼儿园见习总结
2015/06/23 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang