Swift3.0 Swift2.3 获取IP地址 获取网关地址
在路由器默认登录地址方面,主流品牌默认地址都是一样的,但也有不少国际品牌或者不太出名的路由器品牌默认地址不一样,以下一起来看: 其它品牌路由器默认登录地址汇总如下: 实达2110EH ROUTER路由器默认管理地址: http://192.168.10.1/ D-LINK路由器默认管理地址: http://192.168.0.1 阿尔法路由器默认管理地址: 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/ 我这里有两个品牌的路由器,网关分别是: 根据以上的总结,这个网关大体都差不多的,我们可以通过获取设备的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
}
大家可以根据这个代码自己再修改为合适自己的代码使用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |