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

如何获取iPhone在4G网络下的真实IP地址?

如何获取iPhone 4G网络下的真实公网IP地址

你用getifaddrs拿到的是设备的内网IP,这是运营商给手机分配的私网地址;而ipify返回的是经过运营商NAT转换后的公网IP,两者本就不是同一个——这是移动网络的NAT架构导致的:运营商会用少量公网IP为大量用户做地址转换,本地系统根本无法直接获取公网IP,必须通过外部服务返回。

要拿到和ipify一致的公网IP,只能通过向外部API发起网络请求的方式,下面是Swift实现示例:

func getPublicIP(completion: @escaping (String?) -> Void) {
    guard let url = URL(string: "https://api.ipify.org") else {
        completion(nil)
        return
    }
    
    let task = URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data, error == nil else {
            completion(nil)
            return
        }
        let ip = String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
        completion(ip)
    }
    task.resume()
}

// 调用示例
getPublicIP { ip in
    if let ip = ip {
        print("公网IP:\(ip)")
    } else {
        print("获取公网IP失败")
    }
}

注意事项:

  • 网络请求是异步操作,需通过回调或async/await处理结果
  • 确保App的Info.plist配置了网络权限(iOS 10+默认支持HTTPS请求)
  • 若需IPv6支持,可替换请求地址为对应IPv6接口

另外,你原来的代码仅能获取本地网络接口的IP(包括4G内网IP),如果需求是获取内网IP,代码本身无问题;但要获取公网IP,必须通过网络请求,不存在能直接拿到公网IP的本地API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:52:51