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 Django做网页
Nov 04 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
Python实现大文件排序的方法
Jul 10 Python
Python写入数据到MP3文件中的方法
Jul 10 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
浅谈Django的缓存机制
Aug 23 Python
Python数据类型之String字符串实例详解
May 08 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 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生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
Python中无限元素列表的实现方法
2014/08/18 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
基于Python函数和变量名解析
2019/07/19 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
培训心得体会
2013/12/29 职场文书
运动会解说词100字
2014/01/31 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
会议通知范文
2015/04/15 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
MySQL学习之基础命令实操总结
2022/03/19 MySQL