2011-03-11 148 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