選項1

選項1

想像一下,在基於 Linux 的路由器(Debian 發行版)中,您有許多 NIC。如何列印給定網路卡的開啟連線數? (解決方法是可接受的答案)

答案1

選項1

netstat | awk '$4 ~ /xxx.xxx.xxx.xxx/ { ++count } END { print count }'

在哪裡xxx.xxx.xxx.xxx是 NIC 的 IP 位址。

  • netstat將找到所有開啟的連接
  • awk與 NIC 的 IP 位址匹配
    • $4告訴awk我們將查看第四列
    • { ++count } END { print count }告訴awk每次找到匹配項時進行計數。完成後,列印出最終計數。

選項2

netstat | grep xxx.xxx.xxx.xxx -c

在哪裡xxx.xxx.xxx.xxx是 NIC 的 IP 位址。

  • netstat將找到所有開啟的連接
  • grep與 NIC 的 IP 位址匹配
    • -c要求grep計算匹配的數量,而不是列印出來。

選項 1 的優點是僅符合本地位址欄位而不是任何地方。如果存在遠端位址指向本機的開啟連接,選項 2 可能會重複計數。

答案2

你不能。基本IP路由器只是無狀態地轉送資料報,只查看IP層。他們不會知道任何他們不是端點的連接。

SPI 防火牆或 NAT 閘道則不同。

答案3

路由器不追蹤連線 - 您需要詢問防火牆。

Linux 防火牆支援狀態「連線」跟踪,但預設不一定處於活動狀態。如果您有以下任何一項:

  • -m state使用或 的iptables 規則-m conntrack
  • 或 nftables 規則使用ct state,
  • 或 iptables/nftables NAT 表中的任何規則(例如 nat/prerouting 鏈),

然後防火牆的 conntrack 系統處於活動狀態,您可以使用以下命令查看其「狀態表」:

conntrack -L

然而,因為這是由防火牆(而不是路由器)完成的,所以狀態與任何特定介面沒有關係——它們只關心 L3/L4 尋址。

相關內容