Python实现端口检测的方法


Posted in Python onJuly 24, 2018

一、背景:

在平时工作中有遇到端口检测,查看服务端特定端口是否对外开放,常用nmap,tcping,telnet等,同时也可以利用站长工具等web扫描端口等。

但是在使用站长工具发现:

  • 每次只能输入一个检测的地址;
  • 虽然可以输入多个端口,但是不能指定一个端口范围来进行批量检测;
  • 没有批量任务记录日志等;

Python实现端口检测的方法 

因避免由于局域网检测发起端网络限制而导致的端口检测异常,未使用python-nmap

想通过调用站长工具,实现

  • 单次可多个地址或域名检测
  • 单词可指定端口范围,批量检测
  • 记录日志

二、代码:

2.1 结构

Python实现端口检测的方法 

2.2 代码

github地址

部分代码

#配置文件
#端口检测配置
[port_check_info]
#检测ip地址或域名
#address = baidu.com
#address = 127.0.0.1
address = www.anchnet.com,www.51cto.com,www.baidu.com
#检查的端口,如多个端口使用,隔开,端口范围使用'-'
#ports = 80,8080....
ports = 20-25,80,443,1433,1521,3306,3389,6379,8080,27017
#日志配置
[loginfo]
#日志目录
logdir_name = logdir
#日志文件名称
logfile_name = check_port.log
  def _get_body(self):
    """
    获取address和port
    :return: list
    """
    address_list = self.address_list.split(',')
    port_list = self.port_list.split(',')
    # 处理端口范围,返回range
    range_flag = False
    port_range = None
    content_List_range = []
    for port in port_list:
      if '-' in port:
        range_flag = True
        port_range = range(int(port.split('-')[0]),int(port.split('-')[1])+1)
        port_list.remove(port)
    # 处理总体list
    for add in address_list:
      if range_flag:
        for port in port_range:
          content_List_range.append(add + ':' + str(port))
    # 合并range和普通list
    content_List = [ add+':'+port for add in address_list for port in port_list ]
    content_List_range.extend(content_List)
    return content_List_range
  def run(self):
    """
    进行端口检测
    :return:
    """
    for content in self._get_body():
      content_list = content.split(':')
      body = {
        'host': content_list[0],
        'port': content_list[1],
        'encode': 'tlCHS1u3IgF4sC57m6KOP3Oaj1Y1kfLq'
      }
      try:
        response = requests.post(url=self.url,data=body,headers=self.headers)
        port_status = re.findall("msg:'(.*?)'", response.text)
        if len(port_status) > 0:
          # print('%s,port status is:%s' % (content, port_status))
          self.logoper.info('%s,port status is:%s' % (content, port_status))
        else:
          self.logoper.info('%s,port status is:%s' % (content, port_status))
          # print('Occer error!请输入正确的地址和端口')
      except Exception as e:
        print(e)

三、测试:

3.1 查看检测结果

Python实现端口检测的方法

此处可以查看51cto的8080端口也是开放的。

3.2 查看日志

Python实现端口检测的方法 

四、改进:

  • 后期可以添加异步多进程等来提升效率
  • 可以对比多个站点检测结果,使结果更准确
  • 整合nmap内网也可检测

总结

以上所述是小编给大家介绍的Python实现端口检测的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python sys.path详细介绍
Oct 17 Python
python在命令行下使用google翻译(带语音)
Jan 16 Python
python绘图库Matplotlib的安装
Jul 03 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
使用Python实现简单的服务器功能
Aug 25 Python
python实现图片批量压缩程序
Jul 23 Python
python实现汽车管理系统
Nov 30 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
Django 实现图片上传和下载功能
Dec 31 Python
Python基础之进程详解
May 21 Python
Flask框架信号用法实例分析
Jul 24 #Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 #Python
Django中的Model操作表的实现
Jul 24 #Python
Python实现的tcp端口检测操作示例
Jul 24 #Python
python正则表达式之对号入座篇
Jul 24 #Python
Python 字符串与二进制串的相互转换示例
Jul 23 #Python
Python二进制串转换为通用字符串的方法
Jul 23 #Python
You might like
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
php上的memcache和memcached两个pecl库
2010/03/29 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
php常量详细解析
2015/10/27 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
window.open的功能全解析
2006/10/10 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
图解js图片轮播效果
2015/12/20 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
快速入门python学习笔记
2017/12/06 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Flask之请求钩子的实现
2018/12/23 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
python读取Excel表格文件的方法
2019/09/02 Python
详解Python的三种拷贝方式
2020/02/11 Python
python实现电子词典
2020/03/03 Python
浅析python函数式编程
2020/09/26 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
经典促销广告词大全
2014/03/19 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
超市创业计划书
2014/09/15 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
交通安全月活动总结
2015/05/08 职场文书
怒海潜将观后感
2015/06/11 职场文书