獲取IP地址

//需導(dǎo)入的頭文件

#import <CommonCrypto/CommonDigest.h>

#include <ifaddrs.h>

#include <arpa/inet.h>

#include <net/if.h>

#define IOS_CELLULAR    @"pdp_ip0"

#define IOS_WIFI        @"en0"

#define IP_ADDR_IPv4    @"ipv4"

#define IP_ADDR_IPv6    @"ipv6"

//.h

+ (NSString *)getIPAddress;

+ (NSString *)getIPAddress:(BOOL)preferIPv4;

+ (NSDictionary *)getIPAddresses;

//.m

+ (NSString *)getIPAddress {

[self getIPAddress:YES];

}

+ (NSString *)getIPAddress:(BOOL)preferIPv4

{

NSArray *searchArray = preferIPv4 ?

@[ IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :

@[ IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;

NSDictionary *addresses = [self getIPAddresses];

//NSLog(@"addresses: %@", addresses);

__block NSString *address;

[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)

{

address = addresses[key];

if(address) *stop = YES;

} ];

return address ? address : @"0.0.0.0";

}

+ (NSDictionary *)getIPAddresses

{

NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];

// retrieve the current interfaces - returns 0 on success

struct ifaddrs *interfaces;

if(!getifaddrs(&interfaces)) {

// Loop through linked list of interfaces

struct ifaddrs *interface;

for(interface=interfaces; interface; interface=interface->ifa_next) {

if(!(interface->ifa_flags & IFF_UP) || (interface->ifa_flags & IFF_LOOPBACK)) {

continue; // deeply nested code harder to read

}

const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;

if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {

NSString *name = [NSString stringWithUTF8String:interface->ifa_name];

char addrBuf[INET6_ADDRSTRLEN];

if(inet_ntop(addr->sin_family, &addr->sin_addr, addrBuf, sizeof(addrBuf))) {

NSString *key = [NSString stringWithFormat:@"%@/%@", name, addr->sin_family == AF_INET ? IP_ADDR_IPv4 : IP_ADDR_IPv6];

addresses[key] = [NSString stringWithUTF8String:addrBuf];

}

}

}

// Free memory

freeifaddrs(interfaces);

}

// The dictionary keys have the form "interface" "/" "ipv4 or ipv6"

return [addresses count] ? addresses : nil;

} 

謝謝閱讀!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哟绊,更是在濱河造成了極大的恐慌斜做,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舷夺,死亡現(xiàn)場離奇詭異催蝗,居然都是意外死亡切威,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門生逸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牢屋,“玉大人,你說我怎么就攤上這事槽袄。” “怎么了锋谐?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵遍尺,是天一觀的道長。 經(jīng)常有香客問我涮拗,道長乾戏,這世上最難降的妖魔是什么迂苛? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮鼓择,結(jié)果婚禮上三幻,老公的妹妹穿的比我還像新娘。我一直安慰自己呐能,他們只是感情好念搬,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摆出,像睡著了一般朗徊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偎漫,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天爷恳,我揣著相機(jī)與錄音,去河邊找鬼象踊。 笑死温亲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杯矩。 我是一名探鬼主播栈虚,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菊碟!你這毒婦竟也來了节芥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤逆害,失蹤者是張志新(化名)和其女友劉穎头镊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魄幕,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡相艇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纯陨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坛芽。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖翼抠,靈堂內(nèi)的尸體忽然破棺而出咙轩,到底是詐尸還是另有隱情,我是刑警寧澤阴颖,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布活喊,位于F島的核電站,受9級特大地震影響量愧,放射性物質(zhì)發(fā)生泄漏钾菊。R本人自食惡果不足惜帅矗,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煞烫。 院中可真熱鬧浑此,春花似錦、人聲如沸滞详。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茵宪。三九已至最冰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稀火,已是汗流浹背暖哨。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留凰狞,地道東北人篇裁。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像赡若,于是被迫代替她去往敵國和親达布。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容