Linux shell查詢ip歸屬地


 

起因

有的時候寫腳本需要能夠在腳本中獲取到ip的歸屬地,比如分析登錄日志列出攻擊者的相關信息等。

可以使用whois來查詢ip的詳細信息,但是whois並不是每台機器預裝的,而且我想看中文的結果,所以找到了一個個人認為設計的很棒的網站:https://ip.cn/index.php

可以直接使用curl發請求查詢,比如查某個攻擊者的ip歸屬地:

image

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

 

網站原理

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

  image 

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

image

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

效果:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM