如何获得IPhone的公共IP地址,而不使用第三方url

对于我的项目,我需要获取IPhone的公共IP地址,有很多可用的例子,通过使用外部/第三方URL显示公共IP地址。 我只是想知道如何提取IPhones的IP地址,而无需使用另一个URL的帮助。

注: – 我用这一个,但只显示本地IP地址,我需要公共IP地址

func getIPAddress() -> [String] { var addresses = [String]() // Get list of all interfaces on the local machine: var ifaddr : UnsafeMutablePointer<ifaddrs> = nil if getifaddrs(&ifaddr) == 0 { // For each interface ... for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) { let flags = Int32(ptr.memory.ifa_flags) var addr = ptr.memory.ifa_addr.memory // 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](count: Int(NI_MAXHOST), repeatedValue: 0) if (getnameinfo(&addr, socklen_t(addr.sa_len), &hostname, socklen_t(hostname.count), nil, socklen_t(0), NI_NUMERICHOST) == 0) { if let address = String.fromCString(hostname) { addresses.append(address) } } } } } freeifaddrs(ifaddr) } return addresses } 

我在swift项目中使用了这个头文件,它生成了Local IP

 import Darwin var hostName = [Int8](count: 255, repeatedValue: 0) gethostname(&hostName, hostName.count) var hints = addrinfo() var res = UnsafeMutablePointer<addrinfo>() var p = UnsafeMutablePointer<addrinfo>() var p4 = UnsafeMutablePointer<sockaddr_in>() var p6 = UnsafeMutablePointer<sockaddr_in6>() hints.ai_flags = AI_ALL hints.ai_family = PF_UNSPEC hints.ai_socktype = SOCK_STREAM var ipstr = [CChar](count: Int(INET6_ADDRSTRLEN), repeatedValue: 0) print("List of IP addresses on host \(String.fromCString(hostName)!)\n") if getaddrinfo( hostName, "0", &hints, &res) == 0 { var ipFamily = "" var s: Int32 = 0 var port: in_port_t = 0 for(p = res; p != nil; p = p.memory.ai_next) { switch p.memory.ai_family { case PF_INET: p4 = UnsafeMutablePointer<sockaddr_in>(p.memory.ai_addr) inet_ntop(AF_INET, &p4.memory.sin_addr, &ipstr, socklen_t(INET6_ADDRSTRLEN)) ipFamily = "IPv4" port = p4.memory.sin_port.bigEndian case PF_INET6: p6 = UnsafeMutablePointer<sockaddr_in6>(p.memory.ai_addr) inet_ntop(AF_INET6, &p6.memory.sin6_addr, &ipstr, socklen_t(INET6_ADDRSTRLEN)) ipFamily = "IPv6" port = p6.memory.sin6_port.bigEndian default: break } print("\t\(ipFamily):", String.fromCString(ipstr)!) } // free unmanaged memmory !!!!! freeaddrinfo(res) } 

打印在我自己的电脑上

 List of IP addresses on host Ivos-MacBook.local IPv6: fe80::225:ff:fe40:9c72 IPv6: 2a02:130:200:1350:225:ff:fe40:9c72 IPv4: 192.168.1.106 

对于外部IP,你需要外部服务的帮助(不是swift特定的:-))