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获取GY-85九轴模块信息示例
Dec 05 Python
使用Python实现下载网易云音乐的高清MV
Mar 16 Python
利用 Monkey 命令操作屏幕快速滑动
Dec 07 Python
Python基于SMTP协议实现发送邮件功能详解
Aug 14 Python
windows下python 3.6.4安装配置图文教程
Aug 21 Python
使用django的ORM框架按月统计近一年内的数据方法
Jul 18 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
Python上下文管理器全实例详解
Nov 12 Python
Python autoescape标签用法解析
Jan 17 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
Python通过Pillow实现图片对比
Apr 29 Python
Python中如何处理常见报错
Jan 18 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
PHP中的日期处理方法集锦
2007/01/02 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
PHP crc32()函数讲解
2019/02/14 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
浅谈Python 函数式编程
2020/06/20 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
String和StringBuffer的区别
2015/08/13 面试题
销售人员个人求职信
2013/09/26 职场文书
士力架广告词
2014/03/20 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
dubbo服务整合zipkin详解
2021/07/26 Java/Android
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers