views:

1513

answers:

5

How do I query the iPhone's current IP address?

A: 

Probably SCDynamicStore is deprecated, Xcode puts of following warning:

warning: 'SCDynamicStoreCreate' is deprecated (declared at /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.1.sdk/System/Library/Frameworks/SystemConfiguration.framework/Headers/SCDynamicStore.h:137)

Any other method to get IP address?

Regards Uddhalaka

Devara Gudda
A: 

This method only works when you have internet connection, it will be segmentation fault if you run this without network connection.

Spike
+1  A: 

You can try to use similar to this service: Whatismyip and capture the string :)

Credit to Erica Sadun's iPhone Developer's Cookbok, 2nd ed, page 555.

arifwidi
A: 

Check out http://stackoverflow.com/questions/677530/how-can-i-programmatically-get-the-mac-address-of-an-iphone

Don't know how private this API this is though.

stigi
A: 

If you want the external IP address (the one used to connect from outside the local network), you need to query a server on the external network. A quick search yielded the following: http://checkip.dyndns.org, http://www.whatismyip.com. It is quite simple to load the page using e.g.

[NSData dataWithContentsOfURL:url]

and do some string manipulation to retrieve the IP address.

If you want the internal IP address (the one assigned e.g. by DHCP to your device), what you can usually do is to resolve the device's hostname, i.e.


/*
Returns the local IP, or NULL on failure.
*/
const char* GetLocalIP() {
  char buf[256];
  if(gethostname(buf,sizeof(buf)))
    return NULL;
  struct hostent* he = gethostbyname(buf);
  if(!he)
    return NULL;
  for(int i=0; he->h_addr_list[i]; i++) {
    char* ip = inet_ntoa(*(struct in_addr*)he->h_addr_list[i]);
    if(ip != (char*)-1) return ip;
  }
  return NULL;
}
Krumelur