Linux

為活動連接解析 netstat 結果的想法

  • March 30, 2020

我有幾個遠端設備創建反向 ssh 連接回到我的伺服器,以便我對它們進行 ssh 並遠端管理它們。他們通過自定義埠連接回我。當我netstat -an | grep 127.0.0.0.1:在我的伺服器上做 a 時,我會得到一個目前連接的設備列表。輸出如下所示:

tcp        0      0 127.0.0.1:6001          0.0.0.0:*               LISTEN

tcp        0      0 127.0.0.1:6002          0.0.0.0:*               LISTEN

tcp        0      0 127.0.0.1:6003          0.0.0.0:*               LISTEN

其中 600x 是設備連接的埠。我的問題是這個。我想製作一個可以在我的伺服器上執行的腳本,顯示目前連接的設備。我想要腳本將讀取的配置文件列出我的設備,如下所示:

NORTH:6001

SOUTH:6002

EAST:6003

WEST:6004

並且腳本將解析netstat命令的輸出,輸出如下所示:

活動連接:NORTH、SOUTH、EAST

非活動連接:WEST

我希望這不會太令人困惑。這是可以用 grep 和 awk 完成的嗎?

這裡有三個步驟

  1. 只需從 netstat 中提取活動埠名稱

netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}'

指定一awk組空格和冒號作為分隔符,並僅獲取埠 ID。

  1. device_list.txt通過使用 grep 和步驟 1 中命令的輸出作為模式,比較設備列表文件(例如命名)中的這些埠

netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}' | grep -f - device_list.txt

這將給出這樣的輸出

NORTH:6001
SOUTH:6002
EAST:6003
  1. 可以通過-v在 grep 中使用 a 來獲取非活動連接

netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}' | grep -v -f - device_list.txt

這個的輸出是

WEST:6004

然後,您可以圍繞上面編寫腳本以您想要的任何格式列印

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