Search code examples
objective-cmacoscocoanetwork-programmingcore-foundation

How do I get the currently connected network interface name using Cocoa or Foundation?


I need to know the network interface name of the currently connected network interface, as in en0, lo0 and so on.

Is there a Cocoa/Foundation function that is going to give me this information?


Solution

  • You can cycle through network interfaces and get their names, IP addresses, etc.

    #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);
    

    There are many other flags and data in the above structures, I hope you will find what you are looking for.