From efcc9aa22231d7aa4150c190b364844b189a04d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=AC=E5=93=A5=E4=BE=83=E4=BE=83=E4=BE=83ygkkk?= Date: Tue, 21 Mar 2023 01:05:44 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A41.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- point/1.sh | 530 ----------------------------------------------------- 1 file changed, 530 deletions(-) delete mode 100644 point/1.sh diff --git a/point/1.sh b/point/1.sh deleted file mode 100644 index 20e8a1e..0000000 --- a/point/1.sh +++ /dev/null @@ -1,530 +0,0 @@ -#!/bin/bash -# better-cloudflare-ip - -function bettercloudflareip(){ -read -p "请设置期望的带宽大小(默认最小1,单位 Mbps):" bandwidth -read -p "请设置RTT测试进程数(默认10,最大50):" tasknum -if [ -z "$bandwidth" ] -then - bandwidth=1 -fi -if [ $bandwidth -eq 0 ] -then - bandwidth=1 -fi -if [ -z "$tasknum" ] -then - tasknum=10 -fi -if [ $tasknum -eq 0 ] -then - echo "进程数不能为0,自动设置为默认值" - tasknum=10 -fi -if [ $tasknum -gt 50 ] -then - echo "超过最大进程限制,自动设置为最大值" - tasknum=50 -fi -speed=$[$bandwidth*128*1024] -starttime=$(date +%s) -cloudflaretest -realbandwidth=$[$max/128] -endtime=$(date +%s) -echo "从服务器获取详细信息" -unset temp -if [ "$ips" == "ipv4" ] -then - if [ $tls == 1 ] - then - temp=($(curl --resolve $domain:443:$anycast --retry 1 -s https://$domain/cdn-cgi/trace --connect-timeout 2 --max-time 3)) - else - temp=($(curl -x $anycast:80 --retry 1 -s http://$domain/cdn-cgi/trace --connect-timeout 2 --max-time 3)) - fi -else - if [ $tls == 1 ] - then - temp=($(curl --resolve $domain:443:$anycast --retry 1 -s https://$domain/cdn-cgi/trace --connect-timeout 2 --max-time 3)) - else - temp=($(curl -x [$anycast]:80 --retry 1 -s http://$domain/cdn-cgi/trace --connect-timeout 2 --max-time 3)) - fi -fi -if [ $(echo ${temp[@]} | sed -e 's/ /\n/g' | grep colo= | wc -l) == 0 ] -then - publicip=获取超时 - colo=获取超时 -else - publicip=$(echo ${temp[@]} | sed -e 's/ /\n/g' | grep ip= | cut -f 2- -d'=') - colo=$(grep -w "($(echo ${temp[@]} | sed -e 's/ /\n/g' | grep colo= | cut -f 2- -d'='))" colo.txt | awk -F"-" '{print $1}') -fi -clear -echo "优选IP $anycast" -echo "公网IP $publicip" -if [ $tls == 1 ] -then - echo "支持端口 443 2053 2083 2087 2096 8443" -else - echo "支持端口 80 8080 8880 2052 2082 2086 2095" -fi -echo "设置带宽 $bandwidth Mbps" -echo "实测带宽 $realbandwidth Mbps" -echo "峰值速度 $max kB/s" -echo "往返延迟 $avgms 毫秒" -echo "数据中心 $colo" -echo "总计用时 $[$endtime-$starttime] 秒" -} - -function rtthttps(){ -avgms=0 -n=1 -for ip in `cat rtt/$1.txt` -do - while true - do - if [ $n -le 3 ] - then - rsp=$(curl --resolve $domain:443:$ip https://$domain/cdn-cgi/trace -o /dev/null -s --connect-timeout 1 --max-time 3 -w %{time_connect}_%{http_code}) - if [ $(echo $rsp | awk -F_ '{print $2}') != 200 ] - then - avgms=0 - n=1 - break - else - avgms=$[$(echo $rsp | awk -F_ '{printf ("%d\n",$1*1000000)}')+$avgms] - n=$[$n+1] - fi - else - avgms=$[$avgms/3000] - if [ $avgms -lt 10 ] - then - echo 00$avgms $ip >> rtt/$1.log - elif [ $avgms -ge 10 ] && [ $avgms -lt 100 ] - then - echo 0$avgms $ip >> rtt/$1.log - else - echo $avgms $ip >> rtt/$1.log - fi - avgms=0 - n=1 - break - fi - done -done -rm -rf rtt/$1.txt -} - -function rtthttp(){ -avgms=0 -n=1 -for ip in `cat rtt/$1.txt` -do - while true - do - if [ $n -le 3 ] - then - if [ $(echo $ip | grep : | wc -l) == 0 ] - then - rsp=$(curl -x $ip:80 http://$domain/cdn-cgi/trace -o /dev/null -s --connect-timeout 1 --max-time 3 -w %{time_connect}_%{http_code}) - else - rsp=$(curl -x [$ip]:80 http://$domain/cdn-cgi/trace -o /dev/null -s --connect-timeout 1 --max-time 3 -w %{time_connect}_%{http_code}) - fi - if [ $(echo $rsp | awk -F_ '{print $2}') != 200 ] - then - avgms=0 - n=1 - break - else - avgms=$[$(echo $rsp | awk -F_ '{printf ("%d\n",$1*1000000)}')+$avgms] - n=$[$n+1] - fi - else - avgms=$[$avgms/3000] - if [ $avgms -lt 10 ] - then - echo 00$avgms $ip >> rtt/$1.log - elif [ $avgms -ge 10 ] && [ $avgms -lt 100 ] - then - echo 0$avgms $ip >> rtt/$1.log - else - echo $avgms $ip >> rtt/$1.log - fi - avgms=0 - n=1 - break - fi - done -done -rm -rf rtt/$1.txt -} - -function speedtesthttps(){ -rm -rf log.txt speed.txt -curl --resolve $domain:443:$1 https://$domain/$file -o /dev/null --connect-timeout 1 --max-time 10 > log.txt 2>&1 -cat log.txt | tr '\r' '\n' | awk '{print $NF}' | sed '1,3d;$d' | grep -v 'k\|M' >> speed.txt -for i in `cat log.txt | tr '\r' '\n' | awk '{print $NF}' | sed '1,3d;$d' | grep k | sed 's/k//g'` -do - k=$i - k=$[$k*1024] - echo $k >> speed.txt -done -for i in `cat log.txt | tr '\r' '\n' | awk '{print $NF}' | sed '1,3d;$d' | grep M | sed 's/M//g'` -do - i=$(echo | awk '{print '$i'*10 }') - M=$i - M=$[$M*1024*1024/10] - echo $M >> speed.txt -done -max=0 -for i in `cat speed.txt` -do - if [ $i -ge $max ] - then - max=$i - fi -done -rm -rf log.txt speed.txt -echo $max -} - -function speedtesthttp(){ -rm -rf log.txt speed.txt -if [ $(echo $1 | grep : | wc -l) == 0 ] -then - curl -x $1:80 http://$domain/$file -o /dev/null --connect-timeout 1 --max-time 10 > log.txt 2>&1 -else - curl -x [$1]:80 http://$domain/$file -o /dev/null --connect-timeout 1 --max-time 10 > log.txt 2>&1 -fi -cat log.txt | tr '\r' '\n' | awk '{print $NF}' | sed '1,3d;$d' | grep -v 'k\|M' >> speed.txt -for i in `cat log.txt | tr '\r' '\n' | awk '{print $NF}' | sed '1,3d;$d' | grep k | sed 's/k//g'` -do - k=$i - k=$[$k*1024] - echo $k >> speed.txt -done -for i in `cat log.txt | tr '\r' '\n' | awk '{print $NF}' | sed '1,3d;$d' | grep M | sed 's/M//g'` -do - i=$(echo | awk '{print '$i'*10 }') - M=$i - M=$[$M*1024*1024/10] - echo $M >> speed.txt -done -max=0 -for i in `cat speed.txt` -do - if [ $i -ge $max ] - then - max=$i - fi -done -rm -rf log.txt speed.txt -echo $max -} - -function cloudflaretest(){ -while true -do - while true - do - rm -rf rtt rtt.txt log.txt speed.txt - mkdir rtt - echo "正在生成 $ips" - unset temp - if [ "$ips" == "ipv4" ] - then - n=0 - iplist=100 - while true - do - for i in `awk 'BEGIN{srand()} {print rand()"\t"$0}' $filename | sort -n | awk '{print $2} NR=='$iplist' {exit}' | awk -F\. '{print $1"."$2"."$3}'` - do - temp[$n]=$(echo $i.$(($RANDOM%256))) - n=$[$n+1] - done - if [ $n -ge $iplist ] - then - break - fi - done - while true - do - if [ $(echo ${temp[@]} | sed -e 's/ /\n/g' | sort -u | wc -l) -ge $iplist ] - then - break - else - for i in `awk 'BEGIN{srand()} {print rand()"\t"$0}' $filename | sort -n | awk '{print $2} NR=='$[$iplist-$(echo ${temp[@]} | sed -e 's/ /\n/g' | sort -u | wc -l)]' {exit}' | awk -F\. '{print $1"."$2"."$3}'` - do - temp[$n]=$(echo $i.$(($RANDOM%256))) - n=$[$n+1] - done - fi - done - else - n=0 - iplist=100 - while true - do - for i in `awk 'BEGIN{srand()} {print rand()"\t"$0}' $filename | sort -n | awk '{print $2} NR=='$iplist' {exit}' | awk -F: '{print $1":"$2":"$3}'` - do - temp[$n]=$(echo $i:$(printf '%x\n' $(($RANDOM*2+$RANDOM%2))):$(printf '%x\n' $(($RANDOM*2+$RANDOM%2))):$(printf '%x\n' $(($RANDOM*2+$RANDOM%2))):$(printf '%x\n' $(($RANDOM*2+$RANDOM%2))):$(printf '%x\n' $(($RANDOM*2+$RANDOM%2)))) - n=$[$n+1] - done - if [ $n -ge $iplist ] - then - break - fi - done - while true - do - if [ $(echo ${temp[@]} | sed -e 's/ /\n/g' | sort -u | wc -l) -ge $iplist ] - then - break - else - for i in `awk 'BEGIN{srand()} {print rand()"\t"$0}' $filename | sort -n | awk '{print $2} NR=='$[$iplist-$(echo ${temp[@]} | sed -e 's/ /\n/g' | sort -u | wc -l)]' {exit}' | awk -F: '{print $1":"$2":"$3}'` - do - temp[$n]=$(echo $i:$(printf '%x\n' $(($RANDOM*2+$RANDOM%2))):$(printf '%x\n' $(($RANDOM*2+$RANDOM%2))):$(printf '%x\n' $(($RANDOM*2+$RANDOM%2))):$(printf '%x\n' $(($RANDOM*2+$RANDOM%2))):$(printf '%x\n' $(($RANDOM*2+$RANDOM%2)))) - n=$[$n+1] - done - fi - done - fi - ipnum=$(echo ${temp[@]} | sed -e 's/ /\n/g' | sort -u | wc -l) - if [ $tasknum == 0 ] - then - tasknum=1 - fi - if [ $ipnum -lt $tasknum ] - then - tasknum=$ipnum - fi - n=1 - for i in `echo ${temp[@]} | sed -e 's/ /\n/g' | sort -u` - do - echo $i>>rtt/$n.txt - if [ $n == $tasknum ] - then - n=1 - else - n=$[$n+1] - fi - done - n=1 - while true - do - if [ $tls == 1 ] - then - rtthttps $n & - else - rtthttp $n & - fi - if [ $n == $tasknum ] - then - break - else - n=$[$n+1] - fi - done - while true - do - n=$(ls rtt | grep txt | wc -l) - if [ $n -ne 0 ] - then - echo "$(date +'%H:%M:%S') 等待RTT测试结束,剩余进程数 $n" - else - echo "$(date +'%H:%M:%S') RTT测试完成" - break - fi - sleep 1 - done - n=$(ls rtt | grep log | wc -l) - if [ $n == 0 ] - then - echo "当前所有IP都存在RTT丢包" - echo "继续新的RTT测试" - else - cat rtt/*.log > rtt.txt - status=0 - echo "待测速的IP地址" - cat rtt.txt | sort | awk '{print $2" 往返延迟 "$1" 毫秒"}' - for i in `cat rtt.txt | sort | awk '{print $1"_"$2}'` - do - avgms=$(echo $i | awk -F_ '{print $1}') - ip=$(echo $i | awk -F_ '{print $2}') - echo "正在测试 $ip" - if [ $tls == 1 ] - then - max=$(speedtesthttps $ip) - else - max=$(speedtesthttp $ip) - fi - if [ $max -ge $speed ] - then - status=1 - anycast=$ip - max=$[$max/1024] - echo "$ip 峰值速度 $max kB/s" - rm -rf rtt rtt.txt - break - else - max=$[$max/1024] - echo "$ip 峰值速度 $max kB/s" - fi - done - if [ $status == 1 ] - then - break - fi - fi - done - break -done -} - -function singlehttps(){ -read -p "请输入需要测速的IP: " ip -read -p "请输入需要测速的端口(默认443): " port -if [ -z "$ip" ] -then - echo "未输入IP" -fi -if [ -z "$port" ] -then - port=443 -fi -echo "正在测速 $ip 端口 $port" -speed_download=$(curl --resolve $domain:$port:$ip https://$domain:$port/$file -o /dev/null --connect-timeout 5 --max-time 15 -w %{speed_download} | awk -F\. '{printf ("%d\n",$1/1024)}') -} - -function singlehttp(){ -read -p "请输入需要测速的IP: " ip -read -p "请输入需要测速的端口(默认80): " port -if [ -z "$ip" ] -then - echo "未输入IP" -fi -if [ -z "$port" ] -then - port=80 -fi -echo "正在测速 $ip 端口 $port" -if [ $(echo $ip | grep : | wc -l) == 0 ] -then - speed_download=$(curl -x $ip:$port http://$domain:$port/$file -o /dev/null --connect-timeout 5 --max-time 15 -w %{speed_download} | awk -F\. '{printf ("%d\n",$1/1024)}') -else - speed_download=$(curl -x [$ip]:$port http://$domain:$port/$file -o /dev/null --connect-timeout 5 --max-time 15 -w %{speed_download} | awk -F\. '{printf ("%d\n",$1/1024)}') -fi -} - -function datacheck(){ -clear -echo "如果这些下面这些文件下载失败,可以手动访问网址下载保存至同级目录" -echo "https://www.baipiao.eu.org/cloudflare/colo 另存为 colo.txt" -echo "https://www.baipiao.eu.org/cloudflare/url 另存为 url.txt" -echo "https://www.baipiao.eu.org/cloudflare/ips-v4 另存为 ips-v4.txt" -echo "https://www.baipiao.eu.org/cloudflare/ips-v6 另存为 ips-v6.txt" -while true -do - if [ ! -f "colo.txt" ] - then - echo "从服务器下载数据中心信息 colo.txt" - curl --retry 2 -s https://www.baipiao.eu.org/cloudflare/colo -o colo.txt - elif [ ! -f "url.txt" ] - then - echo "从服务器下载测速文件地址 url.txt" - curl --retry 2 -s https://www.baipiao.eu.org/cloudflare/url -o url.txt - elif [ ! -f "ips-v4.txt" ] - then - echo "从服务器下载IPV4数据 ips-v4.txt" - curl --retry 2 -s https://www.baipiao.eu.org/cloudflare/ips-v4 -o ips-v4.txt - elif [ ! -f "ips-v6.txt" ] - then - echo "从服务器下载IPV6数据 ips-v6.txt" - curl --retry 2 -s https://www.baipiao.eu.org/cloudflare/ips-v6 -o ips-v6.txt - else - break - fi -done -} -datacheck -url=$(sed -n '1p' url.txt) -domain=$(echo $url | cut -f 1 -d'/') -file=$(echo $url | cut -f 2- -d'/') -clear -while true -do - echo "1. IPV4优选(TLS)" - echo "2. IPV4优选" - echo "3. IPV6优选(TLS)" - echo "4. IPV6优选" - echo "5. 单IP测速(TLS)" - echo "6. 单IP测速" - echo "7. 清空缓存" - echo "8. 更新数据" - echo -e "0. 退出\n" - read -p "请选择菜单(默认0): " menu - if [ -z "$menu" ] - then - menu=0 - fi - if [ $menu == 0 ] - then - clear - echo "退出成功" - break - fi - if [ $menu == 1 ] - then - ips=ipv4 - filename=ips-v4.txt - tls=1 - bettercloudflareip - break - fi - if [ $menu == 2 ] - then - ips=ipv4 - filename=ips-v4.txt - tls=0 - bettercloudflareip - break - fi - if [ $menu == 3 ] - then - ips=ipv6 - filename=ips-v6.txt - tls=1 - bettercloudflareip - break - fi - if [ $menu == 4 ] - then - ips=ipv6 - filename=ips-v6.txt - tls=0 - bettercloudflareip - break - fi - if [ $menu == 5 ] - then - singlehttps - clear - echo "$ip 平均速度 $speed_download kB/s" - fi - if [ $menu == 6 ] - then - singlehttp - clear - echo "$ip 平均速度 $speed_download kB/s" - fi - if [ $menu == 7 ] - then - rm -rf rtt rtt.txt log.txt speed.txt - clear - echo "缓存已经清空" - fi - if [ $menu == 8 ] - then - rm -rf colo.txt url.txt ips-v4.txt ips-v6.txt - datacheck - clear - fi -done