Linux
從 CLI 檢查伺服器是否在沒有 telnet 的情況下進行偵聽?
通常,檢查應用程序伺服器正在執行的簡單診斷方法是再次執行 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範例中找到使用
cat
和echo
完成工作的方法: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
文件系統的方法可能會在您的環境中工作