刚刚在做域名解析那,对这稍微有所了解,把刚刚的一点心得整理了下,共享之。
先看下这个函数:gethostbyname
struct hostent *gethostbyname(const char *name);
功能:根据域名或者主机名获取IP地址。
返回值:一个hostent的结构。如果函数调用失败,将返回NULL。
那看下这结构
struct hostent
{
char *h_name; //表示的是主机的规范名
char **h_aliases; //表示的是主机的别名
int h_addrtype; //IP地址的类型
int h_length; //IP地址的长度
char **h_addr_list; //主机的ip地址 注意这是以网络字节顺序保存的一个值
};
例子:
CString m_strName(www.loadcom.com);
HOSTENT* hst=NULL;
CString strTemp;
struct in_addr ia;
CString m_strIP="";
hst = gethostbyname((LPCTSTR)m_strName);
for(int i=0;hst->h_addr_list[i];i++){
memcpy(&ia.s_addr,hst->h_addr_list[i],sizeof(ia.s_addr));
strTemp.Format("%s/n",inet_ntoa(ia));
m_strIP+=strTemp;
}
先看下这个函数:gethostbyaddr
struct hostent *gethostbyaddr(const char *name,int len,int type)
传入值是IP地址(注意,这里不是简单的字符串,这是网络字节顺序的),然后经过函数处理,将结果由返回值传出。
例子:
DWORD dwIPAddr ;
dwIPAddr = inet_addr("192.168.4.111");
HOSTENT* hst = NULL;
hst = gethostbyaddr((LPSTR)&dwIPAddr,4,AF_INET);
以上代码在XP系统,VC6.0环境测试通过。