我一直在尋找StackOverflow,但我還沒有找到一種方法來在iOS中以編程方式獲取Wifi路由器IP地址。這可能嗎?如果是這樣,我該如何去做呢?如何在Objective C中獲取路由器的IP地址?
1
A
回答
2
#include <stdio.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <string.h>
#include <arpa/inet.h>
#if TARGET_IPHONE_SIMULATOR
#include <net/route.h>
#else
#include "route.h"
#endif
#define CTL_NET 4 /* network, see socket.h */
#if defined(BSD) || defined(__APPLE__)
#define ROUNDUP(a) \
((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
static int getdefaultgateway(in_addr_t * addr)
{
int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET,
NET_RT_FLAGS, RTF_GATEWAY};
size_t l;
char * buf, * p;
struct rt_msghdr * rt;
struct sockaddr * sa;
struct sockaddr * sa_tab[RTAX_MAX];
int i;
int r = -1;
if(sysctl(mib, sizeof(mib)/sizeof(int), 0, &l, 0, 0) < 0) {
return -1;
}
if(l>0) {
buf = malloc(l);
if(sysctl(mib, sizeof(mib)/sizeof(int), buf, &l, 0, 0) < 0) {
return -1;
}
for(p=buf; p<buf+l; p+=rt->rtm_msglen) {
rt = (struct rt_msghdr *)p;
sa = (struct sockaddr *)(rt + 1);
for(i=0; i<RTAX_MAX; i++) {
if(rt->rtm_addrs & (1 << i)) {
sa_tab[i] = sa;
sa = (struct sockaddr *)((char *)sa + ROUNDUP(sa->sa_len));
} else {
sa_tab[i] = NULL;
}
}
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) {
if(((struct sockaddr_in *)sa_tab[RTAX_DST])->sin_addr.s_addr == 0) {
char ifName[128];
if_indextoname(rt->rtm_index,ifName);
if(strcmp("en0",ifName)==0){
*addr = ((struct sockaddr_in *)(sa_tab[RTAX_GATEWAY]))->sin_addr.s_addr;
r = 0;
}
}
}
}
free(buf);
}
return r;
}
static NSString* routerIP()
{
struct in_addr gatewayaddr;
int r = getdefaultgateway(&(gatewayaddr.s_addr));
if (r >= 0) {
return [NSString stringWithFormat: @"%s",inet_ntoa(gatewayaddr)];
}
return nil;
}
#endif
從https://stackoverflow.com/a/9173849/4069848
UPDATE extected:條件編譯爲route.h
UPDATE:如果你想獲得一個特定的接口的網關,只需更改界面名此行:
if(strcmp("en0",ifName)==0){
相關問題
- 1. 如何在Objective-C中查找路由器的IP地址?
- 2. 路由器和IP地址
- 3. 獲取路由器的IP地址 - 非本地插件
- 4. 獲取iPhone連接的路由器的IP地址
- 5. 非路由的IP地址
- 6. 獲取IP地址C#
- 7. 如何訪問路由器內部網中的路由器全局IP地址?
- 8. IP地址和WI-FI路由器
- 9. 在Objective-C中獲取MAC地址
- 10. glib從路由獲得IP地址
- 11. 如何獲取IP地址?
- 12. 如何獲取IP地址?
- 13. 在C#中獲取IP地址
- 14. 如何在PageMethod中獲取IP地址?
- 15. 如何在Python3.4.3中獲取ip地址
- 16. 如何在Python中獲取IP地址
- 17. 如何獲取服務器IP地址?
- 18. 如何使用C#獲取IP地址的物理(MAC)地址?
- 19. 如何獲取node.js中的IP地址
- 20. 如何獲得IP地址的路徑
- 21. 如何獲取響應WebResponse的服務器的IP地址C#
- 22. 如何在Docker容器中獲取本地主機IP地址?
- 23. 獲取IP地址
- 24. 目標C:檢索路由器地址?
- 25. 如何在C#中獲取用戶的公共IP地址
- 26. 如何獲取C#機器的IP地址
- 27. 獲取IP地址的C代碼
- 28. 使用Bonjour提取iPhone連接的路由器的IP地址
- 29. 獲取IP地址
- 30. C#中獲取LAN活動IP地址
http://stackoverflow.com/questions/3074 8480/swift-get-devices-ip-address – Shades
是否會給出wifi的路由器號碼或手機的唯一IP地址? – Jared