Ubuntu

curl 將所有非 SSL URL 解析為 127.0.0.1 和埠 8080

  • February 1, 2019

我正在執行 curl,無論我指向哪個 URL,它總是嘗試連接到 127.0.0.1 和埠 8080:

$ curl -v http://asdfsafzsdfsdf/
*   Trying 127.0.0.1...
* connect to 127.0.0.1 port 8080 failed: Connection refused
* Failed to connect to localhost port 8080: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 8080: Connection refused

在上面的範例中,我使用了一個不存在的域“asdfsafzsdfsdf”,但對於像 google.com 這樣的現有域也是如此。

但是,如果我將它指向一個像https://google.com這樣的 SSL URL ,它會解析並執行請求。此外,如果我將它指向https://asfasdfasdfdasfd,它會嘗試解決它並失敗(沒有奇怪的 127.0.0.1:8080 解析度):

$ curl -v https://asdfsadfsafsdf
* Rebuilt URL to: https://asdfsadfsafsdf/
* Could not resolve host: asdfsadfsafsdf
* Closing connection 0
curl: (6) Could not resolve host: asdfsadfsafsdf

這表明我在進行 SSL 連接時可能不會發生“某種”形式的干擾(也許它們不能被導致這種情況的任何東西或其他東西記憶體)。

如果我執行“host asdfsadfsadf”或“dig asdfasfsafa”,它會像您期望的那樣失敗。但是“wget”的行為方式與“curl”相同(我知道它們解析 DNS 的方式不同,所以也許這是一個線索)。

我已經調查了幾個小時了。我在 /etc/hosts 中沒有任何條目,我沒有執行任何 DNS 記憶體,我檢查了 /etc/nsswitch.conf 並且我只有“文件,dns”解析,我沒有任何特殊iptables 配置等

更重要的是,拋開 DNS 部分的問題……為什麼是 8080 埠?

這太奇怪了,為什麼會發生這種情況?有任何想法嗎?

我正在執行 Ubuntu 16.04。

謝謝!

看起來您在環境中定義了代理伺服器,例如在http_proxy環境變數中。

檢查您的 shell 環境並從定義它的任何 shell 啟動腳本中刪除該變數,或啟動代理伺服器。

或者,您可以通過傳遞-x "".

curl -x "" https://www.google.com/

引用自:https://serverfault.com/questions/951947