Nano Hash - криптовалюты, майнинг, программирование

Как получить имя текущего подключенного сетевого интерфейса с помощью Cocoa или Foundation?

Мне нужно знать имя сетевого интерфейса подключенного в данный момент сетевого интерфейса, например, en0, lo0 и так далее.

Есть ли функция Cocoa/Foundation, которая предоставит мне эту информацию?


Ответы:


1

Вы можете просмотреть сетевые интерфейсы и получить их имена, IP-адреса и т. д.

#include <ifaddrs.h>
// you may need to include other headers

struct ifaddrs* interfaces = NULL;
struct ifaddrs* temp_addr = NULL;

// retrieve the current interfaces - returns 0 on success
NSInteger success = getifaddrs(&interfaces);
if (success == 0)
{
    // Loop through linked list of interfaces
    temp_addr = interfaces;
    while (temp_addr != NULL)
    {
      if (temp_addr->ifa_addr->sa_family == AF_INET) // internetwork only
      {
        NSString* name = [NSString stringWithUTF8String:temp_addr->ifa_name];
        NSString* address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
        NSLog(@"interface name: %@; address: %@", name, address);
      }

      temp_addr = temp_addr->ifa_next;
    }
}

// Free memory
freeifaddrs(interfaces);

В приведенных выше структурах есть много других флагов и данных, надеюсь, вы найдете то, что ищете.

07.11.2012
  • Хорошо, проверим это и сообщим здесь. 08.11.2012

  • 2

    Поскольку iOS работает немного иначе, чем OSX, нам повезло использовать следующий код, основанный на ответе Дэвида, чтобы увидеть имена всех доступных сетевых интерфейсов на iPhone: (также см. здесь полную документацию по ifaddrs)

    #include <ifaddrs.h>
    
    struct ifaddrs* interfaces = NULL;
    struct ifaddrs* temp_addr = NULL;
    
    // retrieve the current interfaces - returns 0 on success
    NSInteger success = getifaddrs(&interfaces);
    if (success == 0)
    {
        // Loop through linked list of interfaces
        temp_addr = interfaces;
        while (temp_addr != NULL)
        {
                NSString* name = [NSString stringWithUTF8String:temp_addr->ifa_name];
                NSLog(@"interface name: %@", name);
    
            temp_addr = temp_addr->ifa_next;
        }
    }
    
    // Free memory
    freeifaddrs(interfaces);
    
    02.12.2013

    3

    В качестве альтернативы вы также можете использовать if_indextoname() для получения доступных имен интерфейсов. Вот как будет выглядеть реализация Swift:

    public func interfaceNames() -> [String] {
    
        let MAX_INTERFACES = 128;
    
        var interfaceNames = [String]()
        let interfaceNamePtr = UnsafeMutablePointer<Int8>.alloc(Int(IF_NAMESIZE))
        for interfaceIndex in 1...MAX_INTERFACES {
            if (if_indextoname(UInt32(interfaceIndex), interfaceNamePtr) != nil){
                if let interfaceName = String.fromCString(interfaceNamePtr) {
                    interfaceNames.append(interfaceName)
                }
            } else {
                break
            }
        }
    
        interfaceNamePtr.dealloc(Int(IF_NAMESIZE))
        return interfaceNames
    }
    
    17.01.2016

    4

    Пример кода @ambientlight перенесен на iOS 13:

    public func interfaceNames() -> [String] {
    
            let MAX_INTERFACES = 128;
    
            var interfaceNames = [String]()
            let interfaceNamePtr = UnsafeMutablePointer<Int8>.allocate(capacity: Int(Int(IF_NAMESIZE)))
            for interfaceIndex in 1...MAX_INTERFACES {
                if (if_indextoname(UInt32(interfaceIndex), interfaceNamePtr) != nil){
                    let interfaceName = String(cString: interfaceNamePtr)
                    interfaceNames.append(interfaceName)
                } else {
                    break
                }
            }
    
            interfaceNamePtr.deallocate()
            return interfaceNames
        }
    

    Скорее всего, происходит утечка памяти. Используйте с осторожностью.

    Вывод:

    ▿ 20 elements
      - 0 : "lo0"
      - 1 : "pdp_ip0"
      - 2 : "pdp_ip1"
      - 3 : "pdp_ip2"
      - 4 : "pdp_ip3"
      - 5 : "pdp_ip5"
      - 6 : "pdp_ip4"
      - 7 : "pdp_ip6"
      - 8 : "pdp_ip7"
      - 9 : "ap1"
      - 10 : "en0"
      - 11 : "en1"
      - 12 : "en2"
      - 13 : "ipsec0"
      - 14 : "ipsec1"
      - 15 : "ipsec2"
      - 16 : "ipsec3"
      - 17 : "awdl0"
      - 18 : "utun0"
      - 19 : "utun1"
    
    02.02.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..