百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

用python检测网站是否支持IPv6访问

itomcoil 2024-12-19 13:43 35 浏览

网站支持IPv6访问的条件

下面一些在线的工具可以检测网站是否支持IPv6访问

  • IP查询(ipw.cn)
  • 国家IPv6发展监测平台 (china-ipv6.cn)
  • www.chinatelecom.com.cnIPv6支持度检测网站情况检测IPv6拨测西部数码 (west.cn)

如果想要自己代码实现检测网站是否支持IPv6访问前提当然是要知道网站支持IPv6访问的条件是什么,网站支持IPv6访问需要满足下面两个条件:

1.首先网站域名必须支持解析出AAAA记录,也就是IPv6地址(A记录对应DNS解析的IPv4地址);

2.拥有AAAA记录仅表示域名支持IPv6地址解析,但是并不代表网站就能通过IPv6访问,还要检查给定的URL链接请求能否正常响应,正常响应了才表示网站支持IPv6访问。

检测机器的要求

在开始编写python代码实现检测之前,需要特别交代的是进行检测的机器必须支持IPv6,否则是没有办法检测的,但是不要求只能开启IPv6,IPv4和IPv6是可以共存的。不过这个条件当前已经很容易满足了,绝大部分的家庭宽带都是支持IPv6协议的,只要手动开启一下就可以了,网上有很多开启的教程,这里就不介绍了。

python检测代码

现在开始编写python代码,这里使用内置socket模块的getaddrinfo方法获取AAAA记录,使用requests库发起http请求检测响应是否正常(requests库为第三方库,需要使用pip install requests进行安装),具体实现代码示例如下:

from urllib.parse import urlparse
import urllib3
import socket
import argparse

import requests
# 禁止https请求不验证证书时产生警告信息
requests.packages.urllib3.disable_warnings()

def allowed_gai_family():
    # AF_INET表示IPv4地址族,AF_INET6表示IPv6地址族
    return socket.AF_INET6

# 重写allowed_gai_family方法,设置ip地址族为ipv6
urllib3.util.connection.allowed_gai_family = allowed_gai_family

def ipv6_access_check(url):
    # 首先获取域名AAAA解析地址,也就是ipv6地址
    aaaa = ""
    try:
        # 解析出url的域名
        domain = urlparse(url).netloc
        # socket.getaddrinfo返回结果示例:
        # [(<AddressFamily.AF_INET6: 23>, 0, 0, '', ('240e:c1:6800::19', 0, 0, 0)), (<AddressFamily.AF_INET6: 23>, 0, 0, '', ('240e:780:4000:1::7', 0, 0, 0))]
        aaaa = socket.getaddrinfo(domain, None, socket.AF_INET6)[0][4][0]
    # 如果出现异常,说明不支持ipv6访问,返回False
    except Exception as e:
        pass
    if aaaa == "":
        print(f"{url}不支持ipv6访问,不支持解析AAAA地址。")
        return False
    # 检查ipv6网站是否可访问
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41"}
    try:
        r = requests.get(url, timeout=3, verify=False, headers=headers)
        code = r.status_code
    except Exception as e:
        code = -1
    if code == 200:
        print(f"{url}支持ipv6访问,解析AAAA地址为:{aaaa},响应状态码为:{code}。")
        return True
    else:
        print(f"{url}不支持ipv6访问,解析AAAA地址为:{aaaa},响应状态码为:{code}。")
        return False 

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="检测URL是否支持IPv6访问")
    parser.add_argument("-u", "--url", type=str, help="输入url地址", required=True)
    args = parser.parse_args()
    url = args.url
    ipv6_access_check(url)

测试示例

我们选三种情况的URL进行测试:

  • 不支持解析AAAA记录
c:\>python main.py --url https://www.baidu.com
https://www.baidu.com不支持ipv6访问,不支持解析AAAA地址。
  • 支持解析AAAA记录,但是URL无法IPv6访问(浏览器是可以正常打开这个url的)
c:\>python main.py --url http://zwfw-new.hunan.gov.cn/hnzwfw/1/index.htm
http://zwfw-new.hunan.gov.cn/hnzwfw/1/index.htm不支持ipv6访问,解析AAAA地址为:240e:c1:9010:2::2,响应状态码为:-1。
  • 支持解析AAAA记录,URL访问正常
