iOS獲取WIFI配置資訊,WIFI名稱、閘道器(路由器地址)、本機IP地址、DNS
阿新 • • 發佈:2018-11-09
DEMO地址(看程式碼,什麼就都有了):https://github.com/SimpleBraver/test_wifi.git
1、獲取當前手機WIFI名稱資訊
#import <SystemConfiguration/CaptiveNetwork.h>
//iOS獲取當前手機WIFI名稱資訊
-(NSString *)fetchSSIDInfo
{
NSString *currentSSID = @"Not Found";
CFArrayRef myArray = CNCopySupportedInterfaces();
if (myArray != nil){
NSDictionary* myDict = (__bridge NSDictionary *) CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
if (myDict!=nil){
currentSSID=[myDict valueForKey:@"SSID"];
/* myDict包含資訊:
{
BSSID = "ac:29:3a:99:33:45";
SSID = "三千";
SSIDDATA = <e4b889e5 8d83>;
}
*/
} else {
[email protected]"<<NONE>>";
}
} else {
[email protected]"<<NONE>>";
}
CFRelease(myArray);
return currentSSID;
}
2、獲取閘道器、本機地址、子網掩碼等資訊
注意:需要先引入getgateway.h (DEMO裡面有)
//獲取閘道器資訊 #import <arpa/inet.h> #import <netinet/in.h> #import <ifaddrs.h> #import "getgateway.h" //獲取閘道器等資訊 - (NSString *)getGatewayIpForCurrentWiFi { 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) { 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"]) { address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; NSLog(@"本機地址:%@",address); //routerIP----192.168.1.255 廣播地址 NSLog(@"廣播地址:%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)]); //--192.168.1.106 本機地址 NSLog(@"本機地址:%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]); //--255.255.255.0 子網掩碼地址 NSLog(@"子網掩碼地址:%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr)]); //--en0 介面 // en0 Ethernet II protocal interface // et0 802.3 protocal interface // ent0 Hardware device interface NSLog(@"介面名:%@",[NSString stringWithUTF8String:temp_addr->ifa_name]); } } temp_addr = temp_addr->ifa_next; } } freeifaddrs(interfaces); in_addr_t i = inet_addr([address cStringUsingEncoding:NSUTF8StringEncoding]); in_addr_t* x = &i; unsigned char *s = getdefaultgateway(x); NSString *ip=[NSString stringWithFormat:@"%d.%d.%d.%d",s[0],s[1],s[2],s[3]]; free(s); return ip; }
3、獲取DNS伺服器地址
Xcode中新增libresolv.dylib
// 獲取DNS
#import <resolv.h>
// 獲取本機DNS伺服器
- (NSString *)outPutDNSServers
{
res_state res = malloc(sizeof(struct __res_state));
int result = res_ninit(res);
NSMutableArray *dnsArray = @[].mutableCopy;
if ( result == 0 )
{
for ( int i = 0; i < res->nscount; i++ )
{
NSString *s = [NSString stringWithUTF8String : inet_ntoa(res->nsaddr_list[i].sin_addr)];
[dnsArray addObject:s];
}
}
else{
NSLog(@"%@",@" res_init result != 0");
}
res_nclose(res);
return dnsArray.firstObject;
}
原文:https://blog.csdn.net/u011439689/article/details/79571023