• swift 获得手机IP(运营商IP和WiFi的IP)


            print("手机用户自定义的名称   ===     (UIDevice.current.name)")
            print("设备名称systemName + iOS版本systemVersion  ==  (UIDevice.current.systemName + UIDevice.current.systemVersion)")
            print("设备型号(iPhone/ipad/iMac/watch)  ==     (UIDevice.current.model)")
            print("运营商IP ==      (deviceIP ?? "本机IP为空")")
            print("wifiIP  ==      (wifiIP ?? "无线网IP为空")")
    

      

    /// 设备运营商IP(联通/移动/电信的运营商给的移动IP)
    var deviceIP:String?{
        var addresses = [String]()
        var ifaddr : UnsafeMutablePointer<ifaddrs>? = nil
        if getifaddrs(&ifaddr) == 0 {
            var ptr = ifaddr
            while (ptr != nil) {
                let flags = Int32(ptr!.pointee.ifa_flags)
                var addr = ptr!.pointee.ifa_addr.pointee
                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) {
                        var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                        if (getnameinfo(&addr, socklen_t(addr.sa_len), &hostname, socklen_t(hostname.count),nil, socklen_t(0), NI_NUMERICHOST) == 0) {
                            if let address = String(validatingUTF8:hostname) {
                                addresses.append(address)
                            }
                        }
                    }
                }
                ptr = ptr!.pointee.ifa_next
            }
            freeifaddrs(ifaddr)
        }
        return addresses.first
    }
    
    
    /// WiFi获得的IP
    var wifiIP:String?{
        var address: String?
        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
    }
    

      

    公网IP : 把数据变为json 在解析
    
        static func getPublicIP222(backBlock: @escaping ((String)->())){
            DDLOG(message: " Thread = (Thread.current)")
            
            let ipURL = URL(string: "http://pv.sohu.com/cityjson?ie=utf-8")
            
            var ip: String? = nil
            do {
                if let ipURL = ipURL {
                    ip = try String(contentsOf: ipURL, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                }
            } catch {
            }
            //判断返回字符串是否为所需数据
            if ip?.hasPrefix("var returnCitySN = ") ?? false {
                //对字符串进行处理,然后进行json解析
                //删除字符串多余字符串
                let range = NSRange(location: 0, length: 19)
                if let subRange = Range<String.Index>(range, in: ip ?? "") { ip?.removeSubrange(subRange) }
                let nowIp = (ip as NSString?)?.substring(to: (ip?.count ?? 0) - 1)
                //将字符串转换成二进制进行Json解析
                let data = nowIp?.data(using: .utf8)
                var dict: [String : Any]? = nil
                do {
                    if let data = data {
                        dict = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String : Any]
                    }
                } catch {
                }
                if let dict = dict {
                    print("(dict)")
                }
                backBlock(dict?["cip"] as? String ?? "")
            }
            backBlock("")
        }

    类方法

    /// 获得公网IP
        static func getPublicIP(backBlock: @escaping ((_ ipStr:String)->())){
            let queue = OperationQueue()
            let blockOP = BlockOperation.init {
                if let url = URL(string: "http://pv.sohu.com/cityjson?ie=utf-8") ,
                    let s = try? String(contentsOf: url, encoding: String.Encoding.utf8) {
                    DDLOG(message: "data:(s)")
                    let subArr = s.components(separatedBy: ":")
                    if subArr.count > 1  {
                        let ipStr = subArr[1].replacingOccurrences(of: """, with: "")
                        let ipSubArr = ipStr.components(separatedBy: ",")
                        if ipSubArr.count > 0 {
                            let ip = ipSubArr[0].trimmingCharacters(in: CharacterSet.whitespaces)
                            DDLOG(message: "公网IP:(ip), Thread = (Thread.current)")
                            DispatchQueue.main.async {
                                backBlock(ip)
                            }
                            return
                        }
                    }
                }else {
                    DDLOG(message: "获得公网IP URL 转换失败")
                }
                DispatchQueue.main.async {
                    JYLogsModel.JYLog(logType: JYLogsModel.JYLogType.errorType, logStr: "获取公网IP失败")
                    backBlock("")
                }
                
            }
            queue.addOperation(blockOP)
        }
    

      

        /// 获取当前设备IP
        static func getOperatorsIP() -> String? {
            var addresses = [String]()
            var ifaddr : UnsafeMutablePointer<ifaddrs>? = nil
            if getifaddrs(&ifaddr) == 0 {
                var ptr = ifaddr
                while (ptr != nil) {
                    let flags = Int32(ptr!.pointee.ifa_flags)
                    var addr = ptr!.pointee.ifa_addr.pointee
                    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) {
                            var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                            if (getnameinfo(&addr, socklen_t(addr.sa_len), &hostname, socklen_t(hostname.count),nil, socklen_t(0), NI_NUMERICHOST) == 0) {
                                if let address = String(validatingUTF8:hostname) {
                                    addresses.append(address)
                                }
                            }
                        }
                    }
                    ptr = ptr!.pointee.ifa_next
                }
                freeifaddrs(ifaddr)
            }
            return addresses.first
        }
        
     
    

      

     //获取本机无线局域网ip
        static func getWifiIP() -> String? {
            
            var address: String?
            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
        }
    

      

  • 相关阅读:
    flash
    应用缓存
    音频和视频
    拖拽借口
    地理定位接口
    表单元素
    jquery常见用法
    jquery ajax 模板
    Ubuntu下Lucene环境搭配
    小絮叨
  • 原文地址:https://www.cnblogs.com/qingzZ/p/11045795.html
Copyright © 2020-2023  润新知