获取iPhone或iPad设备的IP地址使用Swift 3

Kam*_*iOS 3 iphone ip-address ipad ios swift3

如何在不使用任何使用Swift 3编程语言的第三方库的情况下获取设备IP地址.实际上我使用以下代码来获取IP地址.

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

var ifaddr : UnsafeMutablePointer<ifaddrs> = nil
if getifaddrs(&ifaddr) == 0 {

    var ptr = ifaddr
    while ptr != nil {
        defer { ptr = ptr.memory.ifa_next }

        let interface = ptr.memory

        let addrFamily = interface.ifa_addr.memory.sa_family
        if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {

            if let name = String.fromCString(interface.ifa_name) where name == "en0" {

                var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0)
                getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.memory.sa_len),
                            &hostname, socklen_t(hostname.count),
                            nil, socklen_t(0), NI_NUMERICHOST)
                address = String.fromCString(hostname)
            }
        }
    }
    freeifaddrs(ifaddr)
}

return address
Run Code Online (Sandbox Code Playgroud)

}

但是UnsafeMutablePointer语法不起作用.它通过语法错误.我是否需要导入任何框架试图帮助我.

Kam*_*iOS 15

为了获得设备的确切IP地址,我做了以下事情.由于我想包含更新的代码以使用Swift 3获取IP地址,我在这里发布答案.从Swift引用- 获取设备的IP地址

  1. 添加#include<ifaddrs.h>您的桥接标题

  2. 创建以下功能以获取IP地址.

    func getIP()-> String? {  
    
    var address: String?
    var ifaddr: UnsafeMutablePointer<ifaddrs>? = nil
    if getifaddrs(&ifaddr) == 0 {
    
        var ptr = ifaddr
        while ptr != nil {
            defer { ptr = ptr?.pointee.ifa_next } // memory has been renamed to pointee in swift 3 so changed memory to pointee
    
            let interface = ptr?.pointee
            let addrFamily = interface?.ifa_addr.pointee.sa_family
            if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {
    
                if let name: String = String(cString: (interface?.ifa_name)!), name == "en0" {  // String.fromCString() is deprecated in Swift 3. So use the following code inorder to get the exact IP Address.
                    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, socklen_t(0), NI_NUMERICHOST)
                    address = String(cString: hostname)
                }
    
            }
        }
        freeifaddrs(ifaddr)
      }
    
      return address
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 为了获得IP地址, print(getIP())

验证: - >转到设置 - > Wi-Fi - >单击i符号 - >您可以检查设备的IP地址.我的iPhone中的IP地址

输出屏幕截图: 产量

  • @herme5 尝试注释掉`|| addrFamily == UInt8(AF_INET6)` (2认同)

Arp*_*ain 6

添加 #include<ifaddrs.h>您的桥接头。

这是获取 IP 地址所需的框架。

您也可以参考以下链接:

Swift - 获取设备的 IP 地址