Linux

從 CLI 檢查伺服器是否在沒有 telnet 的情況下進行偵聽?

  • February 10, 2019

通常,檢查應用程序伺服器正在執行的簡單診斷方法是再次執行 telnet 主機和埠:

telnet somehost port

問題是某些作業系統(例如 macOS)現在預設情況下使該工具不可用。出於這個原因,而不是嘗試查看如何安裝 telnet,我很想知道是否有任何其他 CLI 方法來檢查伺服器是否正在偵聽,而無需特殊權限?

只是為了澄清一下,我正在尋找在任何系統上都可以像 telnet 一樣快速使用的解決方案,這可以在 5 秒內實現。編寫解決方案並不能真正提供快速訪問方法。

您可以嘗試幾種方法來檢查是否在特定埠上偵聽:

wget/curl

wget your_IP:port

netstat

netstat -an|grep LISTEN|grep :port

lsof

lsof -i :port

netcat

nc -vz your_IP port

使用/proc文件系統(可能僅適用於 linux)(解釋here

ss

ss|grep LISTEN|grep :port

nmap

nmap -sS -O -pport your_IP

EDIT1也(幾乎)每個 ssh、http、ftp 客戶端都可以使用,但有時很難理解埠是否被防火牆關閉或不可用。

EDIT2此 Q/A範例中找到使用catecho完成工作的方法:

true &>/dev/null </dev/tcp/127.0.0.1/$PORT && echo open || echo closed

或僅使用exec命令(如果您沒有看到錯誤埠已打開):

exec 6<>/dev/tcp/your_IP/port

而且我找到了一種僅用於完成工作的方法(此處awk為原文):

awk -v port=your_port 'function hextodec(str,ret,n,i,k,c){
   ret = 0
   n = length(str)
   for (i = 1; i <= n; i++) {
       c = tolower(substr(str, i, 1))
       k = index("123456789abcdef", c)
       ret = ret * 16 + k
   }
   return ret
}
function getIP(str,ret){
   ret=hextodec(substr(str,index(str,":")-2,2)); 
   for (i=5; i>0; i-=2) {
       ret = ret"."hextodec(substr(str,i,2))
   }
   ret = ret":"hextodec(substr(str,index(str,":")+1,4))
   return ret
} 
NR > 1 {{local=getIP($2);remote=getIP($3) }{ if (remote ~ "0:0" && local ~ ":"port) print local}}' /proc/net/tcp 

EDIT3正如評論一些方法中提到的,特別是基於/dev文件系統的方法可能會在您的環境中工作

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