1. 程式人生 > >ios 裝置所在網路IP地址獲取

ios 裝置所在網路IP地址獲取

一、獲取裝置的IP地址

1、方法一

#pragma mark - 獲取裝置當前網路IP地址
- (NSString *)getIPAddress:(BOOL)preferIPv4 {
    NSArray *searchArray = preferIPv4 ?
    @[ IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :
    @[ IOS_VPN @"/"
IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4, 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]; //篩選出IP地址格式 if([self isValidatIP:address]) *stop = YES; } ]; return address ? address : @"0.0.0.0"; } - (BOOL)isValidatIP:(NSString *)ipAddress { if (ipAddress.length == 0) { return NO; } NSString
*urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; NSError *error; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:&error]; if (regex != nil) { NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])]; if (firstMatch) { NSRange resultRange = [firstMatch rangeAtIndex:0]; NSString *result=[ipAddress substringWithRange:resultRange]; //輸出結果 NSLog(@"%@",result); return YES; } } return NO; } - (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; char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ]; if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) { NSString *name = [NSString stringWithUTF8String:interface->ifa_name]; NSString *type; if(addr->sin_family == AF_INET) { if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) { type = IP_ADDR_IPv4; } } else { const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr; if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) { type = IP_ADDR_IPv6; } } if(type) { NSString *key = [NSString stringWithFormat:@"%@/%@", name, type]; addresses[key] = [NSString stringWithUTF8String:addrBuf]; } } } // Free memory freeifaddrs(interfaces); } return [addresses count] ? addresses : nil; }

2、方法二

- (NSString *)deviceIPAdress{
    NSString *address = @"IP Error";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;
    success = getifaddrs(&interfaces);
    if (success == 0) {
        temp_addr = interfaces;
        while (temp_addr != NULL) {
            if (temp_addr->ifa_addr->sa_family == AF_INET) {
                if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }
            }
            temp_addr = temp_addr->ifa_next;
        }
    }
    freeifaddrs(interfaces);
    return address;
}

二、獲取Wifi名字

1、標頭檔案引用

#import <SystemConfiguration/CaptiveNetwork.h>

2、函式實現

