2011-03-11 152 views
1

我试图用连接在C远程服务器的API,但总是有以下错误信息:无法连接到主机C:在Windows上找不到主机名(11001),DNS问题?

log_message: 15:13:19.489 I [ap:1388] Connecting to AP A3.spotify.com:4070 

log_message: 15:13:19.490 E [ap:1324] AP Socket Error: Hostname not found (11001) 

log_message: 15:13:19.491 E [ap:3396] Connection error: 4 

log_message: 15:13:19.491 I [ap:1388] Connecting to AP A1.spotify.com:80 

你可以用日期看,该错误信息是瞬时的,所以我认为某些东西阻塞了我的电脑本地的信息。

这里是我使用Wireshark捕获的TCP流:

30 1.682802 MyLocalIp 193.182.8.15 HTTP Continuation or non-HTTP traffic 
31 1.702236 193.182.8.15 MyLocalIp HTTP Continuation or non-HTTP traffic 
33 1.901706 MyLocalIp 193.182.8.15 TCP 50222 > http [ACK] Seq=12 Ack=12 Win=251 Len=0 

因此,根据Wireshark的,通过我的计算机发送的第一消息具有不正确的报头的校验和。

我知道主机是正确的,因为当我使用相同的C API在Java中与JNA,我有以下结果:

log_message() called:15:46:48.718 I [ap:1388] Connecting to AP A1.spotify.com:4070 

log_message() called:15:46:53.769 E [ap:1324] AP Socket Error: Undefined Error 0x4E20 (20000) 

log_message() called:15:46:53.770 E [ap:3396] Connection error: 117 

log_message() called:15:46:53.770 I [ap:1388] Connecting to AP A2.spotify.com:80 

log_message() called:15:46:53.789 I [ap:938] Connected to AP: 193.182.8.12:80 

所以,这里的连接端口4070,这是正常的失败因为它是由该公司的防火墙阻止,然后将其成功在端口80

这里是Wireshark的捕获的Java版本:

