在IPhone上获取DNS服务器IP

问题描述 投票:3回答:2

我正在尝试使用libresolv框架获取我的DNS服务器IP,但我得到的只是“0.0.0.0”

-(void) getDns
{
    res_init();

    for (int i=0;i<MAXNS;i++)
    {       
        printf("%s",inet_ntoa(_res.nsaddr_list[i].sin_addr));

    }
}

我的代码有什么问题吗?

谢谢

编辑

试图在SO的其他问题中使用代码,但这是我在主机是“apple.com”时得到的

2011-03-16 15:07:21.689 MobileMax[5876:207] RESOLVED 0:<17.149.160.49>
2011-03-16 15:07:21.691 MobileMax[5876:207] RESOLVED 1:<17.251.200.70>
2011-03-16 15:07:21.691 MobileMax[5876:207] RESOLVED 2:<17.112.152.57>

在运行命令时:cat /etc/resolv.conf我得到nameserver 10.0.0.138这就是我想要的。

知道怎么做到吗?

Aaditi

我也试过这个,但仍然得到了“0.0.0.0”的回复。

u_char buf[NS_PACKETSZ];
int responseLen;             

    res_query("www.google.com",ns_c_in,ns_t_ns,buf,sizeof(buf));
iphone objective-c cocoa-touch
2个回答
0
投票

你没有解决任何问题,你只是打印存储在某个变量中的地址。你实际上需要调用res_queryres_search。但是在iOS上,你最好使用CFHost *方法,比如this question。还有sample code from Apple(搜索MyResolveNameToAddress函数)。

理解问题后更新:根据this question,您无法访问/etc/resolv.conf文件(权限)。但根据this question你可能会成功使用SystemConfigFramework,但我不知道它是否适用于iOS(框架存在,但是这些信息是否暴露,我不知道)。


0
投票

尝试下面的代码来获取DNS服务器地址。不要忘记链接libresolv.lib

    #include <arpa/inet.h>
    #include <ifaddrs.h>
    #include <resolv.h>
    #include <dns.h>

    - (NSString *) getDNSServers
    {
    // dont forget to link libresolv.lib
    NSMutableString *addresses = [[NSMutableString alloc]initWithString:@"DNS Addresses \n"];

    res_state res = malloc(sizeof(struct __res_state));

    int result = res_ninit(res);

    if ( result == 0 )
    {
        for ( int i = 0; i < res->nscount; i++ )
        {
            NSString *s = [NSString stringWithUTF8String :  inet_ntoa(res->nsaddr_list[i].sin_addr)];
            [addresses appendFormat:@"%@\n",s];
            NSLog(@"%@",s);
        }
    }
    else
        [addresses appendString:@" res_init result != 0"];

    return addresses;
}
© www.soinside.com 2019 - 2024. All rights reserved.