You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VPN互联的Fritzbox环境下用Python获取办公网IP(MacOS/Ubuntu)

获取办公网内设备IP的Python实现方案

思路说明

你的设备通过VPN接入办公网后,会被分配一个10.131.131.x段的IP。可以通过两种方式获取该IP:一是利用socket连接办公网节点自动匹配对应接口IP;二是直接枚举本地网络接口,筛选办公网子网段的IP。

方法一:通过Socket连接办公网节点获取

这种方法依赖VPN连接正常,且办公网内有可访问的节点(比如你traceroute里的10.131.131.13),系统会自动使用VPN接口的IP发起连接,从而获取本地的办公网IP。

import socket

def get_office_vpn_ip():
    target_host = "10.131.131.13"  # 办公网内可访问的目标IP
    try:
        # 创建socket连接,不发送数据
        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
            s.connect((target_host, 80))
            office_ip = s.getsockname()[0]
        return office_ip
    except Exception as e:
        print(f"获取失败: {e}")
        return None

if __name__ == "__main__":
    ip = get_office_vpn_ip()
    if ip:
        print(f"设备在办公网的IP: {ip}")

方法二:枚举本地网络接口筛选办公网IP

直接读取本地所有网络接口的IP地址,筛选属于10.131.131.0/24子网的IP。这种方法不需要依赖办公网节点的连通性,只要VPN接口已分配IP即可。

依赖说明

需要安装netifaces库(跨平台支持MacOS和Ubuntu),执行安装命令:

pip install netifaces

实现代码

import netifaces
import ipaddress

def get_office_ip_from_interfaces():
    target_subnet = ipaddress.IPv4Network("10.131.131.0/24", strict=False)
    for interface in netifaces.interfaces():
        addrs = netifaces.ifaddresses(interface)
        if netifaces.AF_INET in addrs:
            for addr_info in addrs[netifaces.AF_INET]:
                ip = addr_info["addr"]
                if ipaddress.IPv4Address(ip) in target_subnet:
                    return ip
    return None

if __name__ == "__main__":
    ip = get_office_ip_from_interfaces()
    if ip:
        print(f"设备在办公网的IP: {ip}")
    else:
        print("未找到办公网IP,请检查VPN连接")

注意事项

  • 两种方法都需要确保VPN处于连接状态,且办公网子网配置正确(10.131.131.0/24)。
  • 方法一需要目标主机(10.131.131.13)可访问,若该主机不可用,可替换为办公网内其他稳定在线的设备IP。
  • MacOS和Ubuntu系统均支持上述代码,无需额外适配。

内容的提问来源于stack exchange,提问作者jotpunkt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:27:11