104 6.296125 MyLocalIp 193.182.8.15 TCP 50339 > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=8 SACK_PERM=1 
107 6.575599 193.182.8.15 MyLocalIp TCP http > 50339 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=7 
108 6.575732 MyLocalIp 193.182.8.15 TCP 50339 > http [ACK] Seq=1 Ack=1 Win=65536 Len=0 
109 6.582627 MyLocalIp 193.182.8.15 HTTP Continuation or non-HTTP traffic 
110 6.614789 193.182.8.15 MyLocalIp TCP http > 50339 [ACK] Seq=1 Ack=512 Win=6912 Len=0 
112 6.714201 193.182.8.15 MyLocalIp HTTP Continuation or non-HTTP traffic 
113 6.722057 MyLocalIp 193.182.8.15 HTTP Continuation or non-HTTP traffic 
115 6.746484 193.182.8.15 MyLocalIp TCP http > 50339 [ACK] Seq=500 Ack=677 Win=8064 Len=0 
116 6.750938 193.182.8.15 MyLocalIp HTTP Continuation or non-HTTP traffic 
117 6.751093 MyLocalIp 193.182.8.15 HTTP Continuation or non-HTTP traffic 
118 6.985366 193.182.8.15 MyLocalIp HTTP [TCP Retransmission] Continuation or non-HTTP traffic 
119 6.985416 MyLocalIp 193.182.8.15 TCP [TCP Dup ACK 117#1] 50339 > http [ACK] Seq=787 Ack=544 Win=65024 Len=0 SLE=500 SRE=544 
121 7.013666 193.182.8.15 MyLocalIp HTTP Continuation or non-HTTP traffic 
124 7.213661 MyLocalIp 193.182.8.15 TCP 50339 > http [ACK] Seq=787 Ack=1803 Win=65536 Len=0 
132 7.703708 MyLocalIp 193.182.8.15 HTTP [TCP Retransmission] Continuation or non-HTTP traffic 
133 7.721265 193.182.8.15 MyLocalIp HTTP Continuation or non-HTTP traffic 

我尝试添加的IP我的System32/drivers/etc/hosts文件中的主机名为A1.spotify.com,A2.spotify.com和A3.spotify.com的193.182.8.15,但它没有改变任何内容。

我关闭了Windows防火墙和杀毒软件,它并没有帮助。

我试过在家里运行该公司没有代理服务器和防火墙,但它是相同的(除了在Java版本的服务能够在端口4070连接)

任何想法?

谢谢!

回答

0

我终于找到了解决办法: 运行我的程序作为管理员解决了这个问题

0

不正确的报头校验和不关键的。很多软件依赖于头部校验和的硬件重新计算,所以他们很少预先计算CPU中的头部校验和。由于wireshark在将信息发送到将信号发送出去的芯片之前抓取信息,因此wireshark会以某种频率报告不正确的信头校验和。

注意,原来的错误正在处理主机A3,但你的一些“证据”证明机器是用可到达主机A1和A2证明的。赔率是好的,这些主机不共享同一个IP地址,所以我会小心的hosts文件“把它们都设X.X.X.X”。

另外请注意,绑定客户端可以配置跳过主机文件条目。我不知道这是这里的情况,但我会期待添加一个公共域名服务器的resolv.conf文件(或同等学历),看看你得到更好的结果。如果您在“家中”运行的计算机与“在工作中”使用的笔记本电脑相同,那么resolv.conf文件就会“随您而行”。

祝你好运

+0

窗/ SYSTEM32 /司机/ etc/hosts文件是相当于“resolv.conf的”,他说他试了一下。 – selbie 2011-03-13 14:51:07

+0

主机文件不等同于resolv.conf文件。一个(主机文件)将主机名解析为一个IP地址。另一个(resolv.conf)配置哪些DNS服务器将被查询以及哪些域名可能被追加到“开始”主机名。 – 2011-03-14 17:16:31

+0

感谢您对Wireshark错误标题校验和的说明。我不相信这是一个DNS问题,因为通过JVM使用API​​时正确解析了主机名,并且能够ping通它。 – nbarraille 2011-03-17 01:05:20

0

你没有说你正在使用哪个网络库。大概是第三方或内部图书馆。
我打算冒昧地猜测,但我打赌你的网络库期望IP地址而不是DNS名称?您是否尝试过编程您的应用程序以连接到“193.182.8.15”而不是“a3.spotify.com”?如果有效,请执行gethostbyname调用以将DNS名称解析为IP地址。

下面是一些其他的事情要在命令行中尝试

键入:

ping a3.spotify.com 

如果成功的话,结果会是这个样子:

Pinging a3.spotify.com [193.182.8.15] with 32 bytes of data: 
Reply from 193.182.8.15: bytes=32 time=79ms TTL=49 
Reply from 193.182.8.15: bytes=32 time=79ms TTL=49 
Reply from 193.182.8.15: bytes=32 time=79ms TTL=49 
Reply from 193.182.8.15: bytes=32 time=79ms TTL=49 

Ping statistics for 193.182.8.15: 
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
    Minimum = 79ms, Maximum = 79ms, Average = 79ms 

这样做的输出程序告诉我两件事。

  1. a3.spotify.com正确解析为193.182.8.15。没有主机文件hacks必要。 (也许在你的公司网络上你需要这个)。

  2. 由于我得到有效ping回来,这意味着主机很可能可达。但有些机器配置为不接受ping,所以缺少ping响应,这不是一个明确的答案。查看ping是否成功解析主机名是很重要的。

现在在命令行中键入此来测试连接到端口80

telnet a3.spotify.com 80没有的telnet?见下文

它“连接”(跳到一个黑屏)? (按Ctrl +]退出,其次是“退出”)

做同样的telnet,除了端口4070

ping和telnet是快速和肮脏的方式来测试DNS解析和IP:端口连接。

上述命令可能不适用于您的公司网络,因为您的防火墙可能需要所有流量通过代理。工作中的浏览器可能配置为通过自动检测或通过管理员安装以这种方式工作。如果是这样,那么你的应用不太可能在公司网络上工作 - 除非你的网络库可以配置为使用代理。 (某些网络库会自动检测或读取您的浏览器设置)。

要安装Telnet客户端点击 开始按钮,单击控制面板, 然后单击程序。

在程序和功能下,单击 打开或关闭Windows功能。如果 系统提示您提供密码或确认的管理员 ,请输入密码 或提供确认。

在Windows功能对话框 中选中Telnet客户端复选框。

单击确定。安装可能需要几分钟的时间,需要 。

+0

对不起,没有回复你。谢谢你的建议。我可以ping a3.spotify.com(它通常会解析到不同的机器(IP的最后一个字节不同))。我也可以通过端口80连接到它,但不能连接到公司网络上的端口4070。在我使用的任何网络上没有代理。 – nbarraille 2011-03-17 01:01:11