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求crc32值的方法
Oct 05 Python
Python Sleep休眠函数使用简单实例
Feb 02 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
python字符串查找函数的用法详解
Jul 08 Python
使用Python制作一个打字训练小工具
Oct 01 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
Django重设Admin密码过程解析
Feb 10 Python
Python for循环搭配else常见问题解决
Feb 11 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
Python中Selenium模块的使用详解
Oct 09 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 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下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
教你安装python Django(图文)
2013/11/04 Python
python生成日历实例解析
2014/08/21 Python
python excel转换csv代码实例
2019/08/26 Python
python装饰器代替set get方法实例
2019/12/19 Python
python实现PCA降维的示例详解
2020/02/24 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
蔻驰美国官网:COACH美国
2016/08/18 全球购物
教师旷工检讨书
2014/01/18 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL