根据主机名获得IP及根据IP获得主机名

本文介绍了通过函数gethostbyname获取主机名对应的IP地址的方法,并探讨了如何使用gethostbyaddr函数从IP地址反查主机信息。注意到由于NetBIOS协议的限制,某些情况下可能无法获取到主机名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据主机名获得IP好说,前面已经学习过了,用函数gethostbyname获得主机信息,其中包括IP信息

int CNeighborDlg::getIPByName()
{
UpdateData(TRUE);            //接收数据
hostent *hostinfo;
hostinfo = gethostbyname(
   m_hostname
);
if(hostinfo != NULL){
   int i = 0;
   char *lpaddr = hostinfo->h_addr_list[i];
   //CString iplist[20];
   CString list = "";
   CString temp;
   while (lpaddr){                                 //循环得到所有的IP
    in_addr inAddr;
    memmove(&inAddr,lpaddr,4);
    temp = inet_ntoa(inAddr);
    temp += "/n";
    //iplist[i] = temp;
    list += temp;
    i++;
    lpaddr = hostinfo->h_addr_list[i];
   }
   AfxMessageBox(_T(list));
   return 0;
}
else{
   int err = WSAGetLastError();
   CString strErr;
   strErr.Format("%d",err);
   AfxMessageBox(_T(strErr));
   return 1;
}
}

根据IP获得主机信息则要用gethostbyaddr函数

int CNeighborDlg::getNameByIP(CString addr)
{
long a = inet_addr(addr) ;

   if(a == INADDR_NONE){
   AfxMessageBox(_T("无效的地址"));
}
hostent *hostinfo;
hostinfo = gethostbyaddr((char*)(&a), strlen(addr), AF_INET); //应该是有问题,外部网无法获得。
if(hostinfo != NULL){
   AfxMessageBox(hostinfo->h_name);
   return 0;
}
int err = WSAGetLastError();
if(err == WSANO_DATA){
   AfxMessageBox(_T("WSANO_DATA"));
   return 1;
}
CString strErr;
strErr.Format("%d",err);
AfxMessageBox(_T(strErr));
return 1;
}

这一部分有一个问题,就是有注释的地方,实验的时候获得某些机器是没问题的,而获得另外一些就会有

问题,上网查了下原因,大体上是这样的,此函数是netbios协议里的,而某些机器上是没有打开此协议的,所以就无法获得。时间关系,没有验证此说法的正确与否,以后再寻解决办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值