gpt4 book ai didi

tcp - 使用一系列 TCP 端口计算连接数的脚本

转载 作者:可可西里 更新时间:2023-11-01 02:45:35 25 4
gpt4 key购买 nike

我正在使用以下脚本来计算特定范围的 TCP 端口的已建立连接数和等待时间。

该脚本使用 netstat 和 egrep 来尝试过滤掉有效的连接。该脚本还从文件中读取输入并计算观察到的连接数。

#!/bin/bash
START=121
END=9089

[ -f /tmp/ports.txt ] && rm -f /tmp/ports.txt

for ((a=$START; a <= $END; a++)); do
netstat -an | nawk '/TIME_WAIT|ESTABLISHED/ && !/127.0.0.1/{split($4,a,".");print a[5]}' | egrep -c ^${a}$ | \
awk -v x=$a '\
$0 != 0 {printf("%d %d\n",x,$0)}' | tee -a /tmp/ports.txt
done

awk -v s=$START -v e=$END '\
BEGIN{t=0}
{t=t+$2}
END{printf("\nTotal Connections on ports %d-%d: %d\n",s,e,t)}' /tmp/ports.txt

rm -f /tmp/ports.txt

我正在寻找提高脚本性能的方法。使用当前的端口范围 (121-9089),大约需要 77 秒才能完成。

我正在寻找改进性能的建议以及示例脚本。

最佳答案

您正在运行 netstat -an 超过 8000 次并且一次只提取一个端口。

我会用不同的逻辑改变你的主循环:

netstat -na | grep -E "TIME_WAIT|ESTABLISHED" | while read line; do
port=`echo $line | awk -F":" ' { print $2 }' | awk ' { print $1 }'` #<--- get here your port
[ $port -ge $START ] && [ $port -le $END ] && echo $line | tee -a /tmp/ports.txt #<---- put only the selected range
done

这样你只会netstat一次。

请注意,您需要更改我示例中的 awk 逻辑。

关于tcp - 使用一系列 TCP 端口计算连接数的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828272/

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