К моему MAC подключены и Ethernet, и Wi-Fi. Как я могу узнать, откуда я подключаюсь к Интернету?

macos

60 просмотра

1 ответ

125 Репутация автора

Когда я подключен к Ehernet и Wi-Fi. Я получу два IP-адреса, назначенных интерфейсам, скажем, en0 и en1. Используя команду оболочки, я достигаю этого, получая текущий интерфейс маршрута route get default | grep interface | awk '{print $2}' и затем сравнивая с порядком сетевых услуг networksetup -listnetworkserviceorder

Есть ли какие-либо рамки в MAC, которые помогают нам знать текущий используемый интерфейс. Так что я могу программно сделать это в target-c

Автор: Sowjanya lankisetty Источник Размещён: 15.07.2016 02:36

Ответы (1)


1 плюс

624 Репутация автора

Решение

Мы можем получить текущий интерфейс, используя код ниже

- (NSString*)defaultRouter {

    SCDynamicStoreRef ds = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("myApplication"), NULL, NULL);
    CFDictionaryRef dr6 = SCDynamicStoreCopyValue(ds, CFSTR("State:/Network/Global/IPv6"));
    CFDictionaryRef dr4 = SCDynamicStoreCopyValue(ds, CFSTR("State:/Network/Global/IPv4"));
    if(dr6)
      {
        CFStringRef router = CFDictionaryGetValue(dr6, CFSTR("PrimaryInterface"));
        NSString *routerString = [NSString stringWithString:(__bridge NSString *)router];
        self.primaryInterface=routerString;
           return self.primaryInterface;
                CFRelease(dr6);

      }
    else if(dr4)
      {

        CFStringRef router = CFDictionaryGetValue(dr4, CFSTR("PrimaryInterface"));
        NSString *routerString = [NSString stringWithString:(__bridge NSString *)router];
        NSLog(@"%@", routerString);
        self.primaryInterface=routerString;
           return self.primaryInterface;
                CFRelease(dr4);
      }
    CFRelease(ds);
    return 0;

  }

После получения основного интерфейса используйте его для получения адаптера typr (Wi-Fi или Ethernet).

SCNetworkInterfaceGetLocalizedDisplayName(primaryInterface) 
Автор: MacDeveloper Размещён: 29.07.2016 05:55
Вопросы из категории :
32x32