在Swift中获取当前活动的网络适配器
我正在使用以下代码获取macOS系统的网络适配器:在Swift中获取当前活动的网络适配器,swift,sockets,networking,Swift,Sockets,Networking,我正在使用以下代码获取macOS系统的网络适配器: private func getAdapters() -> [Adapter] { var adapters: [Adapter] = [] var addresses: UnsafeMutablePointer<ifaddrs>? guard getifaddrs(&addresses) == 0 else { return adapters }
private func getAdapters() -> [Adapter]
{
var adapters: [Adapter] = []
var addresses: UnsafeMutablePointer<ifaddrs>?
guard getifaddrs(&addresses) == 0 else { return adapters }
guard let firstAddr = addresses else { return adapters }
for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next })
{
let address = ptr.pointee
let rawData = address.ifa_data
let name = address.ifa_name
let socket: sockaddr = address.ifa_addr.pointee
// Set up some filters
let loopback = (address.ifa_flags & UInt32(IFF_LOOPBACK)) != 0
let up = (address.ifa_flags & UInt32(IFF_UP)) != 0
let p2p = (address.ifa_flags & UInt32(IFF_POINTOPOINT)) != 0
if rawData != nil && name != nil && socket.sa_family == UInt8(AF_LINK) && !loopback && up && !p2p
{
let adapterName = String(utf8String: UnsafePointer<CChar>(name!))
let adapter = Adapter(name: adapterName!)
adapters.append(adapter)
}
}
freeifaddrs(addresses)
return adapters
}
private func getAdapters()->[适配器]
{
变量适配器:[适配器]=[]
变量地址:非女性化指针?
guard getifaddrs(&地址)==0其他{返回适配器}
guard let firstAddr=地址else{返回适配器}
对于顺序中的ptr(第一个:firstAddr,下一个:{$0.pointee.ifa_next})
{
let address=ptr.pointee
设rawData=address.ifa\u data
让名称=地址。如果名称
let socket:sockaddr=address.ifa\u addr.pointee
//设置一些过滤器
let loopback=(address.ifa\u flags&UInt32(IFF\u loopback))!=0
let up=(address.ifa\u flags&UInt32(IFF\u up))!=0
让p2p=(address.ifa_flags&UInt32(IFF_POINTOPOINT))!=0
如果rawData!=nil&&name!=nil&&socket.sa_family==UInt8(AF_LINK)&&!loopback&&up&&!p2p
{
让adapterName=String(utf8String:UnsafePointer(name!))
let adapter=adapter(名称:adapterName!)
附加(适配器)
}
}
freeifaddrs(地址)
返回适配器
}
现在,我正在寻找一种方法来确定这些适配器中的哪一个是“活动”适配器,即哪一个连接到internet
我想获得在网络设置中有“绿点”的适配器。我怎样才能得到这个信息
问候,,
Sascha检查IFF_运行接口怎么样?您好,我已经尝试过了(但删除了代码),因为我的机器上仍然有每个适配器,即每个适配器都有IF_运行标志。我还有一个问题:为什么我的适配器都没有AF_INET或AF_INET6标志?它们只有AF_链接标志。