gethostbyname和gethostbyaddr的用法

    技术2025-10-29  9

    ubuntu 主机名使用下面的命令来查看当前主机的主机名称:sudo /bin/hostname或者:hostname使用下面的命令来设置当前主机的主机名称:sudo /bin/hostname newname要永久重设主机名则需手工修改/etc/hostname文件。 刚刚在做域名解析那,对这稍微有所了解,把刚刚的一点心得整理了下,共享之。

    先看下这个函数: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环境测试通过。

    最新回复(0)