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学习笔记_数据排序方法
May 22 Python
python对指定目录下文件进行批量重命名的方法
Apr 18 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
Python文件操作函数用法实例详解
Dec 24 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
详解python with 上下文管理器
Sep 02 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
Python 把两层列表展开平铺成一层(5种实现方式)
Apr 07 Python
pytorch损失反向传播后梯度为none的问题
May 12 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和XSL stylesheets转换XML文档
2006/10/09 PHP
php 团购折扣计算公式
2011/11/24 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
django ajax json的实例代码
2018/05/29 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
python获取引用对象的个数方式
2019/12/20 Python
Python表达式的优先级详解
2020/02/18 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
满月酒答谢词
2014/01/14 职场文书
后备干部考察材料
2014/02/12 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
2015年小学开学寄语
2015/02/27 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers