LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1220|回复: 5

求:自动判断和选择代理IP的shell

[复制链接]
发表于 2007-7-11 00:11:44 | 显示全部楼层 |阅读模式
我自认还是菜鸟级别。
偶尔浏览一下境外的网站,无奈于网络速度实在是无法忍受(不要建议我加宽带啊),一般都是找个代理浏览。
要找代理还比较容易,比如http   ://www.pass-e.com/proxy/什么的    。用awk或者sed把代理IP从网站中提取出来做成本地文件我也勉强可以自己做到。但现在的问题是如何判断这个IP是否能用和速度到底如何?还有如何把这个最快的IP加入firefox中去,而不需要每次都点半天的鼠标。
菜鸟在此等候高手提携。
等待ing。
发表于 2007-7-11 09:23:24 | 显示全部楼层
这是我的一个想法,挺麻烦的,你参考参考
1.把吸取的代理放在一个文本文件里,具体格式看你以后要用到的
2.用一个循环读取文件里的ip并用ping测试,用sed截取ping的结果,按一定的格式  
放入另一个文件里,然后再判断这个文件里的那一个最大.
3.firefox的用户设置项都在prefs.js里
这是我的关于代理的

  1. user_pref("network.proxy.autoconfig_url", "file:///home/budgerigar/proxy.pac");
  2. user_pref("network.proxy.http", "127.0.0.1");
  3. user_pref("network.proxy.http_port", 8567);
  4. user_pref("network.proxy.socks_remote_dns", true);
  5. user_pref("network.proxy.type", 2);
复制代码

4,再把代理写入prefs.js里
我也没试,不知道行不行,你参考一下吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-13 14:33:00 | 显示全部楼层

还剩下最后一步

好了,我现在已经完成了大半。只剩下最后一步了。
#!/bin/bash

##########################################################################################################################################################################从www.pass-e.com中提取有效数 ... ###################





################################################################################
############从www.pass-e.com下载源代码### ... ###################
wget -c htt  p://www.pass-e  .com/proxy/inde  x.php?page=1
wget -c htt  p://  www.p  ass-e.co  m/proxy/inde  x.php?page=2
##wget -c h  tp://www.  pass-e.com/proxy/i  ndex.php?page=3
##wget -c htt p  ://ww  w.pass-e.com/proxy/ind  ex.php?page=4
################################################################################
###########从源代码中提取代理原始数据到proxyDB.tmp1#############################################################################################################
grep '^list(' index.php\?page\=1 >proxyDB.tmp1

grep '^list(' index.php\?page\=2 >>proxyDB.tmp1
##grep '^list(' index.php\?page\=3 >>proxyDB1.tmp1
##grep '^list(' index.php\?page\=4 >>proxyDB1.tmp1
################################################################################
###########删除源代码###########################################################################################################################################
rm  index.php\?page\=1
rm  index.php\?page\=2
##rm  index.php\?page\=3
##rm  index.php\?page\=4
################################################################################
##############转换成标准的utf8编码##############################################################################################################################
iconv -c -f gb2312 -t utf8 proxyDB.tmp1 -o proxyDB.tmp2
rm proxyDB.tmp1
################################################################################
#############提取代理IP数据到proxyDB.tmp3#######################################################################################################################
awk -F"'" '{ print $2"\t"$4"\t"$6"\t"$8 }' proxyDB.tmp2 > proxyDB.tmp3
rm proxyDB.tmp2
awk -F "\t" '{ if (gsub("1","匿名",$3)) print $0 }' proxyDB.tmp3 >proxyDB.tmp4
awk -F "\t" '{ if (gsub("2","透明",$3)) print $0 }' proxyDB.tmp3 >>proxyDB.tmp4
awk -F "\t" '{ if (gsub("3","高匿",$3)) print $0 }' proxyDB.tmp3 >>proxyDB.tmp4


em proxyDB.tmp3
awk '{ print $1"\t"$2"\t"$3"\t"$4 }' proxyDB.tmp4 >proxyDB.dat
rm proxyDB.tmp4
################################################################################
############制作proxyIP.dat#####################################################################################################################################
awk -F"\t" '{ print $1 }' proxyDB.dat >proxyIP.dat

好了,就到了这一步就写不下去了。我的本来是想在最后一句
awk -F"\t" '{ print $1 }' proxyDB.dat >proxyIP.dat的中间print $1 后面加上一个ping  -c10 $1 |grep
rtt |awk -F "/" '{ print $5}'
可是怎么都加不上去。做到这里花费了我好几个小时。哪位高手帮忙把它补全吧。
多谢了。
回复 支持 反对

使用道具 举报

发表于 2007-7-13 18:59:35 | 显示全部楼层

我也写了一个

按照上面的思路,我也写了一个,不过还有可以调整的地方
如果想加速测试代理,可以把COUNT值调小。
  1. #!/bin/bash
  2. URL='http://www.pass-e.com/proxy/index.php?page='
  3. PAGES=4
  4. COUNT=6 # ping counts
  5. FAST_IP='[none]'
  6. FAST_PORT='[none]'
  7. MIN_TIME=
  8. echo "Query proxys process : "
  9. for page in {1..$PAGES}
  10. do
  11.   echo -n "#"
  12.   link="${URL}${page}"
  13.   list=$(wget -qc $link -O - | grep '^list(' | awk -F\' '{ print $2,$4}')
  14.   while read IP PORT
  15.   do
  16.     [ -z $IP -o -z $PORT ] && continue
  17.     echo -n "#"
  18.     cur_min_time=
  19.     for cmd in $(ping -c $COUNT $IP | awk 'NF == 8 && $(NF-1) ~ /time=/ { print $(NF-1) }')
  20.     do
  21.       echo -n "#"
  22.       [ -n '$cmd' ] && eval $cmd && time=${time%%\.*}
  23.       [ -z $cur_min_time ] && cur_min_time=$time
  24.       [ $cur_min_time -gt $time ] && cur_min_time=$time
  25.     done
  26.     echo -n "#"
  27.     [ -z "$cur_min_time" ] && continue # timeout ip or filtered ip
  28.     [ -z "$MIN_TIME" ] && { FAST_IP=$IP; FAST_PORT=$PORT; MIN_TIME=$cur_min_time; }
  29.     [ $MIN_TIME -gt $cur_min_time ] && { FAST_IP=$IP; FAST_PORT=$PORT; MIN_TIME=$cur_min_time; }
  30.   done <<<"$list"
  31. done
  32. echo
  33. echo "The fastest proxy : "
  34. echo "IP : $FAST_IP   PORT : $FAST_PORT  PING TIME : $MIN_TIME ms"
复制代码

文件保存为getfastproxy.sh
运行:
[PHP]$ ./getfastproxy.sh
Query proxys process :
###############################
###############################
###############################
###############################
###############################
###############################
###############################
###############################
#####
The fastest proxy :
IP : *.*.*.*   PORT : 80  PING TIME : 17 ms[/PHP]

抱歉,上面的代码有误,更正如下:
  1. #!/bin/bash
  2. URL='http://www.pass-e.com/proxy/index.php?page='
  3. PAGES=4
  4. COUNT=6 # ping counts
  5. FAST_IP='[none]'
  6. FAST_PORT='[none]'
  7. MIN_TIME=
  8. echo "Query proxys process : "
  9. for page in {1..$PAGES}
  10. do
  11.   echo -n "#"
  12.   link="${URL}${page}"
  13.   list=$(wget -qc $link -O - | grep '^list(' | awk -F\' '{ print $2,$4}')
  14.   while read IP PORT
  15.   do
  16.     [ -z $IP -o -z $PORT ] && continue
  17.     echo -n "#"
  18.     cur_min_time=
  19.     for cmd in $(ping -c $COUNT $IP | awk 'NF == 8 && $(NF-1) ~ /time=/ { print $(NF-1) }')
  20.     do
  21.       echo -n "#"
  22.       [ -n '$cmd' ] && eval $cmd && time=${time%%\.*}
  23.       [ -z $cur_min_time ] && cur_min_time=$time
  24.       [ $cur_min_time -gt $time ] && cur_min_time=$time
  25.     done
  26.     echo -n "#"
  27.     [ -z "$cur_min_time" ] && continue # timeout ip or filtered ip
  28.     [ -z "$MIN_TIME" ] && { FAST_IP=$IP; FAST_PORT=$PORT; MIN_TIME=$cur_min_time; }
  29.     [ $MIN_TIME -gt $cur_min_time ] && { FAST_IP=$IP; FAST_PORT=$PORT; MIN_TIME=$cur_min_time; }
  30.   done <<<"$list"
  31. done
  32. echo
  33. echo "The fastest proxy : "
  34. echo "IP : $FAST_IP   PORT : $FAST_PORT  PING TIME : $MIN_TIME ms"
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-13 21:55:40 | 显示全部楼层
测试过了,kiron的sh可用,而且效果也不错。可我还是希望哪位能帮忙把我的那个sh给补全一下。毕竟是自己写的。对整个流程比较熟悉,而且也是个学习的过程。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-14 12:02:53 | 显示全部楼层
其实我的目的并不是单纯的找出最快的proxyIP。我是要找主最快的5个或者是10个proxyIP。然后按照
Ip     端口       所在地       速度     
的模式以速度的快慢升序排列。
这样一来,在浏览不同国家或地区时就可以有选择的挑选proxyIP了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表