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实现类的静态变量用法实例
May 08 Python
python从入门到精通(DAY 2)
Dec 20 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python正则表达式和re库知识点总结
Feb 11 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
Python无头爬虫下载文件的实现
Apr 02 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
Python使用永中文档转换服务
May 06 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 XML备份Mysql数据库
2009/05/27 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python迭代器实例简析
2014/09/25 Python
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
python集合能干吗
2020/07/19 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
css 元素选择器的简单实例
2016/05/23 HTML / CSS
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
.NET程序员的数据库面试题
2012/10/10 面试题
大学生护理专业自荐信
2013/10/03 职场文书
主治医师岗位职责
2013/12/10 职场文书
酒店办公室文员岗位职责
2013/12/18 职场文书
毕业自我鉴定书
2014/03/24 职场文书
2014年销售部工作总结
2014/12/01 职场文书
会议欢迎词
2015/01/23 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
年终工作总结范文
2019/06/20 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
Python Django获取URL中的数据详解
2021/11/01 Python
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL