Swift3.0 Swift2.3 获取IP地址 获取网关地址

Swift3.0 Swift2.3 获取IP地址 获取网关地址,第1张

概述最近需要在Swift项目中获取路由器的网关地址,在网上找了半天的代码也没发现太多有价值的东西,而且大多都是OC代码,很少有Swift的相关代码,只找到了一个通过Swift代码获取设备IP的代码,最后实在没办法只能曲线救国了。 在路由器默认登录地址方面,主流品牌默认地址都是一样的,但也有不少国际品牌或者不太出名的路由器品牌默认地址不一样,以下一起来看: 绝大多数主流品牌路由器默认管理登录地址为:ht

最近需要在Swift项目中获取路由器的网关地址,在网上找了半天的代码也没发现太多有价值的东西,而且大多都是OC代码,很少有Swift的相关代码,只找到了一个通过Swift代码获取设备IP的代码,最后实在没办法只能曲线救国了。

在路由器默认登录地址方面,主流品牌默认地址都是一样的,但也有不少国际品牌或者不太出名的路由器品牌默认地址不一样,以下一起来看:
绝大多数主流品牌路由器默认管理登录地址为:http://192.168.1.1 /或者 http://192.168.0.1/

其它品牌路由器默认登录地址汇总如下:

实达2110EH ROUTER路由器默认管理地址: http://192.168.10.1/

D-link路由器默认管理地址: @L_403_3@

阿尔法路由器默认管理地址: http://192.168.18.1

全向QL1680路由器默认管理地址: http://10.0.0.2

sunrise DSL-802E_R3A路由器默认管理地址: http://10.0.0.2/

GVC DSL-802E/R3A路由器默认管理地址: http://10.0.0.2/

艾玛 701g路由器默认管理地址: http://192.168.101.1或者http://192.168.0.1/

实达2110EH ROUTER路由器默认管理地址: http://192.168.10.1/

我这里有两个品牌的路由器,网关分别是:
TP-link http://192.168.1.1/
小米 http://192.168.31.1/
华为 http://192.168.3.1/

根据以上的总结,这个网关大体都差不多的,我们可以通过获取设备的IP地址来修改为网关的地址,不过这种方法纯属无奈之举,目前的水平达不到,只能先这样用着了。

下面上代码:

--- Swift 2.3 ---// ----- 获取 IP 地址 前提是你需要在桥接头文件里加上 #include <ifaddrs.h>func getIPAddress() -> String {    var address = ""    // 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 interface = ptr.memory            // Check for IPv4 or IPv6 interface:            let addrFamily = interface.ifa_addr.memory.sa_family            if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {                // Check interface name:                if let name = String.fromCString(interface.ifa_name) where name == "en0" {                    // Convert interface address to a human readable string:                    var addr = interface.ifa_addr.memory                    var hostname = [CChar](count: Int(NI_MAXHOST),repeatedValue: 0)                    getnameinfo(&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)    }    var ad = ["0","0","0"]    ad = address.componentsSeparatedByString(".") // 把获取到的手机IP拆分开放到数组ad中    ad[3] = "1" // 将最后一位强制修改为1    address = ad[0] + "." + ad[1] + "."  + ad[2] + "."  + ad[3] // 再把修改后的ad数组组合成String    print(address) // 看看修改结果    return address // 返回值}

思路就是把获取到的设备IP地址的最后一位手动修改为”1”,前面三位不需要修改,比如我的手机ip地址是 192.168.31.212,所以网关地址就是192.168.31.1。

这是一种比较无奈的方法,但是关键时刻也不能不说是一种思路。这种方法能适应大多数的路由器,分寸大家自己掌握,我的项目是允许的,先用着,以后再优化。

最近苹果更新了Swift3.0,这里更新一下代码。

--- Swift 3 ---// ----- 获取 IP 地址 前提是你需要在桥接头文件里加上 #include <ifaddrs.h> 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}

大家可以根据这个代码自己再修改为合适自己的代码使用。

总结

以上是内存溢出为你收集整理的Swift3.0 Swift2.3 获取IP地址 获取网关地址全部内容,希望文章能够帮你解决Swift3.0 Swift2.3 获取IP地址 获取网关地址所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1073896.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存