您的位置:首页 > 理论基础 > 计算机网络

iOS中如何获取当前网络及其本地IP(Swift)

2017-10-13 13:41 771 查看
···

//获取当前网络
    func getUsedSSID() ->
String {        let interfaces =
CNCopySupportedInterfaces()
        var ssid =
""
        if interfaces !=
nil {
            let interfacesArray =
CFBridgingRetain(interfaces) as!
Array<AnyObject>
            if interfacesArray.count >
0 {
                let interfaceName = interfacesArray[0]
as! CFString
                let ussafeInterfaceData =
CNCopyCurrentNetworkInfo(interfaceName)
                if (ussafeInterfaceData !=
nil) {
                    let interfaceData = ussafeInterfaceData
as! Dictionary<String,
Any>
                    ssid = interfaceData["SSID"]!
as! String
                }
            }
        }
        return ssid
    }
    //获取本机ip
    func getLocalIPAddressForCurrentWiFi() ->
String? {
        var address:
String?
        
        // get list of all interfaces on the local machine
        var ifaddr:
UnsafeMutablePointer<ifaddrs>? =
nil
        guard
getifaddrs(&ifaddr) == 0 else {
            return
nil
        }
        guard
let firstAddr = ifaddr else {
            return
nil
        }
        for ifptr
in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
            
            let interface = ifptr.pointee
            
            // Check for IPV4 or IPV6 interface
            let addrFamily = interface.ifa_addr.pointee.sa_family
            if addrFamily ==
UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {
                // Check interface name
                let name =
String(cString: interface.ifa_name)
                if name ==
"en0" {
                    // Convert interface address to a human readable string
                    var addr = interface.ifa_addr.pointee
                    var hostName = [CChar](repeating:
0, count: Int(NI_MAXHOST))
                    getnameinfo(&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
    }

···
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Swift IP 当前网络