2011-03-27 68 views
6

我查找了一些代碼,這些代碼可以幫助我獲取iphone連接的IP。如何在目標c中獲取外部IP

我覺得這是一個:

- (NSString *)getIPAddress 
{ 
    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 is en0 which is the wifi connection on the iPhone 
       if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) 
       { 
        // 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; 
     } 
    } 

    // Free memory 
    freeifaddrs(interfaces); 

    return address; 
} 

但問題是,他讓我這個IP 10.0.0.1

存在有關獲取外部IP的任何物品\代碼。

謝謝

+4

你期待什麼樣的IP地址?該設備可能會通過WiFi或3G網絡等,因此您不可能檢索任何形式的有意義的「外部」IP地址。 – 2011-03-27 16:42:56

+0

Middaparka是正確的 - 從設備的角度來看,10.0.0.1 *是*其外部IP地址。 – 2011-03-27 17:43:34

回答

4

,讓您的互聯網IP地址從代碼使用NSURLConnection最簡單的方法。

對於URL,您可以使用: http://www.whatismyip.com/m/mobile.asphttp://checkip.dyndns.com/

就解析返回的數據,你有你的外部IP地址。

+1

我喜歡它。不是很多prod應用程序,但偉大的調試。 +1 – Bastek 2012-06-25 16:05:33

+0

除非你有10米的DAU並且每次發佈都會打電話給你,那麼你真的需要爲WhatIsMyIP.com花費很多帶寬資源來實現一些本地功能。 :○ – 2015-12-18 06:29:48

1

檢查蘋果的PortMapper,不正是你想要的。

從iOS7開始,這是無關緊要的。

+0

PortMapper適用於「運行時要求:Mac OS X 10.5」 – 2011-03-27 17:12:45

+0

我正在將它用於我的iPhone應用程序。 – ssteinberg 2011-03-27 17:26:42

+0

您是否需要對iOS設備進行任何代碼更改? – 2011-03-27 17:31:19