C:\>python main.py --url https://ipw.cn/ssl/?site=ipw.cn
https://ipw.cn/ssl/?site=ipw.cn支持ipv6访问,解析AAAA地址为:240e:c3:4000:9:44::6,响应状态码为:200。

相关推荐

Python Qt GUI设计:将UI文件转换Python文件三种妙招(基础篇—2)

在开始本文之前提醒各位朋友,Python记得安装PyQt5库文件,Python语言功能很强,但是Python自带的GUI开发库Tkinter功能很弱,难以开发出专业的GUI。好在Python语言的开放...

Connect 2.0来了,还有Nuke和Maya新集成

ftrackConnect2.0现在可以下载了--重新设计的桌面应用程序,使用户能够将ftrackStudio与创意应用程序集成,发布资产等。这个新版本的发布中还有两个Nuke和Maya新集成,...

Magicgui:不会GUI编程也能轻松构建Python GUI应用

什么是MagicguiMagicgui是一个Python库,它允许开发者仅凭简单的类型注解就能快速构建图形用户界面(GUI)应用程序。这个库基于Napari项目,利用了Python的强大类型系统,使得...

Python入坑系列:桌面GUI开发之Pyside6

阅读本章之后,你可以掌握这些内容:Pyside6的SignalsandSlots、Envents的作用,如何使用?PySide6的Window、DialogsandAlerts、Widgets...

Python入坑系列-一起认识Pyside6 designer可拖拽桌面GUI

通过本文章,你可以了解一下内容:如何安装和使用Pyside6designerdesigner有哪些的特性通过designer如何转成python代码以前以为Pyside6designer需要在下载...

pyside2的基础界面(pyside2显示图片)

今天我们来学习pyside2的基础界面没有安装过pyside2的小伙伴可以看主页代码效果...

Python GUI开发:打包PySide2应用(python 打包pyc)

之前的文章我们介绍了怎么使用PySide2来开发一个简单PythonGUI应用。这次我们来将上次完成的代码打包。我们使用pyinstaller。注意,pyinstaller默认会将所有安装的pack...

使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂

PySide2是Qt框架的Python绑定,允许你使用Python创建功能强大的跨平台GUI应用程序。PySide2的基本使用方法:安装PySide2pipinstallPy...

pycharm中conda解释器无法配置(pycharm安装的解释器不能用)

之前用的好好的pycharm正常配置解释器突然不能用了?可以显示有这个环境然后确认后可以conda正在配置解释器,但是进度条结束后还是不成功!!试过了pycharm重启,pycharm重装,anaco...

Conda使用指南:从基础操作到Llama-Factory大模型微调环境搭建

Conda虚拟环境在Linux下的全面使用指南:从基础操作到Llama-Factory大模型微调环境搭建在当今的AI开发与数据分析领域,conda虚拟环境已成为Linux系统下管理项目依赖的标配工具。...

Python操作系统资源管理与监控(python调用资源管理器)

在现代计算环境中,对操作系统资源的有效管理和监控是确保应用程序性能和系统稳定性的关键。Python凭借其丰富的标准库和第三方扩展,提供了强大的工具来实现这一目标。本文将探讨Python在操作系统资源管...

本地部署开源版Manus+DeepSeek创建自己的AI智能体

1、下载安装Anaconda,设置conda环境变量,并使用conda创建python3.12虚拟环境。2、从OpenManus仓库下载代码,并安装需要的依赖。3、使用Ollama加载本地DeepSe...

一文教会你,搭建AI模型训练与微调环境,包学会的!

一、硬件要求显卡配置:需要Nvidia显卡,至少配备8G显存,且专用显存与共享显存之和需大于20G。二、环境搭建步骤1.设置文件存储路径非系统盘存储:建议将非安装版的环境文件均存放在非系统盘(如E盘...

使用scikit-learn为PyTorch 模型进行超参数网格搜索

scikit-learn是Python中最好的机器学习库,而PyTorch又为我们构建模型提供了方便的操作,能否将它们的优点整合起来呢?在本文中,我们将介绍如何使用scikit-learn中的网格搜...

如何Keras自动编码器给极端罕见事件分类

全文共7940字,预计学习时长30分钟或更长本文将以一家造纸厂的生产为例,介绍如何使用自动编码器构建罕见事件分类器。现实生活中罕见事件的数据集:背景1.什么是极端罕见事件?在罕见事件问题中,数据集是...