我检查了下面的代码以获取ipv6地址,这段代码返回了全局单播地址,比如“2001:x:x…”。但我想获得链接本地地址,比如“fe80:…”。如何使用以下代码获取链接本地地址?
static var ipAddress: String? {
var ipv6 : String?
var ifaddr : UnsafeMutablePointer<ifaddrs>?
guard getifaddrs(&ifaddr) == 0 else { return (nil, nil) }
guard let firstAddr = ifaddr else { return (nil, nil) }
for ifptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
let interface = ifptr.pointee
let addrFamily = interface.ifa_addr.pointee.sa_family
if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {
let name = String(cString: interface.ifa_name)
if name == "en0" {
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len),&hostname, socklen_t(hostname.count),nil, socklen_t(0), NI_NUMERICHOST)
ipv6 = String(cString: hostname)
}
}
}
freeifaddrs(ifaddr)
return ipv6
}
该系统包括文件netinet6/in6。定义宏
#define IN6_IS_ADDR_LINKLOCAL(a) \
(((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0x80))
该宏并没有被导入Swift,但显示了我们必须如何进行。以下循环修改(来自Swift-Get设备的WIFI IP地址)将查找所有IPv6链路本地地址:
for ifptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
let interface = ifptr.pointee
let addrFamily = interface.ifa_addr.pointee.sa_family
if addrFamily == UInt8(AF_INET6) {
// Get the sin6_addr part of the sockaddr as UInt8 "array":
let s6_addr = interface.ifa_addr.withMemoryRebound(to: sockaddr_in6.self, capacity: 1) {
$0.pointee.sin6_addr.__u6_addr.__u6_addr8
}
// Check for link-local address:
if s6_addr.0 == 0xfe && (s6_addr.1 & 0xc0) == 0x80 {
let name = String(cString: interface.ifa_name)
// ...
}
}
}
我无法理解为什么这个命令不起作用: 注意:我已经用把上面的链接本地地址弄错了,但我有一些有效的链接本地ipv6地址是端口号。 我得到了一个错误: 我也试着放单引号/双引号,但结果是同样的错误: 我使用的是OpenSSL 1.1.0f版本,它应该支持IPv6。 使用IPv4地址,它可以工作。
所以有几个网站会为你计算你的链接本地ipv6地址,就像这里的这个。 尽管如此,它并没有给出任何有用的关于这个地址是如何计算的,也没有输入参数是什么。那么,如果一个人知道自己的ipv4地址、子网掩码和网关地址,计算链路本地ipv6地址的过程(或算法)是什么?我正在使用SCTP套接字做一个项目,该项目使用ISATAP网络隧道和LL ipv6地址用于构建ISATAP地址。
此函数创建sockaddr_in6: 基本上,如果地址是IPv4地址,我会在它前面加上,并将该族设置为af_inet。 这有可能做到。如果是,我做错了什么?
以下是托管Web服务器的机器的ipconfig输出: 以太网适配器局域网连接: 特定于连接的DNS后缀:链接本地IPv6地址…:fe80::f85b:4256:ee76:24a4∗IPv4地址………:10.213.254.119子网掩码………:255.255.255.0默认网关……:10.213.254.252 我可以使用以下方式访问该网站:http://10.213.254.119/test“现
此外,如果我在设备中启用IPv4,那么也会生成IPv6链路本地地址。 有谁能解释一下,为了生成本地链接地址,Android设备实际上是在消耗什么?根据我的理解,链接本地地址应该始终存在,无论什么情况下,当链接打开。
问题内容: 如何在Swift中获取本地日期和时间? 问题答案: 我已经找到答案了。