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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Python编程中使用Pillow来处理图像的基础教程
Nov 20 Python
解决python大批量读写.doc文件的问题
May 08 Python
Django forms组件的使用教程
Oct 08 Python
Python使用gRPC传输协议教程
Oct 16 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
如何用python写一个简单的词法分析器
Dec 18 Python
Python 如何实现访问者模式
Jul 28 Python
Python3如何在服务器打印资产信息
Aug 27 Python
Pycharm自带Git实现版本管理的方法步骤
Sep 18 Python
Django 用户认证Auth组件的使用
Nov 30 Python
PyQt5爬取12306车票信息程序的实现
May 14 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 动态添加记录
2009/03/10 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
[02:19]2018年度DOTA2最佳核心位选手-完美盛典
2018/12/17 DOTA
Python实现方便使用的级联进度信息实例
2015/05/05 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
计生工作先进事迹
2014/08/15 职场文书
工作失职检讨书
2015/01/26 职场文书
秦兵马俑导游词
2015/02/02 职场文书
2015感人爱情寄语
2015/02/26 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server