iOS客戶端Portal認證Swift版

在客戶端做Portal認證總結

判斷是否連接WiFi,引入第三方框架Reachability

#import "Reachability.h"  
func isConnectWIFI() -> Bool {
    let reach = Reachability(hostName: "www.baidu.com")
    if reach.currentReachabilityStatus() == ReachableViaWiFi {
        return true
    }
    return false
}

獲取WiFi名稱

import SystemConfiguration.CaptiveNetwork
func getSSID() -> String? {

    let interfaces = CNCopySupportedInterfaces()
    guard interfaces != nil else { return nil }

    let if0: UnsafePointer<Void>? = CFArrayGetValueAtIndex(interfaces, 0)
    guard if0 != nil else { return nil }
    let interfaceName: CFStringRef = unsafeBitCast(if0!, CFStringRef.self)

    let dictionary = CNCopyCurrentNetworkInfo(interfaceName)
    guard dictionary != nil else { return nil }

    let nsDictionary = NSDictionary(dictionary: dictionary!)

    return nsDictionary[kCNNetworkInfoKeySSID as String] as? String
}

獲取本機IP

func getIFAddresses() -> [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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章