Contents

混一次更新(用curl进行测速)

Contents

前文介绍过一个在海外如何翻墙回国内的代理配置方法。然后又写了一个自动抓取免费代理服务器地址的脚本
这个脚本是有测速的,但是之前用的是ping测速,这就有两个问题

  1. ping 不稳定,毕竟不是TCP连接,所以这个延时不准确
  2. ping的是从自己的电脑到代理直接的延时,而非到目的地址的延时。

不过当时懒,就这么用了。
最近感觉这个功能不好用还不如没有,于是用curl代替ping重新测了一下速度。更新的脚本如下:

#!/bin/sh
date
echo -n > ip.txt
echo -n > ip_sort.txt
for i in $(seq 1 3)
do
echo "reading page "$i"..."
url='http://proxy-list.org/english/search.php?search=CN&country=CN&p='$i
for ip64 in $(curl --silent $url | grep -P "Proxy\('.*'\)" | cut -d"'" -f2)
do
ip_port=$(echo $ip64|base64 -d )
ip=$(echo $ip_port|cut -d":" -f1)
#time=$(ping -c1 $ip|grep from|cut -d" " -f7|cut -d"=" -f2)
time=$(curl -m 3 -x $ip_port -o /dev/null -s -w "%{time_total}\n" "http://img.xiami.net/images/album/img23/78523/21003555471467278253_5.jpg")
echo $ip_port":"$time >> ip.txt
done
done
echo "sorting..."
cat ip.txt|sort -t: -k3 -nu|grep -v -P :$ > ip_sort.txt
ip=$(head -n1 ip_sort.txt|cut -d":" -f1,2)
sed -i-e 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}:[0-9]\{1,\}/'$ip'/g' SwitchyPac.pac
echo "========"

执行脚本后,会在当前目录生成一个ip_sort.txt 文件。内容类似如下:

115.25.138.245:3128:0.341
112.81.157.119:81:0.352
106.48.49.6:80:0.361
113.205.43.182:8888:0.373
221.10.85.63:808:0.386
183.207.129.190:80:0.397
117.81.68.12:808:0.400
114.103.31.57:8998:0.402
218.18.5.1:8118:0.404
117.135.251.74:80:0.408
111.59.117.102:8118:0.433
112.239.236.229:8888:0.438

每行三列,分别是IP,端口和相应时间。
哦对了,这里的时间是curl从本机通过代理访问xiami.com一张图片的时间。奇怪的是虾米与网易云不同,就算不用代理也可以直接访问他们的静态资源。我猜他们是在网页里面的JavaScript中判断Ip地址的。没仔细看,就这么用吧。
如果你按照开头提到的两篇文章配置了SwitchyPac.pac且保存在当前目录,它会自动更新里面的代理IP和端口。
就这样。