无法连接到主机在C:主机名未find(11001)在Windows,DNS问题?

我正在尝试使用连接到C中的远程服务器的API,但我不断有以下错误消息:

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 

正如你可以看到的date,错误信息是即时的,所以我认为是在我的电脑本地阻止消息。

这里是我用Wireshark捕获的TCPstream:

 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,我的电脑发送的第一条消息有一个不正确的头校验和。

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

 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上成功。

这里是Java版本的Wireshark捕获:

 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 

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

我closures了Windows防火墙和防病毒软件,也没有帮助。

我试着在没有公司代理和防火墙的情况下在家里运行,但是它是一样的(除了在Java版本上服务能够在端口4070上连接)

任何想法?

谢谢!

Solutions Collecting From Web of "无法连接到主机在C:主机名未find(11001)在Windows,DNS问题?"

不正确的标题校验和不重要。 许多软件依赖于头部校验和的硬件重新计算,所以他们很少预先计算CPU中的头部校验和。 由于wireshark抓取信息之前,它发送到芯片,Wireshark将报告一些频率不正确的标题校验和。

请注意,原来的错误是与主机A3打交道,但是有一些机器可以到达的“证明”,主机A1和A2也证明了这一点。 好处是这些主机不共享相同的IP地址,所以我将在主机文件中注意“将它们全部设置为XXXX”。

另外请注意,可以将绑定客户端配置为跳过主机文件条目。 我不确定在这种情况下,但我会考虑将公共名称服务器添加到resolv.conf文件(或等效),看看你是否得到更好的结果。 如果您在“家中”运行的计算机与“在工作中”使用的笔记本电脑相同,那么resolv.conf文件将会“随您而行”。

祝你好运

你没有说你正在使用哪个网络库。 大概是第三方或内部图书馆。
我会大胆猜测,但我敢打赌,你的网络库预计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客户端”复选框。

点击OK。 安装可能需要几分钟的时间。

我终于找到了解决办法:以管理员身份运行我的程序解决了问题