运行效果如图,支持PPPOE拨号口和物理网卡多网卡测速,并汇总测速结果。


服务端使用docker运行,命令如下
docker container run --rm --init --net=host --name iperf -e COUNT=500 cseelye/iperf-multi
测速脚本如下:
######################################################
# pppoe_iperf_script
# description: multi-interface iperf3 speedtest script
# usage:
# server: [count >= ppp interface count]
# docker container run --rm --init --net=host --name iperf -e COUNT=500 cseelye/iperf-multi
#
# client:
# bash multi_iperf.sh
#
# author: Fenei
# created: 20220804
# modified+1:
# version: 1.0
#
######################################################
[ $(yum list installed | grep iperf3 | wc -l ) -gt 0 ] || rpm -ivh http://file.xipunet.com/linux/iperf3-3.1.3-1.fc24.x86_64.rpm
rm -rf /tmp/ppp_speed_out
server_ipv4_array=("113.143.100.145" "1.86.232.37")
server_ipv6_array=("240e:658:2400:202::101" "240e:658:2400:202::201")
#array_num_4=`echo $RANDOM%${#server_ipv4_array[@]} |bc`
#array_num_6=`echo $RANDOM%${#server_ipv6_array[@]}|bc `
iperf_ppp_ipv4(){
#server_ip=()
echo "Fenei multi-interface iperf3 script"
echo "=============PPPOE-IPV4================="
printf "%-12s |%-15s |%-16s |%s\n" interface pppuser ip outbond
for i in `ls /etc/sysconfig/network-scripts/ifcfg-ppp*`
do
# get ppp interface name
inet_port=`echo $i | awk -F- '{print $NF}'`
# get ppp interface ip
inet_ipv4=`ip r | grep -v grep | grep -w $inet_port | awk 'END {print $NF}'`
# get ppp user
inet_user=$(cat /etc/sysconfig/network-scripts/ifcfg-$inet_port |grep USER=|awk -F USER= '{print $2}')
{
speed_out=""
# to prevent dead loops, use until command here
until [ "$speed_out" != "" ]
do
server_ipv4=${server_ipv4_array[$(echo $RANDOM%${#server_ipv4_array[@]} |bc)]}
# Check the PPP port can ping the server
ping -c 1 -I $inet_port $server_ipv4 &> /dev/null
if [ $? -eq 0 ];then
# get the sender value in iperf result
speed_out=$(iperf3 -p $((5200+(RANDOM%30))) -c $server_ipv4 -B $inet_ipv4 -P 5 -t 60 | grep SUM |grep sender | awk '{print $6}' &)
else
# if PPP port can't ping the server,set sender value 0
speed_out=0
break
fi
done
echo $speed_out >> /tmp/ppp_speed_out
printf "%-12s |%-15s |%-16s |%s %s\n" $inet_port $inet_user $inet_ipv4 $speed_out Mbits/sec
} &
done
wait
# sum sender value
echo Total Outbond $(awk '{s+=$1} END {print s}' /tmp/ppp_speed_out) Mbits/sec
}
iperf_ppp_ipv6(){
#server_ip=()
echo "Fenei multi-interface iperf3 script"
echo "=============PPPOE-IPV6================="
printf "%-12s |%-15s |%-42s |%s\n" interface pppuser ip outbond
for i in `ls /etc/sysconfig/network-scripts/ifcfg-ppp*`
do
# get ppp interface name
inet_port=`echo $i | awk -F- '{print $NF}'`
# get ppp interface ip
inet_ipv6=`ip addr show dev $inet_port | grep global |sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'`
# get ppp user
inet_user=$(cat /etc/sysconfig/network-scripts/ifcfg-$inet_port |grep USER=|awk -F USER= '{print $2}')
{
speed_out=""
# to prevent dead loops, use until command here
until [ "$speed_out" != "" ]
do
server_ipv6=${server_ipv6_array[$(echo $RANDOM%${#server_ipv6_array[@]}|bc)]}
# Check the PPP port can ping the server
ping -6 -c 1 -I $inet_port $server_ipv6 &> /dev/null
if [ $? -eq 0 ];then
# get the sender value in iperf result
speed_out=$(iperf3 -p $((5200+(RANDOM%30))) -c $server_ipv6 -B $inet_ipv6 -P 5 -t 20 | grep SUM |grep sender | awk '{print $6}' &)
else
# if PPP port can't ping the server,set sender value 0
speed_out=0
break
fi
done
echo $speed_out >> /tmp/ppp_speed_out
printf "%-12s |%-15s |%-42s |%s %s\n" $inet_port $inet_user $inet_ipv6 $speed_out Mbits/sec
} &
done
wait
# sum sender value
echo Total Outbond $(awk '{s+=$1} END {print s}' /tmp/ppp_speed_out) Mbits/sec
}
iperf_eth_ipv4(){
#server_ip=()
echo "Fenei multi-interface iperf3 script"
echo "=============ETH-IPV4================="
printf "%-12s |%-16s |%s\n" interface ip outbond
for i in `ifconfig | grep ^[a-z] | awk -F: '{print $1}' |grep -v "ppp"|grep -v "lo"`
do
# get ppp interface name
inet_port=$i
# get ppp interface ip
inet_ipv4=`ip r | grep -v grep | grep -w $inet_port | awk 'END {print $9}'`
{
speed_out=""
# to prevent dead loops, use until command here
until [ "$speed_out" != "" ]
do
server_ipv4=${server_ipv4_array[$(echo $RANDOM%${#server_ipv4_array[@]} |bc)]}
# Check the PPP port can ping the server
ping -c 1 -I $inet_port $server_ipv4 &> /dev/null
if [ $? -eq 0 ];then
# get the sender value in iperf result
speed_out=$(iperf3 -p $((5200+(RANDOM%30))) -c $server_ipv4 -B $inet_ipv4 -P 5 -t 60 | grep SUM |grep sender | awk '{print $6}' &)
else
# if PPP port can't ping the server,set sender value 0
speed_out=0
break
fi
done
echo $speed_out >> /tmp/ppp_speed_out
printf "%-12s |%-16s |%s %s\n" $inet_port $inet_ipv4 $speed_out Mbits/sec
} &
done
wait
# sum sender value
echo Total Outbond $(awk '{s+=$1} END {print s}' /tmp/ppp_speed_out) Mbits/sec
}
iperf_eth_ipv6(){
#server_ip=()
echo "Fenei multi-interface iperf3 script"
echo "=============ETH-IPV6================="
printf "%-12s |%-42s |%s\n" interface ip outbond
for i in `ifconfig | grep ^[a-z] | awk -F: '{print $1}' |grep -v "ppp"|grep -v "lo"`
do
# get ppp interface name
inet_port=$i
# get ppp interface ip
inet_ipv6=`ip addr show dev $inet_port | grep global |sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d' | head -1`
{
speed_out=""
# to prevent dead loops, use until command here
until [ "$speed_out" != "" ]
do
server_ipv6=${server_ipv6_array[$(echo $RANDOM%${#server_ipv6_array[@]}|bc)]}
# Check the PPP port can ping the server
ping -6 -c 1 -I $inet_port $server_ipv6 &> /dev/null
if [ $? -eq 0 ];then
# get the sender value in iperf result
speed_out=$(iperf3 -p $((5200+(RANDOM%30))) -c $server_ipv6 -B $inet_ipv6 -P 5 -t 20 | grep SUM |grep sender | awk '{print $6}' &)
else
# if PPP port can't ping the server,set sender value 0
speed_out=0
break
fi
done
echo $speed_out >> /tmp/ppp_speed_out
printf "%-12s |%-42s |%s %s\n" $inet_port $inet_ipv6 $speed_out Mbits/sec
} &
done
wait
# sum sender value
echo Total Outbond $(awk '{s+=$1} END {print s}' /tmp/ppp_speed_out) Mbits/sec
}
while true
do
echo -e "\033[33m -------------------------------- \033[0m"
echo -e "\033[33m Fenei network speedtest script \033[0m"
echo -e "\033[33m -------------------------------- \033[0m"
echo -e "\033[33m usage: bash multi_iperf.sh \033[0m"
echo -e "\033[33m -------------------------------- \033[0m"
echo -e "PPPoe ipv4 test :\033[32m 1 \033[0m"
echo -e "PPPoe ipv6 test :\033[32m 2 \033[0m"
echo -e "Eth ipv4 test :\033[32m 3 \033[0m"
echo -e "Eth ipv6 test :\033[32m 4 \033[0m"
read -t 10 -p "Please input your chose: " num
case $num in
1) iperf_ppp_ipv4
;;
2) iperf_ppp_ipv6
;;
3) iperf_eth_ipv4
;;
4) iperf_eth_ipv6
;;
*)
break
;;
esac
break
done本文链接:https://kinber.cn/post/4362.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
