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  __getattr__与__setattr__使用方法
Sep 06 Python
Python高效编程技巧
Jan 07 Python
python实现巡检系统(solaris)示例
Apr 02 Python
详解Python多线程
Nov 14 Python
python中子类继承父类的__init__方法实例
Dec 15 Python
使用python客户端访问impala的操作方式
Mar 28 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
Python 操作SQLite数据库的示例
Oct 16 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 Python
解决pytorch-gpu 安装失败的记录
May 24 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
PHP爆绝对路径方法收集整理
2012/09/17 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
Angular4表单验证代码详解
2017/09/03 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
Koa日志中间件封装开发详解
2019/03/09 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
Python将多个excel文件合并为一个文件
2018/01/03 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
python实现批量修改文件名
2020/03/23 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
通信生自我鉴定
2014/01/18 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
青年教师个人总结
2015/02/11 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
党员身份证明材料
2015/06/19 职场文书
预备党员表决心的话
2015/09/22 职场文书
2016继续教育研修日志
2015/11/13 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书