使用 netstat 仅 Grepping SSH 连接

使用 netstat 仅 Grepping SSH 连接

我在我的 中添加了一些命令.bashrc,因此每次登录时我都可以看到活动的 SSH 连接。然而,由于类似的端口号包含“22”,例如“223346”,它有时不仅仅显示 SSH 连接

这是运行的命令:

netstat -tan | grep ":22\|ssh" | grep -v "LISTEN" | awk '{print "     "$4" -> "$5"      "$6}'

有时它会输出这样的东西:

192.168.1.75:52623 -> 213.174.2.30:22650   SYN_SENT
192.168.1.75:22 -> 192.168.1.109:60561     ESTABLISHED

有没有办法使用 grep 只显示 SSH 连接?谢谢!

答案1

如果在 Linux 上,请注意 的手册页ss有一个确切的示例:

ss -o state established '( dport = :ssh or sport = :ssh )'

也可以看看

lsof -i tcp:22

或者:

lsof -i :53

(tcp 或任何其他传输协议)。

但请注意,lsof如果您不是超级用户,则不会列出您不拥有的进程的信息。

答案2

我会通过这个测试来接近它:

  • 已建立的连接,以及
  • 包括其中之一传入(字段3的端口是22)或出境(字段 4 的端口是 22)连接 - 此处锚定在:和 字段末尾之间$

您可以调整逻辑以包括任何一个传入或传出,如果这就是您所追求的。

如果您使用netstat的-n标志,那么您不必搜索“ssh”;要更精细并要求在尝试解析 IP 时仅端口为数字(在 Linux 上),请使用--numeric-ports.我还删除了-anetstat 标志,以过滤掉“LISTEN”行(因为它们没有连接到另一个端点)。由于我只打印已建立的连接,因此我还从输出中删除了字段 6(“ESTABLISHED”);这很容易添加回来,无论是静态还是动态。

netstat -n | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'

或者

netstat --numeric-ports | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'

相关内容