如何在一个局域网中通过一个IP地址获得这个IP地址的主机名,需要什么函数??

myckd 2001-09-06 03:32:35
...全文
192 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
myckd 2001-09-06
  • 打赏
  • 举报
回复
void CIpPingDlg::OnSelchangedTreePing(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString tempIpName;
struct hostent *hp;

tempIpName = m_treePing.GetItemText(pNMTreeView->itemNew.hItem);
if(tempIpName.GetLength() > 15)
{
m_ipName = tempIpName;
MessageBox("sfjsdfk", "Ksdkf", MB_OK);
}

else
{
char* p = tempIpName.GetBuffer(20);
int addr=inet_addr(p);
hp=gethostbyaddr((char*)&addr,4,AF_INET);

m_ipName = hp->h_name;
}

UpdateData(FALSE);
*pResult = 0;
}

我这个程序的功能是PING一个网络地址范围,例如从10.0.0.1 到 10.0.0.255
如果能PING通就把地址保存到一个树里,保存好以后,当我点击树的一个分支,在一个编辑框中显示
能够PING通的这个IP地址的主机名。
非常奇怪的是我只能显示10.0.0.1 的主机名,其他的都是显示IP地址
请问这是哪里出错了
personnel 2001-09-06
  • 打赏
  • 举报
回复
给你一个简单的NetBios,
// NetBios:
#include <nb30.h>
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
}ASTAT, * PASTAT;

BOOL NetbiosInfo(char* addr, char* hostname)
{
ASTAT Adapter;
NCB ncb;
UCHAR uRetCode;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
uRetCode = Netbios( &ncb );

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;

strcpy((char *) ncb.ncb_callname, addr);
ncb.ncb_buffer = (unsigned char *) &Adapter;
ncb.ncb_length = sizeof(Adapter);
ncb.ncb_rto = 1;
uRetCode = Netbios( &ncb );
if ( uRetCode == 0 )
{
for(int i=0; i<Adapter.adapt.name_count; i++)
if(Adapter.NameBuff[i].name[15] == 0)
{
if(Adapter.NameBuff[i].name_flags == REGISTERED)
sprintf(hostname, "%s", Adapter.NameBuff[i].name);

}
return TRUE;
}
return FALSE;
}
myckd 2001-09-06
  • 打赏
  • 举报
回复
to:luckyegg(幸运蛋)我来给吧,呵呵
luckyegg 2001-09-06
  • 打赏
  • 举报
回复
确实好用,我也想给你分,怎么给你呀?
luckyegg 2001-09-06
  • 打赏
  • 举报
回复
我试了,怎么得不到啊?请帮忙写一下详细代码,我也很需要这个。
jiangfangji 2001-09-06
  • 打赏
  • 举报
回复
sample:
1.在stdafx.h中添加#include afxsock.h
2.在OnInitDialog中添加AfxSocketInit();
3.void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
char *p="192.168.2.142";
int addr=inet_addr(p);
struct hostent *hp;
hp=gethostbyaddr((char*)&addr,4,AF_INET);

AfxMessageBox(hp->h_name);
}
bruceleee 2001-09-06
  • 打赏
  • 举报
回复
域名解析吗??你看一下TCP/IP就知道了!!!
bruceleee 2001-09-06
  • 打赏
  • 举报
回复
不难得!!!DNS
myckd 2001-09-06
  • 打赏
  • 举报
回复
to:personnel(无忌)
aqi520@263.net或者myckd@elong.com
personnel 2001-09-06
  • 打赏
  • 举报
回复
用snmp解不出来,就用NetBios解析。
E:mail - 我给你sourcecode.
HelloAndOk 2001-09-06
  • 打赏
  • 举报
回复
同意
myckd 2001-09-06
  • 打赏
  • 举报
回复
to:jiangfangji我试试,如果成功了就给分
jiangfangji 2001-09-06
  • 打赏
  • 举报
回复
gethostbyaddr
luckyegg 2001-09-06
  • 打赏
  • 举报
回复
不可能获得,只有传过来。
myckd 2001-09-06
  • 打赏
  • 举报
回复
怎么没人回答呀

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