因为众所周知的原因,很多人需要在多个IP的国外服务器列表中,找到一个最快的IP来连接。
按最水的方法,一定是一个一个ping一下,看看哪个快,但几十个IP,你能看得过来么?
最近要面试,既然如此,就试着着一个使用linux下小工具实现的批量ping软件吧~
1. 提取IP
假如某网页下的IP是表格形式,某一列为IP,则可以使用awk来提取:
awk 'NR > 1 {print $3}' ip.txt
意思是从第二行开始,打印每行的第三列内容。awk简易教程可以看这里:
AWK简明教程
2. 从ping 某一个IP提取时间
ping -c 3 baidu.com | awk -F '[ /]' 'NR==1 {ip=$2} $1=="round-trip" {print ip,$8}'
会得到这样的结果:
baidu.com 56.284
ping -c 表示ping 3次。
awk命令,设置分隔为空格和/;当行数为1时(首行)提取第二格内容保存至ip变量;当每行中第一列为"round-trip"时,输出ip和第8格(即平均时长)
3. 并行ping
| while read x ; do ping -c 3 $x & done
& 符号将此任务作为后台程序
4. 排序,将第二列以数字方式排序:
sort -n -k2
总的代码:
cat ip.txt | awk 'NR > 1 {print $3}'| while read x ; do echo `ping -c 3 $x | awk -F '[ /]' 'NR==1 {ip=$2} $1=="round-trip" {print ip,$8}'` & done | sort -n -k2
好吧,好长,可能写成多个命令会更容易理解些