手机版 收藏 导航

iOS 如何获取设备 IP 地址

原创   www.link114.cn   2023-10-04 14:14:55

iOS 如何获取设备 IP 地址

iOS 提供 Network Framework,它可以帮助开发者方便地获取设备的 IP 地址。通过以下代码,可以获取设备的 IPv4 和 IPv6 地址:

import Network

let monitor = NWPathMonitor()
monitor.start(queue: DispatchQueue.global())
monitor.pathUpdateHandler = { path in
    if let ipv4 = path.evaluateTCPConnection(to: NWEndpoint.Host("www.apple.com"), from: nil)?.localEndpoint?.debugDescription {
        print("IPv4 Address: \(ipv4)")
    }
    if let ipv6 = path.evaluateTCPConnection(to: NWEndpoint.Host("www.apple.com"), from: nil)?.localEndpoint?.debugDescription {
        print("IPv6 Address: \(ipv6)")
    }
}

除 Network Framework,开发者也可以使用 SystemConfiguration Framework 来获取设备的 IP 地址。以下代码演示如何通过这种方式获取 IPv4 地址:

import SystemConfiguration

func getIPAddress() -> String? {
    var address: String?
    var ifaddr: UnsafeMutablePointer? = nil
    if getifaddrs(&ifaddr) == 0 {
        var ptr = ifaddr
        while ptr != nil {
            defer { ptr = ptr?.pointee.ifa_next }
            guard let interface = ptr?.pointee else {
                return nil
            }
            let addrFamily = interface.ifa_addr.pointee.sa_family
            if addrFamily == AF_INET || addrFamily == AF_INET6 {
                let name = String(cString: interface.ifa_name)
                if  name == "en0" {
                    var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                    getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len),
                               &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST)
                    address = String(cString: hostname)
                }
            }
        }
        freeifaddrs(ifaddr)
    }
    return address
}

以上是两种常见的获取 iOS 设备 IP 地址的方法。开发者可以根据具体需求选择合适的方式实现。