
我正在測試一個應用程序,該應用程式打開自己的連接埠(充當這些連接埠的伺服器,因此在該連接埠上偵聽),並且將同一應用程式連接到其他應用程式綁定的連接埠(充當這些連接埠的客戶端)。
我想大致了解應用程式創建的連接埠以及它連接到的應用程式和連接埠。
我怎樣才能做到這一點?
答案1
您可以用於netstat
此用途。請參閱範例(我 grep ssh
):
netstat -putan | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1725/sshd
tcp 0 0 1.2.3.4:45734 1.2.3.5:22 ESTABLISHED 2491/ssh
tcp6 0 0 :::22 :::* LISTEN 1725/sshd
解釋:
我經常使用參數-putan
(因為它們很容易記住)。
-p
:顯示應用程式/進程的PID-u
:顯示 udp 連接埠/連接-t
:顯示 TCP 連接埠/連接-a
:顯示監聽和非監聽套接字-n
:數位輸出(不進行主機名稱等的 DNS 查找)
在上面的輸出中,您可以看到有一個 ssh 守護程序 ( sshd
),其 PID正在偵聽所有網路介面 ( ) 上的1725
連接埠。還有一個 ssh 用戶端進程(PID )連接到連接埠號碼 處的IP 位址,我的 IP 位址是,我的外部連接埠是。您會看到連線已建立。因此我透過 登入。22
0.0.0.0
2491
1.2.3.5
22
1.2.3.4
45734
ssh
答案2
另一個可以做到這一點的工具是lsof
:
# lsof -i -a -p 1981
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:22 (LISTEN)
#
使用的選項如下:
-i
列印進程打開的互聯網端口-a
讓所有選項都進行 AND 運算-p 1981
顯示進程 1981 的輸出-n
禁止主機名稱尋找並顯示 IP-P
禁止服務查找並顯示連接埠號
lsof
優點是您可以指定要檢查的進程,而不必從較大的輸出中對其進行 grep。 儘管它比以前變得更加標準netstat
,但在系統上更可靠地可用。lsof
答案3
我們已經有了很好的答案,但它們只列出了命令運行時打開的連接埠。
strace
是監視應用程式生命週期內打開的連接的正確工具:
strace -e socket,connect,close -f -o hipchat.strace.txt hipchat
輸出將向您顯示其他訊息,例如 UDP 請求和開啟但已關閉的連線。
答案4
ss -a4 | less
我假設您正在談論 IPv4...如果不是,您可以將前面命令中的 4 替換為 6。如果您不想解析顯示中的名稱,可以將 -n 新增至參數。