Linux shell查詢ip歸屬地

 

原由

有的時候寫腳本須要可以在腳本中獲取到ip的歸屬地,好比分析登陸日誌列出攻擊者的相關信息等。php

可使用whois來查詢ip的詳細信息,可是whois並非每臺機器預裝的,並且我想看中文的結果,因此找到了一個我的認爲設計的很棒的網站:https://ip.cn/index.phphtml

能夠直接使用curl發請求查詢,好比查某個攻擊者的ip歸屬地:shell

image

哈,這就是我認爲它設計的很棒的緣由,同一個地址,用網頁打開是一個效果,在命令行下請求返回結果又是另外一個效果,命令行的返回結果很簡潔,用過curl請求網頁字段的人大概能理解最不爽的就是抽取結果,一個是麻煩,另外一個是白白傳了那麼多內容都得過濾掉很浪費。vim

 

網站原理

我就在想啊這麼酷的效果他是怎麼作的,我沒看過它的源碼,但我猜想它是對User-Agent進行了相關處理,當判斷到curl的User-Agent時就返回簡潔的結果,使用-v選項能夠查看curl的請求過程,來觀察一下curl默認的User-Agent:瀏覽器

  image 

其實能夠證實一下,只要指定了其它的User-Agent返回一大堆HTML那就能夠推斷確實是按照User-Agent like curl這種規則進行判斷的:bash

image

得出結論,這個網站會判斷請求頭的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/

效果:

image 

 

接口請求頻率測試

忽然想看下這個對請求次數有沒有限制,因而便寫了個小腳本每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"

執行:

image

看來對頻率沒有限制,可是過快的話會有部分請求失敗:

image

相關文章
相關標籤/搜索