Several methods are defined to obtain the IP address of the iphone. IPAdress. h [cpp] # define MAXADDRS 32 extern char * if_names [MAXADDRS]; extern char * ip_names [MAXADDRS]; extern char * hw_addrs [MAXADDRS]; extern unsigned long ip_addrs [MAXADDRS]; // Function prototypes void InitAddresses (); void FreeAddresses (); void GetIPAddresses (); void GetHWAddresses (); IPAddress. c [c-sharp] # include <stdio. h> # include <stdlib. h> # include <string. h> # include <unistd. h> # include <sy S/ioctl. h> # include <sys/types. h> # include <sys/socket. h> # include <netinet/in. h> # include <netdb. h> # include <arpa/inet. h> # include <sys/sockio. h> # include <net/if. h> # include <errno. h> # include <net/if_dl.h> # include "GetAddresses. h "# define min (a, B) (a) <(B )? (A): (B) # define max (a, B) (a)> (B )? (A): (B) # define BUFFERSIZE 4000 char * if_names [MAXADDRS]; char * ip_names [MAXADDRS]; char * hw_addrs [MAXADDRS]; unsigned long ip_addrs [MAXADDRS]; static int nextAddr = 0; void InitAddresses () {int I; for (I = 0; I <MAXADDRS; ++ I) {if_names [I] = ip_names [I] = hw_addrs [I] = NULL; ip_addrs [I] = 0 ;}} void FreeAddresses () {int I; for (I = 0; I <MAXADDRS; ++ I) {if (if_names [I]! = 0) free (if_names [I]); if (ip_names [I]! = 0) free (ip_names [I]); if (hw_addrs [I]! = 0) free (hw_addrs [I]); ip_addrs [I] = 0;} InitAddresses ();} void GetIPAddresses () {int I, len, flags; char buffer [BUFFERSIZE], * ptr, lastname [IFNAMSIZ], * cptr; struct ifconf ifc; struct ifreq * ifr, ifrcopy; struct sockaddr_in * sin; char temp [80]; int sockfd; for (I = 0; I <MAXADDRS; ++ I) {if_names [I] = ip_names [I] = NULL; ip_addrs [I] = 0 ;} sockfd = socket (AF_INET, SOCK_DGRAM, 0); if (sockfd <0) {Perror ("socket failed"); return;} ifc. ifc_len = BUFFERSIZE; ifc. ifc_buf = buffer; if (ioctl (sockfd, SIOCGIFCONF, & ifc) <0) {perror ("ioctl error"); return;} lastname [0] = 0; for (ptr = buffer; ptr <buffer + ifc. ifc_len;) {ifr = (struct ifreq *) ptr; len = max (sizeof (struct sockaddr), ifr-> ifr_addr.sa_len); ptr + = sizeof (ifr-> ifr_name) + len; // for next one in buffer if (ifr-> ifr_addr.sa_fa Mily! = AF_INET) {continue; // ignore if not desired address family} if (cptr = (char *) strchr (ifr-> ifr_name ,':'))! = NULL) {* cptr = 0; // replace colon will null} if (strncmp (lastname, ifr-> ifr_name, IFNAMSIZ) = 0) {continue; /* already processed this interface */} memcpy (lastname, ifr-> ifr_name, IFNAMSIZ); ifrcopy = * ifr; ioctl (sockfd, SIOCGIFFLAGS, & ifrcopy); flags = ifrcopy. ifr_flags; if (flags & IFF_UP) = 0) {continue; // ignore if interface not up} if_names [nextAddr] = (char *) malloc (strlen (ifr-> I Fr_name) + 1); if (if_names [nextAddr] = NULL) {return;} strcpy (if_names [nextAddr], ifr-> ifr_name); sin = (struct sockaddr_in *) & ifr-> ifr_addr; strcpy (temp, inet_ntoa (sin-> sin_addr); ip_names [nextAddr] = (char *) malloc (strlen (temp) + 1 ); if (ip_names [nextAddr] = NULL) {return;} strcpy (ip_names [nextAddr], temp); ip_addrs [nextAddr] = sin-> sin_addr.s_addr; ++ nextAddr ;} close (sockfd);} void GetHWA Ddresses () {struct ifconf ifc; struct ifreq * ifr; int I, sockfd; char buffer [BUFFERSIZE], * cp, * cplim; char temp [80]; for (I = 0; I <MAXADDRS; ++ I) {hw_addrs [I] = NULL;} sockfd = socket (AF_INET, SOCK_DGRAM, 0); if (sockfd <0) {perror ("socket failed"); return;} ifc. ifc_len = BUFFERSIZE; ifc. ifc_buf = buffer; if (ioctl (sockfd, SIOCGIFCONF, (char *) & ifc) <0) {perror ("ioctl error"); close (sockfd); Return;} ifr = ifc. ifc_req; cplim = buffer + ifc. ifc_len; for (cp = buffer; cp <cplim;) {ifr = (struct ifreq *) cp; if (ifr-> ifr_addr.sa_family = AF_LINK) {struct sockaddr_dl * sdl = (struct sockaddr_dl *) & ifr-> ifr_addr; int a, B, c, d, e, f; int I; strcpy (temp, (char *) ether_ntoa (LLADDR (sdl); sscanf (temp, "% x: % x", &, & B, & c, & d, & e, & f); sprintf (temp, "% 02X: % 02X: % 02X: % 02X: % 02X: % 02X", A, B, c, d, e, f); for (I = 0; I <MAXADDRS; ++ I) {if (if_names [I]! = NULL) & (strcmp (ifr-> ifr_name, if_names [I]) = 0) {if (hw_addrs [I] = NULL) {hw_addrs [I] = (char *) malloc (strlen (temp) + 1); strcpy (hw_addrs [I], temp); break ;}}}} cp + = sizeof (ifr-> ifr_name) + max (sizeof (ifr-> ifr_addr), ifr-> ifr_addr.sa_len);} close (sockfd);} how to use it, in MyAppAppDelegate. in h, [c-sharp] # import <UIKit/UIKit. h> @ interface MyAppAppDelegate: NSObject <UIApplicationDelegate> {NSString * localIP;} @ property (nonatomic, retain) NSString * localIP;-(NSString *) deviceIPAdress; @ end MyAppDelegate. m [c-sharp]-(void) applicationDidFinishLaunching :( UIApplication *) application {self. localIP = [self deviceIPAdress];...} -(NSString *) deviceIPAdress {InitAddresses (); GetIPAddresses (); GetHWAddresses ();/* int I; NSString * deviceIP; for (I = 0; I <MAXADDRS; ++ I) {static unsigned long localHost = 0x7F000001; // 127.0.0.1 unsigned long theAddr; theAddr = ip_addrs [I]; if (theAddr = 0) break; if (theAddr = localHost) continue; NSLog (@ "% s/n", if_names [I], hw_addrs [I], ip_names [I]);} deviceIP = [NSString stringWithFormat: @ "% s", ip_names [I]; * // this will get you the right IP from your device in format like 198.111.222.444. if you use the for loop above you will se that ip_names array will also contain localhost IP 127.0.0.1 that's why I don't use it. eventualy this was code from mac that's why it uses arrays for ip_names as macs can have multiple IPs return [NSString stringWithFormat: @ "% s", ip_names [1];}