最近在搞網路相關的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...