我有几个远程设备,它们创建到我的服务器的反向 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
,输出将如下所示:
有效连接:北、南、东
非活动连接:WEST
我希望这不会太令人困惑。这是可以用 grep 和 awk 完成的事情吗?
答案1
这里分三步
只需从 netstat 中提取活动端口名称
netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}'
指定awk
一组空格和冒号作为分隔符,并仅选取端口 ID。
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
-v
可以通过使用grep 中的a 来获取非活动连接netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}' | grep -v -f - device_list.txt
这个的输出是
WEST:6004
然后,您可以围绕上述内容编写脚本,以您想要的任何格式进行打印