iPhone,C / objC:通过挂钩系统范围的功能获取主机名(而不是通过IP解析)?

时间:2009-10-20 21:59:25

标签: iphone objective-c

我目前正在编写一个MobileSubstrate插件(iPhone代码注入)。它通过挂钩connect()和这段代码来获取主机名:

#ifndef   NI_MAXHOST
#define   NI_MAXHOST 1025
#endif

int error;

 char hostname[NI_MAXHOST] = "";


 error = getnameinfo(serv_addr, addrlen, hostname, NI_MAXHOST, NULL, 0, 0);

 if (error !=0) {
  ALogTCP(@"coudldn't resolve hostname or internal connect");

  return orig__connect(sockfd, serv_addr, addrlen);
  }


 if (error == 0) {
  ALogTCP(@"hostname: %s", hostname);
  NSString *hostFirst = [NSString stringWithCString:hostname];
}

现在我注意到一些主机名无法正常解析(错误的主机:如connect.xyz.com而不是irc.xyz.com)(取决于DNS服务器)。

我不习惯所有的网络功能,广泛的搜索没有找到任何解决方案: 我正在考虑挂钩一个负责所有主机名 - > IP“转换”的函数,获取主机名并在以上代码中使用它。有这样的功能吗?它是如何被称为的?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

这就是我最终做到的方式,花了我大约7个小时来弄明白:D

  1. 挂钩到CFHostCreateWithName(CFAllocatorRef * allocator,CFStringRef * hostname)

  2. 之后我使用gethostbyname来获取IP。

  3. 现在我可以将这些信息与我通过挂钩连接()

    检索的信息进行比较