分类

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

前文介绍过一个在海外如何翻墙回国内的代理配置方法。然后又写了一个自动抓取免费代理服务器地址的脚本

这个脚本是有测速的,但是之前用的是ping测速,这就有两个问题

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

不过当时懒,就这么用了。

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

分类

自动获取国内代理IP

前面写了一个用代理翻回国内的指南,需要从proxy-list.org这里找免费代理IP。
这里拿到的IP不稳定,所以总要去重新查询,回来更新pac文件。于是写了个脚本:

  • 查询免费
  • ping测
  • 找出来最快的更新pac文件

然后在服务器跑了个定时任务,每小时更新一次。

#!/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)
        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的捕捉记录,根据协议的类型定义了一些ID和子ID。统计的需求是统计出各个类型的客户IP和服务IP。

这些日志是自动写入的,每天会根据日期生成一个文件夹,文件夹中每个小时生成一个日志文档。脚本要做的就是便利24个文档,读取内容进行分析。

由于需要把24个文档在一起分析,所以同学一开始的思路是:

对每一个类型进行统计,每次统计都遍历所有文件

明显效率不怎么样,但是实际上也够用了因为只要在服务器上让脚本跑起来,过几分钟回去看结果就行了

分类

读取文件奇数行

今天处理“如何读取文件偶/奇数行”这个问题的时候,本来是打算用python来解决
python本身是很简单的,偶数代码如下:

f = open('./test.file','r')
while f.readline():
    print f.readline()

奇数行代码如下:

f = open('./test.file','r')
print f.readline()
while f.readline():
    print f.readline()

在网上想看看别人怎么做的,结果发现大部分是shell中的实现,尤其是用sed命令实现。以前没用过这个工具,居然这么简单:
读取奇数行:

sed -n 'p;n' ./test.file

读取偶数行:

sed -n 'n;p' ./test.file

-n:quite,就是不会将读取的文件行默认显示出来
n;p:这是两个命令,读取一行之后,对这一行进行两个操作
n就是直接读取下一行
p就是打印该行
于是效果就是,读两行打印一行
n;pp;n的区别就是先读还是先打印了,也就达到奇偶切换