知道域名如何得知它的IP,用程序实现
解决方案 »
- Visual Studio 97 Visual C++ 5.0 下载到了,哈哈
- 求助VC2008打包
- 请为windows计算器设计测试用例!
- 求助:WIN32下如何实现下来条控件
- CBitmapButton怎么装载外部图片?
- CComboBox控件在MoveWindow后下拉框就出不来了
- 请教smtp问题,有谁用过下面的smtp代码?请教如何登陆带密码的smtp,比如sohu的smtp.sohu.com,也就是说if (!smtp.Connect(_T("mail.indi
- 心情不好(花分)!
- MFC窗口放大
- 怎么在自已程序窗口以处的屏幕区域画一条直线?
- 如何具体结束一个exe文件?(是没有窗口的exe文件)
- 请问:如何在VC里得到一个域名的IP地址.如,怎样得到http://www.sohu.com的IP地址
// 获得主机名.
//
char hostname[256];
int res = gethostname(hostname, sizeof(hostname));
if (res != 0) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
printf("hostname=%s\n", hostname);
////////////////
// 根据主机名获取主机信息.
//
hostent* pHostent = gethostbyname(hostname);
if (pHostent==NULL) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
//////////////////
// 解析返回的hostent信息.
//
hostent& he = *pHostent;
printf("name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
he.h_name, he.h_aliases, he.h_addrtype, he.h_length);
sockaddr_in sa;
for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {
memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
// 输出机器的IP地址.
printf("Address: %s\n", inet_ntoa(sa.sin_addr)); // 显示地址串
}
//////////////////
// 终止 Windows sockets API
//
WSACleanup();
例如:www.sina.com.cn,建议你去查查ping命令的编写方法,可能会管用,我在机器中测试了
以下的命令,可能对你有启发,版主想要的信息无非是202.106.184.200这个信息C:\>ping sina.com.cnPinging sina.com.cn [202.106.184.200] with 32 bytes of data:Request timed out.
Request timed out.
Request timed out.
Request timed out.Ping statistics for 202.106.184.200:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0msC:\>
理解万岁!
因为我在做一个远程监控,服务器端用的是动态IP
要实现我的梦想,在世界的任一角落都能看到服务器端的视频
我又装了一个花生壳程序,并在里面申请了一个域名
所以,不管我的IP怎样变,那个域名是不会变的
我就可以根据那个域名然后ping出它的IP后连过去
可那样需要在运行里面去输入ping显得太麻烦
我就想这个过程怎么可以让他包含在我的程序里面
也就发了上面的问题(实在报谦,怪我没有说清楚)
我也在作远程监控,我也遇到你的问题,我就是那样实现的,可以通过域名转化为IP,为什么怎么说你都不试试看那?奇怪.
上面的是VCdaim,写成delphi形式的 Name参数代域名即可
function HostToIP(Name: string; var Ip: string): Boolean;
var
wsdata: TWSAData;
hostName: array[0..255] of char;
hostEnt: PHostEnt;
addr: PChar;
begin
WSAStartup($0101, wsdata);
try
gethostname(hostName, sizeof(hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname(hostName);
if Assigned(hostEnt) then
if Assigned(hostEnt^.h_addr_list) then begin
addr := hostEnt^.h_addr_list^;
if Assigned(addr) then begin
IP := Format('%d.%d.%d.%d', [byte(addr[0]),
byte(addr[1]), byte(addr[2]), byte(addr[3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end
end;
实现方式总归都是一样的,老兄。
ping www.csdn.net就会显示ip,那么你可以得到ping的代码吗?
太多了吧,看看是什么, 哦,是:
The Windows Sockets gethostbyname function gets host information corresponding to a hostname.struct hostent FAR * gethostbyname ( const char FAR * name
);
这只是我本机的在我们公司的IP
我是想用它得知这个:zlzq.vicp.net这个国际域名的IP
你能让它显示为:218.13.101.110吗?
是不是我那个地方搞错了,敬请指正!
楼主用我说的方法可以得到IP地址.hostname代你的域名即可转换为IP---------------------------------
用你的话我可以编出一段程序,你试一下,分离出来的IP是变化的,并不是固定的 CString m_strIPAddress;
WSADATA wsaData;
int iRet = WSAStartup(MAKEWORD(0x02, 0x02), &wsaData);
if (iRet != 0)
{
TRACE("初始化winsock动态库出错!");
m_strIPAddress = "";
return;
}
struct in_addr localaddr;
struct hostent *hp=NULL;
char hostname[50];
CString str = "www.sina.com.cn";
strcpy(hostname,str);
hp=gethostbyname(hostname);//主机信息
memcpy(&localaddr,hp->h_addr,hp->h_length);//地址
m_strIPAddress = inet_ntoa(localaddr);//变成char *
WSACleanup();
----------------
测试结果为
localaddr = 202.106.185.×××你看看我再命令行中敲的东西,这是不同时间我在命令行运行的程序。IP根本就不一样C:\>ping www.sina.com.cnPinging libra.sina.com.cn [202.106.185.242] with 32 bytes of data:Request timed out.
Request timed out.
Request timed out.
Request timed out.Ping statistics for 202.106.185.242:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0msC:\>ping www.sina.com.cnPinging libra.sina.com.cn [202.106.185.231] with 32 bytes of data:Request timed out.
Request timed out.
Request timed out.
Request timed out.Ping statistics for 202.106.185.231:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms请版主好好看看。并不是做不了,就是因为数据可能错
我用上面的delphi函数测试了一下,肯定没错
procedure TForm1.Button1Click(Sender: TObject);
var
_IP:string;
begin
HostToIP('www.sina.com.cn',_IP);
showmessage(_IP);
end;
_IP为218.30.12.185
VC我没有测试应该一样按照我上面的写法。你再检查下吧,是不是服务器没开,还是用到路由器了没开?
192.168.0.189
不知道该什么处理
gethostbyname的参数设为"www.sina.com.cn"