选项1

选项1

想象一下,在基于 Linux 的路由器(Debian 发行版)中,您有许多 NIC。如何打印出给定 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 寻址。

相关内容