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