iOS獲取當前裝置的資訊 網路相關

2021-09-11 12:42:32 字數 3975 閱讀 8697

最近在搞網路相關的sdk,將自己在專案中能夠開放出來的,記錄下來,其中很多用到了c,相當於乙個工具。後期還會選擇開放一些ping網路的工具,找鏈路節點的工具,最近就在搞這個。

文章也會同步更新到我的部落格:

ppsheep.com

對於公網的ip當然,在我們本地裝置上是不能夠獲取到的,至少我沒有找到方法獲取到出口ip位址,但是區域網的ip還是能夠獲取到的,這裡ipv4和ipv6 都能夠獲取出來

+ (nsstring *)deviceipadress

//如果是ipv6位址

else

if (temp_addr->ifa_addr->sa_family == af_inet6)

}temp_addr = temp_addr->ifa_next;}}

freeifaddrs(inte***ces);

//以fe80開始的位址是單播位址

if (address && ![address isequaltostring:@""] && ![address.uppercasestring hasprefix:@"fe80"]) else

}複製**

閘道器位址,通俗點 就是路由器的位址,也是相對於區域網 這裡需要區分一下ipv4和ipv6,兩種獲取閘道器位址的方法是不一樣

//ipv4閘道器位址

+ (nsstring *)getgatewayipv4address

; size_t l;

char *buf, *p;

struct rt_msghdr *rt;

struct sockaddr *sa;

struct sockaddr *sa_tab[rtax_max];

int i;

if (sysctl(mib, sizeof(mib) / sizeof(int), 0, &l, 0, 0) < 0)

if (l > 0)

for (p = buf; p < buf + l; p += rt->rtm_msglen) else

}if (((rt->rtm_addrs & (rta_dst | rta_gateway)) == (rta_dst | rta_gateway)) &&

sa_tab[rtax_dst]->sa_family == af_inet &&

sa_tab[rtax_gateway]->sa_family == af_inet) ;

int i;

for (i = 0; i < 4; i++)

if (((struct sockaddr_in *)sa_tab[rtax_dst])->sin_addr.s_addr == 0) }}

free(buf);

}return address;

}複製**

//ipv6閘道器位址

+ (nsstring *)getgatewayipv6address

; size_t l;

char *buf, *p;

struct rt_msghdr *rt;

struct sockaddr_in6 *sa;

struct sockaddr_in6 *sa_tab[rtax_max];

int i;

if (sysctl(mib, sizeof(mib) / sizeof(int), 0, &l, 0, 0) < 0)

if (l > 0)

for (p = buf; p < buf + l; p += rt->rtm_msglen) else

}if( ((rt->rtm_addrs & (rta_dst|rta_gateway)) == (rta_dst|rta_gateway))

&& sa_tab[rtax_dst]->sin6_family == af_inet6

&& sa_tab[rtax_gateway]->sin6_family == af_inet6)

}free(buf);

}return address;

}複製**

我們在獲取的時候判斷一下

/*!

* 獲取當前裝置閘道器位址

*/+ (nsstring *)getgatewayipaddress else

return address;

}複製**

通過網域名稱拿到的ip位址,一般來說,如果買了cdn的話,拿到的ip都會是多個ip

/*!

* 通過hostname獲取ip列表 dns解析位址

*/+ (nsarray *)getdnsswithdormain:(nsstring *)hostname

return [nsarray arraywitharray:result];

}+ (nsarray *)getdnswithhostname:(nsstring *)hostname

}bresolved = result;

nsmutablearray *ipaddresses = [nsmutablearray array];

if(bresolved)}}

cfrelease(hostnameref);

if (hostref)

return [nsarray arraywitharray:ipaddresses];

}複製**

如果是wifi環境,直接返回wifi 如果是蜂窩網路環境,那麼還可以區分到底是那個運營商,還可以區分是使用的什麼網路,4g 3g 2g等 運營商暫時區分了國內的三大運營商,如果還需要區分國外的,可以維基百科上查對應的code

+(nsstring *)currentnetinfo

nsstring *carriername = nil;

cttelephonynetworkinfo *netinfo = [[cttelephonynetworkinfo alloc] init];

ctcarrier *carrier = [netinfo subscribercellularprovider];

if (carrier != null) else

if ([chinatelecommics containsobject:mobilenetworkcode])else

if ([chinaunicommics containsobject:mobilenetworkcode])else

} else

switch (type)

return returnname;

}複製**

獲取當前裝置的資訊,是iphone 4 5 6 7還是 等等 還有系統的版本號 手機、平板

之類的都能夠去區分出來

/**

獲取裝置的型別

@return 裝置型別

*/+ (nsstring *)deviceinfo ;

}nsstring* devicename = [devicenamesbycode objectforkey:code];

if (!devicename)

else

if([code rangeofstring:@"ipad"].location != nsnotfound)

else

if([code rangeofstring:@"iphone"].location != nsnotfound)

else

}uidevice *device = [uidevice currentdevice];

nsstring *systemversion = [device systemversion];

return [nsstring stringwithformat:@"ios#%@#%@",devicename,systemversion];

}複製**

效果:

ios 獲取裝置相關的資訊

1 獲取裝置的資訊 uidevice device uidevice alloc int nsstring name device.name 獲取裝置所有者的名稱 nsstring model device.name 獲取裝置的類別 nsstring type device.localizedmod...

政務系統資訊網路安全的風險評估如何做?

數位化時代,政務系統的資訊網路安全問題需要得到更多地重視。網際網路 給人們的生活帶來了極大的便利,面對高速發展的網際網路,人們對其的認同度在日益增加。但是,互聯開放的網路,資源交流便捷的同時,資訊洩漏的隱患在逐漸加劇。尤其是與民生息息相關的政務部門。要知道,政務系統資訊網路的安全與否,直接對政務資訊...

ios 取裝置語言 在iOS中獲取當前的裝置語言?

所提供的解決方案實際上將返回裝置的當前區域,而不是當前選擇的語言。這些通常是一樣的。然而,如果我在北美,我把我的語言設定為日語,我的地區仍將是英語 美國 為了檢索當前選擇的語言,您可以 nsstring language nslocale preferredlanguages objectatind...