将主机名解析为IP地址

将主机名解析为IP地址

问题描述:

我开发了客户端/服务器模拟应用程序。我在两台不同的Windows XP机器上部署了客户端和服务器。不知何故,客户端无法向服务器发送请求。使用IP地址将主机名解析为IP地址

  1. Ping探测服务器的机器成功地从客户端:

    我想下面的选项。

  2. 从服务器使用ip-address成功挂起客户机。

  3. 从两台机器检查了netstat命令行工具。服务器处于LISTENING模式,客户端处于SYS_SENT模式。但它用来发送的外地址是主机名而不是IP地址。

  4. 使用来自客户端的主机名拼合服务器机器失败。

  5. 成功使用来自服务器的主机名拼写客户机。

我觉得问题是当客户端尝试使用主机名连接到服务器时。

请你让我知道如何强制应用程序使用IP地址而不是主机名?有没有其他方法可以将主机名映射到IP地址?

+0

你在使用什么库? inet_addr可能对您有用吗? http://msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx – Patrick 2010-07-06 08:31:41

如果没有关于网络架构的更多细节,这很难回答。有些事情需要调查:

  • 客户端和/或服务器可能位于NAT设备,防火墙或类似设备之后吗?
  • 是否有任何IP地址涉及“本地”地址,如192.168.x.y或10.x.y.z?
  • 什么是主机名称,它们是“真实的”DNS:能够使用的名称还是更多本地和/或Windows特定的名称?
  • 客户端如何查找服务器?在保存主机名的代码或配置数据中必须有一个地方,如果您想避免查找,只需尝试使用IP即可。
+0

感谢您的回复。 IP地址是本地的,它们以192.168.x.y开头。 DNS名称对本机来说更为本地化。我为应用程序提供IP地址,但不知怎的,它在将数据发送到服务器时使用主机名(使用netstat外部地址标识)。 – Mahesh 2010-07-06 08:37:18

转到您的客户端计算机,然后键入:

nslookup server.company.com 

server.company.com代替,当然你的服务器的真实主机名。

这应该告诉你你的客户端正在使用哪个DNS服务器(如果有的话)以及它认为问题出在哪里。

强制一个应用程序使用IP地址,一般你只是配置它使用IP地址,而不是主机名。如果主机名是硬编码的,或者应用程序坚持使用优先于IP地址的主机名(正如其他评论似乎表明的那样),那么您可能在那里运气不佳。

但是,你可以改变,大部分机解析主机名,如在Windows-Y系统上UNIXy系统/etc/resolv.conf/etc/hostsa local hosts file的方式。

+0

我在客户端和服务器上都试过nslookup。 客户端: ----------------- Nslookup的客户端PC 服务器:ns.murphx.net 地址:62.69.62.6 ** ns.murphx。网络无法找到acf-pc:不存在的域。 当我使用nslookup server-pc时也有同样的反应。 服务器: --------- nslookup客户端电脑 ***默认服务器不可用。 服务器:未知 地址:127.0.0.1 nslookup server-pc ***默认服务器不可用。 服务器:未知 地址:127.0.0.1 DNS请求超时。超时时间为2秒。 ***要求未知超时。 当我做了nslookup server-pc的时候有同样的反应。 – Mahesh 2010-07-06 08:46:18

+0

您的服务器似乎将自己用作DNS服务器(但未按其外观运行DNS服务)。它可能在其本地主机文件中包含客户端详细信息。另一方面,您的客户端配置为使用ns.murphx.net作为DNS服务器,但该服务器不知道acf-pc。你需要理清你的DNS服务器应该在哪里,配置机器来使用它们,并确保你的所有机器都在该DNS中注册。或者,为了测试,我给出了关于如何设置本地DNS转换的链接,以便不需要DNS服务器。 – paxdiablo 2010-07-06 09:00:49

你可以使用C函数的getaddrinfo()来获取数字地址 - IPv4和IPv6。 请参阅示例代码here

Windows XP具有Windows防火墙,如果配置不正确,可能会干扰网络通信。如果您拥有管理员权限,则可以通过控制面板访问Windows防火墙小程序来关闭Windows防火墙。如果您的应用程序在关闭Windows防火墙的情况下运行,那么问题可能是由于防火墙的设置所致。

我们有它运行在多台PC上使用UDP/IP通信的应用,我们一直在做实验,以便应用程序能与谁没有管理员权限的用户在PC上运行。为了让我们的应用程序在多台PC之间进行通信,我们必须使用管理员帐户来修改Windows防火墙设置。

在我们的应用中,一个PC被指定为服务器和其他的都是客户端服务器/客户端组中,并有可能在同一子网几组。

第一个变化是使用Windows防火墙小程序的例外选项卡的功能,以创建我们用来通信的端口例外。

我们正在使用主机名称查找,以便客户端可以通过使用计算机名称来定位其分配的服务器,该计算机名称由带有破折号的助记符前缀和后接分配的终端号(例如SERVER100-1)组成。这允许多台服务器及其分配的客户端在同一子网上共存。客户端使用其前缀为分配的服务器生成计算机名称,然后使用主机名称查找来发现分配的服务器的IP地址。

我们发现,除非服务器PC的Windows防火墙启用了文件和打印机共享服务端口,否则使用计算机名称(通过“系统属性”对话框的“计算机名称”选项卡分配)的主机名称查找将不起作用。

所以我们不得不做出两个改变:(1)设置为我们用于通信和(2)启用文件和打印机服务例外选项卡中允许的主机名查找端口例外。

**编辑**

您也可以找到这个Microsoft Knowledge Base article on helpful on Windows XP networking

而且看到这个article on NETBIOS name resolution in Windows

尝试使用tracert来解析主机名。 IE你有IP地址8.8.8.8所以你会使用; tracert 8.8.8.8

+1

这也是相反的。 IE,你使用tracert facebook.com来获取Facebook服务器的IP地址。 – 2016-03-18 04:42:52