Linux

如何跟踪命令的網路活動?

  • October 16, 2017

我想跟踪命令的網路活動,我嘗試了 tcpdump 和 strace 沒有成功。

例如,如果我正在安裝一個包或使用任何試圖訪問某個站點的命令,我想查看該網路活動(它試圖到達的站點)。

我想我們可以通過使用 tcpdump 來做到這一點。我試過了,但它正在跟踪我係統的所有網路活動。假設我執行多個與網路相關的命令,並且只想跟踪特定的命令網路活動,那麼很難找到確切的解決方案。

有沒有辦法做到這一點?

更新:

我不想跟踪網路介面上發生的所有事情。我只想跟踪命令(例如#yum install -y vim)網路活動。例如它試圖到達的站點。

netstat 為簡單起見

使用netstat和 grepping PID 或程序名稱:

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird

您可以watch用於動態更新:

watch 'netstat -np --inet | grep "thunderbird"'

和:

  • -n: 顯示數字地址而不是嘗試確定符號主機、埠或使用者名
  • -p:顯示每個socket所屬程序的PID和名稱。
  • --inet: 只顯示 raw、udp 和 tcp 協議套接字。

冗長的 strace

您說您嘗試了該strace工具,但您是否嘗試過該選項trace=network?請注意,輸出可能非常冗長,因此您可能需要一些 grepping。你可以從“sin_addr”開始。

strace -f -e trace=network <your command> 2>&1 | grep sin_addr

或者,對於已經執行的程序,使用 PID:

strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr

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