Getting DNS server IP on IPhone
I'm trying to get the my dns server IP using using libresolv
framework , but all I get is "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));
}
}
Anything wrong with my code here ?
Thanks
Edit
Tried to use the code in SO's other question, but this is what I get when the host is "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>
While when running the command : cat /etc/resolv.conf
I get nameserver 10.0.0.138
which is what I want.
Any idea how to get that ?
Edit2
I tried this as well, but still getting the "0.0.0.0" response.
u_char buf[NS_PACKETSZ];
int responseLen;
res_query("www.google.com",ns_c_in,ns_t_ns,buf,sizeof(buf));
You are not resolving anything, you are just printing the address stored in some variable. You actually need to call res_query
or res_search
. But on iOS, you're better off with using the CFHost* methods, like in this question. There's also sample code from Apple (search the MyResolveNameToAddress
function).
Update after understanding the question: According to this question you cannot access the /etc/resolv.conf
file (permissions). But according to this question you might succeed by using the SystemConfigFramework but I've got no idea whether it works on iOS (the framework exists, but whether that information is exposed I don't know).
Try below code to get DNS Server Address . Don't forget to link 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;
}
精彩评论