前言:

在Windows中,你可以挂载网络硬盘,但是在缺失公网IPv4的情况下,仍可以使用公网IPv6进行替代,一下是一个简单的 Python 脚本,用于自动转换地址使其可以被Windows所使用。

适用环境:

  1. 拥有公网IPv6地址,同时开放了对应外网端口

  2. 路由器,光猫或网关防火墙设置已允许IPv6流量出入站

  3. 拥有自己的域名,同时已绑定对应机器的IPv6地址(推荐DDns-Go)

  4. 电脑网卡IPv6地址且已打开对应选项(即可以获取到IPv6地址)

示例代码:

IPv4:

import socket

def get_ip_address(domain):
    return socket.gethostbyname(domain)

def replace_colon_with_dash(input_string):
    return input_string.replace(":", "-")

# 获取用户输入的域名
domain = input("请输入你想要查询的域名:")
ip_address = get_ip_address(domain)

address = ip_address
# 将IP地址存储在变量address中

address_R = replace_colon_with_dash(address)
# 将变量address中的:替换为-,并存储在变量address_R中

print(address_R)
# 输出:变量address_R,即替换后的IP地址

IPv6:

import socket

def get_ipv6_address(domain):
    try:
        # 获取IPv6地址
        ipv6_address = socket.getaddrinfo(domain, None, socket.AF_INET6)[0][4][0]
        return ipv6_address
    except (socket.gaierror, IndexError) as e:
        print(f"Error: {e}")
        return None

def replace_colon_with_dash(ipv6_address):
    return ipv6_address.replace(':', '-')

if __name__ == '__main__':
    # 获取用户输入的域名
    domain = input("请输入你想要查询的域名:")

    ipv6_address = get_ipv6_address(domain)

    if ipv6_address:
        modified_ipv6 = replace_colon_with_dash(ipv6_address)
        print(f"域名 {domain} 的IPv6地址为: {ipv6_address}")
        print(f"替换冒号为破折号后的IPv6地址为: {modified_ipv6}")
    else:
        print("无法获取IPv6地址")

综合脚本(带GUI):

import socket
import tkinter as tk
from tkinter import ttk

def get_ip_address(domain_1):
    try:
        ip_address = socket.gethostbyname(domain_1)
        return ip_address
    except (socket.gaierror, IndexError) as e:
        print(f"Error: {e}")
        return None

def get_ipv6_address(domain):
    try:
        # 获取IPv6地址
        ipv6_address = socket.getaddrinfo(domain, None, socket.AF_INET6)[0][4][0]
        return ipv6_address
    except (socket.gaierror, IndexError) as e:
        print(f"Error: {e}")
        return None

def replace_colon_with_dash(ipv6_address):
    return ipv6_address.replace(':', '-')

def show_result():
    
    global copy_button  # 声明全局变量
    global modified_ipv6
    global domain
    global ipv6_address
    
    domain = entry.get()
    domain_1 = entry.get()
    ipv6_address = get_ipv6_address(domain)
    ip_address = get_ip_address(domain_1)

    if ipv6_address and ip_address:
        modified_ipv6 = replace_colon_with_dash(ipv6_address)
        result_label.config(text=f"您查询的域名是 ‘ {domain} ’ \n\n查询到的的IPv4地址为: {ip_address}\n\nIPv6地址为:{ipv6_address}\n\n转换格式为: \\\{modified_ipv6}.ipv6-literal.net")
        #创建复制按钮
        copy_button = tk.Button(window, text="复制转换后的地址", command=copy_result)
        copy_button.pack(pady=5)
    else:
        if ip_address:
            result_label.config(text=f"您查询的域名是 ‘ {domain} ’ \n\n查询到的的IPv4地址为: {ip_address}\n\n未找到IPv6地址")
            
        elif ipv6_address:
            modified_ipv6 = replace_colon_with_dash(ipv6_address)
            result_label.config(text=f"您查询的域名是 ‘ {domain} ’ \n\n查询到的的IPv6地址为: {ipv6_address}\n\n转换格式为: \\\{modified_ipv6}.ipv6-literal.net")
            #创建复制按钮
            copy_button = tk.Button(window, text="复制转换后的地址", command=copy_result)
            copy_button.pack(pady=5)
        else:
            result_label.config(text="无法获取IP地址")

def copy_result(): 
    if ipv6_address:
        result_label.config(text=f"\\\{modified_ipv6}.ipv6-literal.net")
        window.clipboard_clear() 
        window.clipboard_append(result_label.cget("text"))
        window.update()
        result_label.config(text=f"请在文件管理器中输入下列地址:\n\n\\\{modified_ipv6}.ipv6-literal.net\n\n已为您复制到系统剪贴板~")
        #删除复制按钮
        copy_button.destroy()
        
# 创建主窗口
window = tk.Tk()
window.title("IPv6 地址查询工具")

# 设置窗口大小
window.geometry("700x500")

# 设置窗口背景颜色
window.configure(bg="#FFDAB9")

# 创建样式
style = ttk.Style()
style.configure("TButton",
                background="#808080",  # 灰色背景
                foreground="black",   # 黑色文字
                padding=(10, 5),       # 按钮内边距
                font=('Helvetica', 12),  # 字体和大小
                borderwidth=2,          # 边框宽度
                relief="flat",          # 去除按钮凸起效果
                )

# 创建标签和输入框
label = tk.Label(window, text="请输入你想要查询的域名:", bg="#FFDAB9", font=('Helvetica', 14))
label.pack(pady=30)

entry = tk.Entry(window, font=('Helvetica', 14))
entry.pack(pady=0)

# 创建按钮
button = ttk.Button(window, text="查询", command=show_result, style="TButton")
button.pack(pady=30)

# 创建结果标签
result_label = tk.Label(window, text="", bg="#FFDAB9", font=('Helvetica', 14))
result_label.pack(pady=10)

# 启动主循环
window.mainloop()

注意:

  1. IPv4地址可直接输入使用,仅IPv6地址需要转换格式后才能使用

  2. 受不同环境影响,不保证代码可用性,请根据实际情况调整

结尾:

一般情况下,只要网络连接正常,代码功能能轻松实现

注意区分不同网络ip类型,选择合适代码使用

源代码下载:

自行选择下载版本,可打包后作为程序直接运行

文章作者: yixya
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 linine的茶歇室
文章 代码
喜欢就支持一下吧