gpt4 book ai didi

linux - 如何解析 netstat 命令以从行中获取 send-q 号

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:00 25 4
gpt4 key购买 nike

我有来自 netstat -naputeo 的输出:

    tcp        0      0 :::44500                    :::*                        LISTEN      2000       773788772  18117/java          off (0.00/0/0)
tcp 0 0 :::22 :::* LISTEN 0 9419 4186/sshd off (0.00/0/0)
tcp 0 0 ::ffff:127.0.0.1:61666 ::ffff:127.0.0.1:43940 ESTABLISHED 2000 788032760 18122/java off (0.00/0/0)
tcp 0 0 ::ffff:192.168.1.202:56510 ::ffff:192.168.1.202:3000 ESTABLISHED 0 791652028 6804/java_ndsagent keepalive (7185.05/0/0)
tcp 0 0 ::ffff:192.168.1.202:56509 ::ffff:192.168.1.202:3000 TIME_WAIT 0 0 - timewait (41.13/0/0)
tcp 0 0 ::ffff:192.168.1.202:56508 ::ffff:192.168.1.202:3000 TIME_WAIT 0 0 - timewait (21.13/0/0)
tcp 0 4656 ::ffff:192.168.1.202:22 ::ffff:84.208.36.125:48507 ESTABLISHED 0 791474860 24141/1 on (0.19/0/0)
tcp 0 0 ::ffff:127.0.0.1:61616 ::ffff:127.0.0.1:45121 ESTABLISHED 2000 788032761 18117/java off (0.00/0/0)
tcp 0 0 ::ffff:192.168.1.202:3000 ::ffff:192.168.1.202:56510 ESTABLISHED 0 791651217 8044/rmiregistry off (0.00/0/0)

Send-Q 是第 3 个字段,这里的违规者是端口 22 和 4656KB。问题是我需要将该特定行和该数字/端口/进程输出到输出文件[只有当它高于 4000 时,才会发送到我的收件箱并提醒我。

我看到过类似的答案,但我无法使用这些建议提取该行。我不知道什么进程将填充 Q,但我知道端口。不只是 22 个,在任何给定时间都可能更多。

我试过:

netstat -naputeo | awk '$3 == 0 && $4 ~ /[^0-9]22$/'

但这给了我错误的路线。 [即:::22]

netstat -naputeo | awk '{if(($3)>0) print $3;}'

那是完全错误的,因为它以某种方式生成了该字段的所有行。

我只需要将数字和行发送到 csv,仅此而已。我可以稍后处理错误检查并可能对其进行改进。

有什么建议吗??

用过这个,目前有效,但还有改进的空间

filterQs() {
while read recv send address pid_program; do
ip=${address%%:*}
port=${address##*:}
pid=${pid_program%%/*}
program=${pid_program#*/}
echo "recv=${recv} send=${send} ip=${ip} port=${port} pid=${pid} program=${program}"


if [[ ${port} -eq 35487|| ${port} -eq 65485|| ${port} -eq CalorisPort || ${port} -eq 22 ]]
then
echo "recv=${recv} send=${send} ip=${ip} port=${port} pid=${pid} program=${program}" >> Qmonitor.txt

fi


done < <(netstat -napute 2>/dev/null | awk '$1 ~ /^(tcp|udp)/ && ($2 > 500 || $3 > 500) { print $2, $3, $4, $9 }')

}

谢谢大家

最佳答案

有点像

$ netstat -naputeo 2>/dev/null | awk -v OFS=';' '$1 ~ /^tcp/ && $3 > 4000 { sub(/^.+:/, "", $4); print $3, $4, $9 }'

?

这将输出第 3 列(Send-Q)、第 4 列的端口部分(Local Address)和第 9 列(PID/程序名称) 如果 Send-Q > 4000,以分号分隔,以便您可以将其通过管道传输到 CSV 中。

例如(对于我的盒子上的 Send-Q > 0)

$ netstat -naputeo 2>/dev/null | awk -v OFS=';' '$1 ~ /^tcp/ && $3 > 0 { sub(/^.+:/, "", $4); print $3, $4, $9 }'
52;22;4363/sshd:

编辑:

如果你真的需要进一步处理 bash 中的值,那么你可以通过 awk 打印相应的列并像这样遍历这些行:

#!/bin/bash

while read recv send address pid_program; do
ip=${address%%:*}
port=${address##*:}
pid=${pid_program%%/*}
program=${pid_program#*/}
echo "recv=${recv} send=${send} ip=${ip} port=${port} pid=${pid} program=${program}"
# do stuff here
done < <(netstat -naputeo 2>/dev/null | awk '$1 ~ /^(tcp|udp)/ && ($2 > 4000 || $3 > 4000) { print $2, $3, $4, $9 }')

例如:

$ ./t.sh
recv=0 send=52 ip=x.x.x.x port=22 pid=12345 program=sshd:

注意:我不明白为什么你需要 -o 切换到 netstat 因为你似乎对计时器输出不感兴趣,所以你可以可能会放弃。

关于linux - 如何解析 netstat 命令以从行中获取 send-q 号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18740507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com