亂碼的 SSH 數據包、亂碼的 HTML 數據包,但並非在所有情況下
嘗試聯繫來賓 VM 時,我遇到了一個非常奇怪的問題,即數據包上的標頭失去。
我有執行 CentOS 7 和 VirtualBox v.5.0.14 的裸機。然後我有一個使用橋接網路執行 Ubuntu 15.10 的來賓。它很高興地從我們的 DHCP 伺服器中獲取了它的 IP 地址。來賓正在執行 SSH 和 Apache。
在以下測試中使用的 VirtualBox 主機、來賓和所有客戶端上都禁用了所有防火牆。
我可以從訪客通過 SSH 連接到我們網路上的任何其他 Linux 主機。我還可以連接到由 Windows 主機提供的 Windows Samba 服務 =D
- 從 VirtualBox 主機訪問來賓時,SSH 和 Apache 工作。同樣,我可以從 guest =D SSH 到 VBox 主機
- 從 Ubuntu 筆記型電腦訪問來賓時 SSH 和 Apache 工作 =D
- 從 CentOS 7 VM 訪問來賓時 SSH 和 Apache 工作 =D
- 在 Windows 中使用 PuTTY SSH 到 VBox 主機工作正常 =D
一切正常,對吧?
- 來自任何使用 PuTTY 的 Windows 主機的 SSH 會導致“數據包在解密時出現亂碼”錯誤 =(
- 任何 Windows 主機上的 Apache 都會導致無法理解的文本輸出到螢幕,或者它會嘗試下載包含相同無法理解的文本的文件,具體取決於瀏覽器 =(
使用 Solaris 獲取 Apache 網頁或 SSH 可以讓我們更深入地了解一些情況。我猜它的行為與 Windows 主機相同,除了我們得到更多的調試輸出。
ssh fullyqualifiedguesthostname 0000 0000 0000 a89f Disconnecting: Bad packet length 0.
該行數字的結尾每次都不同,帶有一個十六進製字元串。即 0000 0000 0000 xxxx
當使用 wget 獲取網頁時…
wget --no-proxy fullyqualifiedguesthostname --09:57:38-- fullyqualifiedguesthostname => `index.html' Resolving fullyqualifiedguesthostname... x.x.x.x Connecting to fullyqualifiedguesthostname|x.x.x.x|:80... connected. HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9 Length: unspecified [ <=> ] 11,638 2.33K/s 09:57:43 (2.33 KB/s) - `index.html' saved [11638]
注意No 標頭,假設 HTTP/0.9
此外,下載這個 11Kb 文件需要幾秒鐘的時間。
在 Ubuntu 主機上使用 wget:
wget --no-proxy fullyqualifiedguesthostname --2016-02-26 10:08:06-- fullyqualifiedguesthostname Resolving fullyqualifiedguesthostname (fullyqualifiedguesthostname)... x.x.x.x Connecting to fullyqualifiedguesthostname (fullyqualifiedguesthostname)|x.x.x.x|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 11321 (11K) [text/html] Saving to: ‘index.html’ 100%[=========================================================>] 11,321 --.-K/s in 0s 2016-02-26 10:08:06 (160 MB/s) - ‘index.html’ saved [11321/11321]
沒有問題,沒有關於缺少標題的消息,正如您所期望的那樣,眨眼間就完成了。
現在這裡是下載到 Solaris 主機上的 index.html 文件的第一行:
cat index.html .1 200 OK Date: Fri, 26 Feb 2016 10:18:26 GMT Server: Apache/2.4.12 (Ubuntu) Last-Modified: Tue, 26 Jan 2016 15:38:24 GMT ETag: "2c39-52a3e79e18489" Accept-Ranges: bytes Content-Length: 11321 Vary: Accept-Encoding Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html
正常的、不受干擾的 HTML 程式碼如下。
在 Ubuntu 主機上下載的 index.html 文件不包含這些第一行。它只是 HTML 程式碼。
我假設缺少的標題是從 Windows 主機訪問網頁時導致無法理解的文本的原因 - 瀏覽器不知道文件是什麼,因此不知道如何顯示它。我還假設 SSH 失敗也是如此 - 缺少標頭。
我還應該注意,我可以從任何地方 ping 來賓,Windows、Linux、Solaris。
我認為這幾乎涵蓋了這個混亂網路中的所有變數。
有誰知道到底發生了什麼?
我將客戶作業系統的網路適配器類型更改為“準虛擬化網路(virtio-net)”,所有問題都消失了。