有的时候写脚本须要可以在脚本中获取到ip的归属地,好比分析登陆日志列出攻击者的相关信息等。php
可使用whois来查询ip的详细信息,可是whois并非每台机器预装的,并且我想看中文的结果,因此找到了一个我的认为设计的很棒的网站:https://ip.cn/index.php。html
能够直接使用curl发请求查询,好比查某个攻击者的ip归属地:shell
哈,这就是我认为它设计的很棒的缘由,同一个地址,用网页打开是一个效果,在命令行下请求返回结果又是另外一个效果,命令行的返回结果很简洁,用过curl请求网页字段的人大概能理解最不爽的就是抽取结果,一个是麻烦,另外一个是白白传了那么多内容都得过滤掉很浪费。vim
我就在想啊这么酷的效果他是怎么作的,我没看过它的源码,但我猜想它是对User-Agent进行了相关处理,当判断到curl的User-Agent时就返回简洁的结果,使用-v选项能够查看curl的请求过程,来观察一下curl默认的User-Agent:浏览器
其实能够证实一下,只要指定了其它的User-Agent返回一大堆HTML那就能够推断确实是按照User-Agent like curl这种规则进行判断的:bash
得出结论,这个网站会判断请求头的User-Agent,若是发现是curl之类的命令行工具发出的请求就返回简洁的结果,不然认为是正常的浏览器返回HTML结果,酷。curl
网址确定记不住,每次打也麻烦,能够封装一下,vim ip-where.sh:工具
#! /bin/bash # curl foobar https://ip.cn/index.php?ip={ip_address} for ip in $@; do curl https://ip.cn/index.php?ip=$ip done
增长可执行权限:测试
chmod u+x ip-where.sh
并将此文件放到$PATH,我这里由于用到CentOS因此直接放到~/bin下面便可:网站
mv ip-where.sh ~/bin/
效果:
忽然想看下这个对请求次数有没有限制,因而便写了个小脚本每50毫秒随机生成一个ip去请求看看会发生什么事。
脚本:
#! /bin/bash # curl foobar https://ip.cn/index.php?ip={ip_address} for ((i=0;i<1000;i++)); do curl https://ip.cn/index.php?ip=$((RANDOM%255+1)).$((RANDOM%255+1)).$((RANDOM%255+1)).$((RANDOM%255+1)) & sleep 0.05 done wait echo "Done"
执行:
看来对频率没有限制,可是过快的话会有部分请求失败: