(已過時储耐,待更新內(nèi)容,謝謝)iOS 獲取IP地址

因為項目中加入的第三方數(shù)據(jù)統(tǒng)計SDK中需要上傳IP地址滨溉,之前沒有接觸過IP地址上傳什湘,于是搜索了iOS中獲取設(shè)備ip地址的相關(guān)資料并加以整理形成本文。

獲取IP地址主要有以下兩種情況:

WIFI情況下獲取內(nèi)網(wǎng)IP地址:
// 需導(dǎo)入以下頭文件
#import <ifaddrs.h>
#import <arpa/inet.h>

// Get IP Address
- (NSString *)GetOurIpAddress {

    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;
}
WIFI情況下獲取外網(wǎng)IP地址 與 數(shù)據(jù)流量情況下獲取手機IP地址

上述兩種情況(WIFI下外網(wǎng)IP與數(shù)據(jù)下手機IP)皆可用下述代碼獲取IP

通過訪問搜狐的citySN獲取IP信息
-(NSDictionary *)deviceWANIPAdress{
    
    NSError *error;
    NSURL *ipURL = [NSURL URLWithString:@"http://pv.sohu.com/cityjson?ie=utf-8"];
    
    NSMutableString *ip = [NSMutableString stringWithContentsOfURL:ipURL encoding:NSUTF8StringEncoding error:&error];
    //判斷返回字符串是否為所需數(shù)據(jù)
    if ([ip hasPrefix:@"var returnCitySN = "]) {
        //對字符串進(jìn)行處理晦攒,然后進(jìn)行json解析
        //刪除字符串多余字符串
        NSRange range = NSMakeRange(0, 19);
        [ip deleteCharactersInRange:range];
        NSString * nowIp =[ip substringToIndex:ip.length-1];
        //將字符串轉(zhuǎn)換成二進(jìn)制進(jìn)行Json解析
        NSData * data = [nowIp dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        return dict;
    }
    return nil;
}

通過上面方法會返回一個包含IP信息的字典闽撤,信息內(nèi)容如下:

{
    // 郵政編碼
    cid = 350200;
    // IP
    cip = "211.97.130.169";
    // 地理信息
    cname = "\U798f\U5efa\U7701\U53a6\U95e8\U5e02";
}

Tips:

  • WIFI情況下獲取到的IP地址中的cname,一般情況下只有精確到省份脯颜,而數(shù)據(jù)流量情況下能精確到市
  • 上述兩種情況下獲取到的郵政編碼一致哟旗。
  • cname中的內(nèi)容以Unicode編碼的形式返回,如需使用還需處理
通過淘寶的getIpInfo服務(wù)獲取IP
-(NSDictionary *)deviceWANIPAdress{
    
    NSURL *ipURL = [NSURL URLWithString:@"http://ip.taobao.com/service/getIpInfo2.php?ip=myip"];
    
    NSData *data = [NSData dataWithContentsOfURL:ipURL];
    NSDictionary *ipDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    
    return ipDic;
}

通過上面方法會返回一個包含IP信息的字典栋操,信息內(nèi)容如下:

    {
        area = "";
        "area_id" = "";
        city = "\U53a6\U95e8";
        "city_id" = 350200;
        country = "\U4e2d\U56fd";
        "country_id" = CN;
        county = XX;
        "county_id" = xx;
        ip = "183.250.89.75";
        isp = "\U79fb\U52a8";
        "isp_id" = 100025;
        region = "\U798f\U5efa";
        "region_id" = 350000;
    }

相比之下闸餐,淘寶的IP信息返回多了些信息,如運營商等矾芙。其余并無太大差別舍沙,根據(jù)自己的需求任意選擇即可
Tips:網(wǎng)絡(luò)請求記得使用異步方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市剔宪,隨后出現(xiàn)的幾起案子拂铡,更是在濱河造成了極大的恐慌,老刑警劉巖葱绒,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件感帅,死亡現(xiàn)場離奇詭異,居然都是意外死亡地淀,警方通過查閱死者的電腦和手機失球,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帮毁,“玉大人她倘,你說我怎么就攤上這事∽鞴浚” “怎么了硬梁?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胞得。 經(jīng)常有香客問我荧止,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任跃巡,我火速辦了婚禮危号,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘素邪。我一直安慰自己外莲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布兔朦。 她就那樣靜靜地躺著偷线,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沽甥。 梳的紋絲不亂的頭發(fā)上声邦,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音摆舟,去河邊找鬼亥曹。 笑死,一個胖子當(dāng)著我的面吹牛恨诱,可吹牛的內(nèi)容都是我干的媳瞪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼照宝,長吁一口氣:“原來是場噩夢啊……” “哼材失!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硫豆,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤龙巨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后熊响,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旨别,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年汗茄,在試婚紗的時候發(fā)現(xiàn)自己被綠了秸弛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡洪碳,死狀恐怖递览,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞳腌,我是刑警寧澤绞铃,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站嫂侍,受9級特大地震影響儿捧,放射性物質(zhì)發(fā)生泄漏荚坞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一菲盾、第九天 我趴在偏房一處隱蔽的房頂上張望颓影。 院中可真熱鬧,春花似錦懒鉴、人聲如沸诡挂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽璃俗。三九已至,卻和暖如春吴裤,著一層夾襖步出監(jiān)牢的瞬間旧找,已是汗流浹背溺健。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工麦牺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鞭缭。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓剖膳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岭辣。 傳聞我的和親對象是個殘疾皇子吱晒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355