在Swift 3中获取网络IP

在Swift 3中获取网络IP,swift,swift3,ip,Swift,Swift3,Ip,有人帮我在Swift 3中获取网络IP(即103.62.238.190)吗 我尝试了下面的代码,但是这个函数得到了系统Ip 我试了很多次想找到解决方案,但仍然没有得到任何精确的函数 func getIFAddresses() -> [String] { var addresses = [String]() // Get list of all interfaces on the local machine: var ifaddr : UnsafeMutablePo

有人帮我在Swift 3中获取网络IP(即103.62.238.190)吗

我尝试了下面的代码,但是这个函数得到了系统Ip

我试了很多次想找到解决方案,但仍然没有得到任何精确的函数

func getIFAddresses() -> [String] {
    var addresses = [String]()

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

    // For each interface ...
    for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
        let flags = Int32(ptr.pointee.ifa_flags)
        var addr = ptr.pointee.ifa_addr.pointee

        // Check for running IPv4, IPv6 interfaces. Skip the loopback interface.
        if (flags & (IFF_UP|IFF_RUNNING|IFF_LOOPBACK)) == (IFF_UP|IFF_RUNNING) {
            if addr.sa_family == UInt8(AF_INET) || addr.sa_family == UInt8(AF_INET6) {

                // Convert interface address to a human readable string:
                var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                if (getnameinfo(&addr, socklen_t(addr.sa_len), &hostname, socklen_t(hostname.count),
                                nil, socklen_t(0), NI_NUMERICHOST) == 0) {
                    let address = String(cString: hostname)
                    addresses.append(address)
                }
            }
        }
    }

    freeifaddrs(ifaddr)
    return addresses
}
func getifaddress()->[字符串]{
变量地址=[String]()
//获取本地计算机上所有接口的列表:
var ifaddr:不可女性化的指针?
guard getifaddrs(&ifaddr)==0其他{return[]}
guard let firstAddr=ifaddr else{return[]}
//对于每个接口。。。
对于顺序中的ptr(第一个:firstAddr,下一个:{$0.pointee.ifa_next}){
let flags=Int32(ptr.pointee.ifa_flags)
var addr=ptr.pointee.ifa_addr.pointee
//检查是否正在运行IPv4、IPv6接口。跳过环回接口。
if(标志和(IFF|U向上| IFF|U运行| IFF|U环回))==(IFF|U向上| IFF|U运行){
如果addr.sa_family==UInt8(AF_INET)| | addr.sa_family==UInt8(AF_INET6){
//将接口地址转换为人类可读的字符串:
var hostname=[CChar](重复:0,计数:Int(NI_MAXHOST))
if(getnameinfo(&addr,socklen_t(addr.sa_len))&hostname,socklen_t(hostname.count),
零,socklen_t(0),NI_numericost)=0){
let address=String(cString:hostname)
地址。追加(地址)
}
}
}
}
FreeIFADRS(ifaddr)
回信地址
}

模拟器返回本地IP的可能副本,但我想获取网络IP,为了获取当前位置,您问题中的代码与中的代码相同(最好有参考:)。它给出Mac上所有(启动和运行)接口的IP地址。你到底在找什么?可能是“外部地址”,即路由器/NAT另一端的IP地址?是的,我想要NAT IP,通过它我可以找到当前位置,但此函数返回本地IP:-192.168.1.196这也是MAC IP