2012-06-12 5 views
1

Как я могу получить свой IP-адрес и MAC-адрес шлюза по умолчанию в Objective-C?Objective-C: получить информацию о шлюзе по умолчанию

Прямо сейчас, я смог сделать функцию, чтобы получить IP-адрес, который использует arpa/inet.h, он отлично работает, но я не знаю, как получить IP-адрес и MAC-адрес шлюза по умолчанию.

NSString* GetMyIP(NSString* inf) { 
    NSString *address = @"error"; 
    struct ifaddrs *interfaces = NULL; 
    struct ifaddrs *temp_addr = NULL; 
    int success = 0; 

    // retrieve the current interfaces - returns 0 on success 
    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) 
      { 
       // Check if interface! 
       if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:inf]) 
       { 
        // Get NSString from C String 
        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 
       } 
      } 
      temp_addr = temp_addr->ifa_next; 
     } 
    } 

    freeifaddrs(interfaces); 
    return address; 
} 

Я использовал arp и netstat на некоторое время, но они не всегда работают, как и ожидалось, и, как вы могли бы понять рискованные решения ...

Есть еще более «Apple-путь», чтобы получить этот вид информации? Без использования arpa/inet.h? Примеры?

спасибо.

ответ

1

This answer объясняет, как получить MAC-адрес для интерфейса на OSX.

Шлюз по умолчанию зарегистрирован в таблице маршрутизации - не связан напрямую с сетевым интерфейсом. Обратите внимание, что шлюз по умолчанию (т. Е. Шлюз для 0.0.0.0), вероятно, не единственный, о котором вам нужно заботиться, возможно, маршрутизаторы настроены для более ограниченных диапазонов адресов. (также могут быть несколько шлюзов, по умолчанию или по-другому, с разными приоритетами)

Таблица маршрутизации задокументирована в route(4) manpage - это, надеюсь, даст вам достаточно информации для извлечения таблицы маршрутизации в вашем приложении.

+0

Я ищу свой MAC-адрес по умолчанию, не мой собственный ... Спасибо, в любом случае. – TCB13

+0

А, я вижу. После того, как у вас есть IP-адрес шлюза, вам действительно нужно будет пройти через ARP. – pmdj

+0

Я замечаю, что на терминале arp дает мне другой MAC из сообщения, сообщенного маршрутизатором ... странно: S. – TCB13