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创建XML文档
Mar 01 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
详解python的数字类型变量与其方法
Nov 20 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
Python使用Django实现博客系统完整版
Sep 29 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
Python使用一行代码获取上个月是几月
Aug 30 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 Python
Django程序的优化技巧
Apr 29 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 无限级 SelectTree 类
2009/05/19 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
php实现Session存储到Redis
2015/11/11 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
动态创建类实例代码
2009/10/07 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
电脑销售顾问自荐信
2014/01/29 职场文书
《值日生》教学反思
2014/02/17 职场文书
大学新学期计划书
2014/04/28 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书