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脚本
Sep 01 Python
Python递归遍历列表及输出的实现方法
May 19 Python
Python base64编码解码实例
Jun 21 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Jul 04 Python
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
Python SqlAlchemy动态添加数据表字段实例解析
Feb 07 Python
Python PIL图片添加字体的例子
Aug 22 Python
Python list与NumPy array 区分详解
Nov 06 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
使用Django清空数据库并重新生成
Apr 03 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
python利用文件时间批量重命名照片和视频
Feb 09 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
PHP出错界面
2006/10/09 PHP
PHP调用三种数据库的方法(3)
2006/10/09 PHP
PHP动态变静态原理
2006/11/25 PHP
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
破解安装Pycharm的方法
2018/10/19 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
QML使用Python的函数过程解析
2019/09/26 Python
分享一个python的aes加密代码
2020/12/22 Python
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
利用python做数据拟合详情
2021/11/17 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js