在Swift中获取当前活动的网络适配器

在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 }

我正在使用以下代码获取macOS系统的网络适配器:

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_链接标志。