1

Objective-CでデフォルトゲートウェイのIPアドレスとMACアドレスを取得するにはどうすればよいですか?

今のところ、それを使った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-way」はありますか?使用せずにarpa/inet.h?例?

ありがとうございました。

4

1 に答える 1

1

この回答は、OSX 上のインターフェイスの MAC アドレスを取得する方法を説明しています。

デフォルト ゲートウェイはルーティング テーブルに登録されており、ネットワーク インターフェイスには直接関連付けられていません。注意が必要なのはデフォルトゲートウェイ (つまり、0.0.0.0 のゲートウェイ) だけではなく、より制限されたアドレス範囲に設定されたルーターが存在する可能性があることに注意してください。(また、異なる優先度を持つ複数のゲートウェイ、デフォルトまたはそれ以外の場合があります)

ルーティング テーブルはroute(4)マンページに記載されています。アプリでルーティング テーブルを取得するための十分な情報が得られることを願っています。

于 2012-06-12T17:23:14.383 に答える