+(NSString *) currentWifiSSID {
#if TARGET_OS_SIMULATOR
    return @"(simulator)";
#else
    NSArray *ifs = (__bridge id)CNCopySupportedInterfaces();

    id info = nil;
    for (NSString *ifnam in ifs) {
        info = (__bridge id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
        if (info && [info count]) {
            break;
        }
    }
    NSDictionary *dctySSID = (NSDictionary *)info;
    NSString *ssid = [dctySSID objectForKey:@"SSID"] ;

    return ssid;
#endif
}

相關推薦

ios 裝置所在網路IP地址獲取

一、獲取裝置的IP地址 1、方法一 #pragma mark - 獲取裝置當前網路IP地址 - (NSString *)getIPAddress:(BOOL)preferIPv4 { NSArray *searchArray = preferIPv4

獲取pool有的ip地址資訊

import sys import pycontrol.pycontrol as pc import time import csv import ssl ssl._create_default_https_context = ssl._create_unverified_context pool=

前端使用js根據ip地址獲取城市地理位置

                                  前端使用js根據ip地址獲取城市地理位置  

Swift3.0 Swift2.3 獲取IP地址 獲取閘道器地址

最近需要在Swift專案中獲取路由器的閘道器地址,在網上找了半天的程式碼也沒發現太多有價值的東西,而且大多都是OC程式碼,很少有Swift的相關程式碼,只找到了一個通過Swift程式碼獲取裝置IP的程式碼,最後實在沒辦法只能曲線救國了。 在路由器預設登入地址方面,主流品

根據ip地址獲取地理位置及座標

根據ip獲取地理位置資訊,不用http和webservice介面,減少請求時間。我們可以利用了GeoLite2 庫,GeoLite2 資料庫是一個免費的 IP 地理定位資料庫,GeoLite2 Country 與 City 資料庫在每月的第一個週二更新。GeoLite2 AS

設定網路IP地址

1.網路設定 (1)檢視網絡卡 ip addr show ( 同 ip addr ) 檢視裝置ip ifconfig eth0(裝置名) (2)常用的網路協議 ipv4 IPv4,是網際網路協議(Internet Protoc

解析js程式碼實現爬取頁面有的ip地址[面試題]

該網頁只有在重新整理時, 才能顯示後面的頁面, 且頁面會開啟新的頁面, 跳轉時需要的cookies, 由第一個頁面的cookies動態生成. 下面是具體程式碼: import requests import re import lxml.html class ExamSpider

Linux下網路IP地址的轉換函式 (轉)

網路IP地址本是用32位二進位制來表示的,為了記憶的方便可以用點分十進位制來表示IP地址,同時,網路IP地址在網路傳輸和計算機內部的儲存方式也不同,需要用函式來進行轉換。 1.將點分十進位制字串轉換成十進位制長整型數:in_addr_t inet_addr(const char *cp);       in_

計算機網路————IP地址分類以及網路地址的計算

一,IP地址分類   1.二進位制與十進位制的關係   2,IP地址的地址結構及分類 IP地址結構:網路號+主機號 網路號:中主機中指明中的所在物理網路的編號 主機號:中中中主機在物理網路中的編號   IP地址分類:A類(大型)

(2)如何配置Linux系統的網路IP地址---學習筆記

CentOS 7系統為例為大家介紹整個網路配置的過程。 一臺安裝了Linux系統的電腦如果想要聯網,首先要做的就是進行網路配置。 首先注意,路由閘道器處必須設定可以配置靜態IP或者使用指定IP繫結MAC才可以配置,否則配置不成功,不要盲目的配置. 再次以根使用者登入系統,

java根據ip地址獲取詳細地域資訊

網際網路有很多介面可以實現通過ip查詢到具體的位置,如下: 通過淘寶IP地址庫獲取IP位置 1. 請求介面(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串] 2. 響應資訊:(

通過ip地址獲取ip地址的區域資訊

return $res1['data']["country"].$res1['data'][ "region"].$res1['data']["city"]."_".$res1['data'][ "isp"];

iOS 非同步載入網路圖片,獲取圖片真實尺寸

專案需求: 在網路上載入一組圖片的資料,並且這組圖片要按照比例展示出來 做法分析: (1)首頁介面上要是使用的圖片控制元件的建立,這裡的高度是用設定的高度,這部分需要在主執行緒完成; (2)第二部部分是獲取圖片的實際尺寸,這部分線上程中完成; (3)然後需要在主執行緒重新整

java IP地址工具類,java IP地址獲取,java獲取客戶端IP地址

java IP地址工具類,java IP地址獲取,java獲取客戶端IP地址   ================================ ©Copyright 蕃薯耀 2019年1月11日 http://fanshuyao.iteye.com/   impo

雙網絡卡或多網絡卡情況下獲得有的IP地址

在編寫基於sock的網路程式時,有時需列舉系統中繫結的所有IP地址,在一般控制元件無法解決些問題的情況下,可使用如下方法一試:一、基於winsock的方法,例程如下(修改自網上一個名為“GetIP”的程式原始碼):// GetIP.cpp : Defines the entr

通過IP地址獲取對方MAC地址的命令

      要解決這個問題,首先我們應該知道,在底層的網路通訊中,兩個節點想要相互通訊,必須先要知道源與目標的MAC地址。為了讓系統能快速地找到一個遠端節點的MAC地址,每一個本地的核心都儲存有一個即時的查詢表 (稱為ARP快取)。ARP中有影射遠端主機的IP地址到其對應的M

網路IP地址總結學習

IPV4地址(共32位) = 網路號 + 主機號 分為三類地址,可以向NIC機構提出申請購買 A類:1.0.0.0-126.0.0.0 共有126個A類網路號,每個網路號有2^24-2 = 16777214個主機,也就是買一個A類網路號就相當於有了16777214個A類I

Android 根據IP地址獲取城市

manifest中要加的permission和activity_main.xml 參照上。 MainActivity.java package com.example.test; import java.util.List; import java.util.Loc

Linux Nginx 真實IP地址獲取(三)

    由於使用了nginx反向代理,所在使用普通的ip獲取方式,獲取到的ip很可能是nginx的ip地址,所以為了解決這個問題,在Linux Nginx 配置(二)中,我已經進行了真實IP的配置,接下來,我們在程式碼中使用以下程式碼即可public static Strin

IP地址獲取-PPPoE&DHCP

       PC獲取IP地址的方式有3種,手工配置、PPPoE獲取、DHCP獲取。PPPoE應用較多,DHCP在IPTV也有應用。  PPPoE撥號 包括PPPoE Discovery、PPPoE Session、PPPoE Terminate三個階段。 PPPoE Di