我一直在寻找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. 获取路由器的IP地址 - 非本地插件
- 2. 非路由的IP地址
- 3. 如何访问路由器内部网中的路由器全局IP地址?
- 4. glib从路由获得IP地址
- 5. 如何获取IP地址?
- 6. 如何获取IP地址?
- 7. 如何在PageMethod中获取IP地址?
- 8. 如何在Python中获取IP地址
- 9. 如何在Python3.4.3中获取ip地址
- 10. 如何获取服务器IP地址?
- 11. 如何使用C#获取IP地址的物理(MAC)地址?
- 12. 如何在Docker容器中获取本地主机IP地址?
- 13. 获取IP地址
- 14. 如何获取响应WebResponse的服务器的IP地址C#
- 15. 目标C:检索路由器地址?
- 16. 如何获取C#机器的IP地址
- 17. 获取IP地址的C代码
- 18. 获取IP地址
- 19. C#中获取LAN活动IP地址
- 20. 获取IP地址
- 21. 如何知道IP地址的路由器
- 22. 如何在.NET中获取服务器的IP地址?
- 23. 获取路由器的公共ip
- 24. 我该如何获得Objective-C中的programmaticaly本地域名知道ip地址?
- 25. 如何在C++中使用域名获取域名IP地址?
- 26. 如何在C++中获取外部IP地址?
- 27. 在vb.net获取IP地址
- 28. 获取ip地址的值
- 29. 如何获取系统的IP地址
- 30. 如何获取后端的IP地址?
http://stackoverflow.com/questions/3074 8480/swift-get-devices-ip-address – Shades
是否会给出wifi的路由器号码或手机的唯一IP地址? – Jared