如何获得IPhone';swift3中的公共IP地址

如何获得IPhone';swift3中的公共IP地址,swift3,Swift3,对于我的项目,我需要获得IPhone的公共IP地址,有很多可用的示例,它们通过使用外部/第三方URL显示公共IP地址。我只是想知道如何在不使用其他URL的情况下提取IPhone的IP地址 我有以下代码,但它提供了本地IP func getWiFiAddress() -> String? { var address : String? // Get list of all interfaces on the local machine: var ifaddr : U

对于我的项目,我需要获得IPhone的公共IP地址,有很多可用的示例,它们通过使用外部/第三方URL显示公共IP地址。我只是想知道如何在不使用其他URL的情况下提取IPhone的IP地址

我有以下代码,但它提供了本地IP

func getWiFiAddress() -> String? {
    var address : String?

    // Get list of all interfaces on the local machine:
    var ifaddr : UnsafeMutablePointer<ifaddrs>?
    guard getifaddrs(&ifaddr) == 0 else { return nil }
    guard let firstAddr = ifaddr else { return nil }

    // For each interface ...
    for ifptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
        let interface = ifptr.pointee

        // Check for IPv4 or IPv6 interface:
        let addrFamily = interface.ifa_addr.pointee.sa_family
        if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {

            // Check interface name:
            let name = String(cString: interface.ifa_name)
            if  name == "en0" {

                // Convert interface address to a human readable string:
                var addr = interface.ifa_addr.pointee
                var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                getnameinfo(&addr, socklen_t(interface.ifa_addr.pointee.sa_len),
                            &hostname, socklen_t(hostname.count),
                            nil, socklen_t(0), NI_NUMERICHOST)
                address = String(cString: hostname)
            }
        }
    }
    freeifaddrs(ifaddr)

    return address
}
func getWiFiAddress()->字符串?{
变量地址:字符串?
//获取本地计算机上所有接口的列表:
var ifaddr:不可女性化的指针?
guard getifaddrs(&ifaddr)==0 else{return nil}
guard let firstAddr=ifaddr else{return nil}
//对于每个接口。。。
对于顺序中的ifptr(第一个:firstAddr,下一个:{$0.pointee.ifa_next}){
让接口=ifptr.pointee
//检查IPv4或IPv6接口:
让addrFamily=interface.ifa\u addr.pointee.sa\u family
如果addrFamily==UInt8(AF_INET)| | addrFamily==UInt8(AF_INET6){
//检查接口名称:
let name=String(cString:interface.ifa\u name)
如果名称==“en0”{
//将接口地址转换为人类可读的字符串:
var addr=interface.ifa\u addr.pointee
var hostname=[CChar](重复:0,计数:Int(NI_MAXHOST))
getnameinfo(&addr,socklen_t)(interface.ifa_addr.pointee.sa_len),
&主机名,socklen\u t(hostname.count),
零,socklen_t(0),NI_numericost)
地址=字符串(cString:hostname)
}
}
}
FreeIFADRS(ifaddr)
回信地址
}

您所说的“本地”是指本地WIFI LAN中的IP,而“公共”是指ISP向外界“公开”的IP?@BogdanFarca是的,更正了,因为(N)网络(A)衣服(T)翻译您不能。从网站读取外部地址有什么不对?您仍然需要internet连接才能从提供商处获得外部地址。@dimple;所以你想要的是不可能的,就像瓦迪安解释的那样。使用外部服务获取IP