起因
有的時候寫腳本需要能夠在腳本中獲取到ip的歸屬地,比如分析登錄日志列出攻擊者的相關信息等。
可以使用whois來查詢ip的詳細信息,但是whois並不是每台機器預裝的,而且我想看中文的結果,所以找到了一個個人認為設計的很棒的網站:https://ip.cn/index.php。
可以直接使用curl發請求查詢,比如查某個攻擊者的ip歸屬地:
哈,這就是我認為它設計的很棒的原因,同一個地址,用網頁打開是一個效果,在命令行下請求返回結果又是另一個效果,命令行的返回結果很簡潔,用過curl請求網頁字段的人大概能理解最不爽的就是抽取結果,一個是麻煩,另一個是白白傳了那么多內容都得過濾掉很浪費。
網站原理
我就在想啊這么酷的效果他是怎么做的,我沒看過它的源碼,但我猜測它是對User-Agent進行了相關處理,當判斷到curl的User-Agent時就返回簡潔的結果,使用-v選項可以查看curl的請求過程,來觀察一下curl默認的User-Agent:

其實可以證明一下,只要指定了其它的User-Agent返回一大堆HTML那就可以推斷確實是按照User-Agent like curl這種規則進行判斷的:
得出結論,這個網站會判斷請求頭的User-Agent,如果發現是curl之類的命令行工具發出的請求就返回簡潔的結果,否則認為是正常的瀏覽器返回HTML結果,酷。
封裝
網址肯定記不住,每次打也麻煩,可以封裝一下,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"
執行:
看來對頻率沒有限制,但是過快的話會有部分請求失敗: