完成DNS查找
1、DNS查找
下面是gethostbyname函数,它执行DNS查找:
struct hostent* gethostbyname( const char* name );
hostent结构体原型如下:
struct hostent {
char* h_name;
char** h_aliases;
short h_addrtype;
short h_length;
char** h_addr_list;
};
示例:
struct hostent* host;
host = gethostbyname( "www.google.com" );
unsigned long addr = *((unsigned long*)host->h_addr_list[0]);
最后一行也可以用:
unsigned long addr = *((unsigned long*)host->h_addr);
2、DNS逆向查找
使用gethostbyaddr()函数可以完成这一任务
struct hostent* gethostbyaddr( const char* addr, int len, int type );
第一个参数是char型指针,而不是unsigned long型指针。这样做是为了确保灵活性,以便函数可以不是任何指定类型的地址。
第二个参数是地址类型,因为使用的是IPV4,所以它的值也是4。
示例:
unsigned long address = inet_addr( "216.239.33.100" );
struct hostent* host;
host = gethostbyaddr( (char*)&address, 4, AF_INET );
Sockets API拥有并管理hostent结构,这就意味着这些结构可能在未预先通知的情况下被覆盖,因此应该立即复制这些结构中所需的数据。