想像一下,在基於 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 尋址。