Linux

為什麼對某些埠的訪問不穩定

  • August 15, 2019

我們安裝 netdata 工具(它的作業系統性能工具)

我們注意到 netdata 安裝失敗

curl -sSL --connect-timeout 10 --retry 3 http://localhost:19999/netdata.conf

和:

我們注意到有時埠 19999 被阻止,有時我們可以訪問

example when we have access

telnet localhost 19999
Trying ::1...
Connected to localhost.
Escape character is '^]'.
CConnection closed by foreign host.

有時埠被阻塞

Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

這種非常奇怪的行為可能是什麼原因

注意-防火牆被禁用和彎腰,還有iptables

在第一種情況下

$ telnet localhost 19999
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

有一個程序正在監聽給定的埠;您連接到它,最終遠端端終止連接。

在第二種情況下(在這裡,我假設您指定相同的埠,因為您沒有明確說明):

$ telnet localhost 19999
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

這裡,Connection refused表示沒有程序在監聽指定的主機/埠。由於您使用了主機名localhost,並且由於該主機名映射到 IPv4 和 IPv6 地址,telnet因此嘗試連接到這兩者。最後,在給定埠上沒有程序監聽主機(通過 IPv4 或 IPv6)。

您可以使用該ss命令列出正在偵聽哪個埠的程序:

# ss -nlpt
State    Recv-Q    Send-Q    Local Address:Port         Peer Address:Port
LISTEN   0         0           <address>:<port>                 0.0.0.0:*    users:(("<process-name>",pid=<process-id>,fd=<file-descriptor>))

選項:

  • -n不要將地址轉換為主機名
  • -l僅列出偵聽套接字。
  • -t僅列出 TCP 套接字
  • -p列出相關的程序資訊。為此,您需要root使用者。

這樣,您可以驗證該程序是否正在偵聽您期望的埠。

引用自:https://unix.stackexchange.com/questions/535788