将主机名解析为IP地址。

44

我开发了一个客户端/服务器模拟应用程序。我在两台不同的Windows XP机器上部署了客户端和服务器。但是,客户端无法向服务器发送请求。

我尝试了以下选项:

  1. 使用IP地址从客户端成功ping服务器机器。

  2. 使用IP地址从服务器成功ping客户端机器。

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

  4. 从客户端使用主机名未能ping通服务器机器。

  5. 从服务器使用主机名成功ping通客户端机器。

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

请问如何强制应用程序使用IP地址而不是主机名?还有其他将主机名映射到IP地址的方法吗?


你使用的是哪个库?inet_addr 对你可能有用。http://msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx - Patrick
5个回答

64

前往您的客户端并输入:

nslookup server.company.com

当然,将你的服务器的实际主机名替换为server.company.com,这样可以告诉你客户端正在使用哪个DNS服务器(如果有)以及它认为名称存在的问题。

通常情况下,要强制应用程序使用IP地址,只需将其配置为使用IP地址而不是主机名即可。如果主机名是硬编码的,或者应用程序坚持使用主机名而不是IP地址(正如您其他评论中所示),那么您可能会遇到麻烦。

但是,您可以更改大多数计算机解析主机名的方式,例如在UNIX系统上使用/etc/resolv.conf/etc/hosts,在Windows系统上使用本地主机文件


我在客户端和服务器上都尝试了nslookup。

客户端:

nslookup client-pc服务器:ns.murphx.net 地址:62.69.62.6 ** ns.murphx.net找不到acf-pc:不存在的域。当我执行nslookup server-pc时,得到相同的响应。

服务器:

nslookup client-pc ***默认服务器不可用。 服务器:未知 地址:127.0.0.1nslookup server-pc 默认服务器不可用。 服务器:未知 地址:127.0.0.1 DNS请求超时。超时时间为2秒。请求超时未知。当我执行nslookup server-pc时,得到相同的响应。
- Mahesh
您的服务器似乎将自己用作DNS服务器(但从外观上看并未运行DNS服务)。它可能在其本地主机文件中具有客户端详细信息。另一方面,您的客户端配置为使用ns.murphx.net作为DNS服务器,但该服务器不知道acf-pc。您需要确定DNS服务器应该在哪里,配置机器以使用它们,并确保所有机器都在该DNS中注册。或者,为了进行测试,请按照我提供的链接设置本地DNS转换,以便不需要DNS服务器。 - paxdiablo

6

尝试使用tracert命令来解析主机名。比如,如果你知道IP地址为8.8.8.8,则可以使用以下命令:tracert 8.8.8.8。


1
这同样可以反过来使用。也就是说,您可以使用tracert facebook.com获取Facebook服务器的IP地址。 - IT wannabe

1
你可以使用C函数getaddrinfo()来获取数字地址 - 包括ipv4和ipv6。请参见示例代码here

1
看起来链接已经失效了,但是你仍然可以通过archive.org 这里获取它。你可能想在你的回答中包含一些源代码。 - jrh

0

没有更多关于网络架构的详细信息,这很难回答。 一些需要调查的事情包括:

  • 客户端和/或服务器是否可能在NAT设备、防火墙或类似设备后面?
  • 涉及的任何IP地址是否为“本地”地址,例如192.168.x.y或10.x.y.z?
  • 主机名是什么,它们是“真实”的DNS可寻址名称还是更本地化和/或Windows特定的名称?
  • 客户端如何查找服务器? 在代码或配置数据中必须有一个保存主机名的位置,如果要避免查找,请尝试在那里使用IP。

感谢您的回复。IP地址是本地的,它们以192.168.x.y开头。DNS名称更接近于机器。我正在向应用程序提供IP地址,但不知何故,在向服务器发送数据时(使用netstat外部地址进行标识),它正在使用主机名。 - Mahesh

0

Windows XP拥有Windows防火墙,如果未正确配置,则可能会干扰网络流量。 如果您有管理员权限,可以通过控制面板访问Windows防火墙小程序并关闭Windows防火墙。 如果您的应用程序在关闭Windows防火墙后运行正常,则问题可能是由于防火墙设置引起的。

我们有一个应用程序,在多台PC上使用UDP/IP进行通信,并且我们一直在进行实验,以使该应用程序可以在没有管理员权限的用户的PC上运行。 为了使我们的应用程序在多个PC之间进行通信,我们不得不使用管理员帐户来修改Windows防火墙设置。

在我们的应用程序中,一个PC被指定为服务器,其他PC则是位于服务器/客户端组中的客户端,并且在同一子网上可能有几个组。

第一次更改是使用Windows防火墙小程序的“异常”选项卡功能来为我们用于通信的端口创建异常。

我们正在使用主机名查找,以便客户端可以通过计算机名称定位其分配的服务器,该名称由带有短横线的助记前缀和分配的终端号组成(例如SERVER100-1)。这允许多个具有其分配客户端的服务器共存于同一子网中。客户端使用其前缀生成分配服务器的计算机名称,然后使用主机名查找来发现分配服务器的IP地址。
我们发现,使用计算机名称(通过“系统属性”对话框中的“计算机名”选项卡分配)进行主机名查找将无法正常工作,除非服务器PC的Windows防火墙启用了文件和打印机共享服务端口。
因此,我们必须进行两个更改:(1)设置通信所使用的端口的异常,并(2)在异常选项卡中启用文件和打印机服务,以允许进行主机名查找。
**编辑**
您还可以查看此Microsoft Knowledge Base文章,有关Windows XP网络的信息。
并查看此有关Windows中NETBIOS名称解析的文章

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接