ios - 是否可以在 iOS 中获取移动数据 IP 地址? (不是服务提供商的公共(public) IP)

标签 ios swift networking network-programming ip

我需要使用蜂窝网络(不是 WiFi)获取 iPhone/iPad 的 IP 地址。 Apple 允许这样做吗?如果不是,是否有其他方法获取 IP 地址?

感谢您的帮助!

最佳答案

我使用移动数据获得了我的内部 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)
        let 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(ptr.pointee.ifa_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
}

关于ios - 是否可以在 iOS 中获取移动数据 IP 地址? (不是服务提供商的公共(public) IP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46349417/

相关文章:

email - 为什么发送电子邮件需要多个邮件服务器跃点?

ios - RestKit映射: map different objects at once

android - 跨平台移动聊天

ios - 无法将类型 'String?' 的值分配给类型 'Int'

swift - 处理过的 AKAudioFile 的 AudioKit 自定义目录

android - 如何通过 Web API 管理 Android 与外部设备的通信?

ios - 一个 UIView 来统治它们,一个 UIView 来绑定(bind)它们

ios - UIImageView 中的自定义动画

ios - Xcode 9 Swift 4 标签页

C: 如果我一次发送少于 6 个字节,Curl 不会接收字节