基于Python制作簡單的IP查詢工具
hello,今天shigen給大家分享一下如何優(yōu)雅的查詢IP的工具。我們先看一下效果:

shigen在以前服務(wù)器被攻擊或者我的COS流量被盜刷的時候,經(jīng)常這樣用。很是方便的展示了ip對應(yīng)的地理位置,幫我快速的定位了攻擊的源頭。
我們接觸的也有很多的在線的API,提供ip的地理位置解析,我們也可以自定義一個腳本,調(diào)用遠(yuǎn)端的API,獲得數(shù)據(jù)。
那知道shigen的都知道,我比較喜歡離線的數(shù)據(jù),這意味著我擺脫了對于三方服務(wù)的依賴。如:對方的服務(wù)突然掛了,對方的服務(wù)限流了,對方的服務(wù)需要認(rèn)證了,這都是麻煩事情。所以本著爹有娘有,不如自己有,我選擇了一款包含離線數(shù)據(jù)庫的Ip2region。Ip2region的gitee地址,而我選的語言是python,具體的python代碼書寫我們參考官方的文檔。
其它編程語言都有支持,感興趣的伙伴可以自行了解。

那shigen開始實現(xiàn)了。
首先,需要下載xdb文件。鏈接放在這里了,它放在了我的data文件夾里。

接下來核心的部分,代碼的實現(xiàn)。
1.獲得本地和遠(yuǎn)程的IP地址
def getLocalAndRemoteIp()-> tuple:
import socket, requests
s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8',80))
localIp =s.getsockname()[0]
remoteIp = requests.get('http://ifconfig.me/ip', timeout=1).text.strip()
return localIp,remoteIp2.參照官方文檔的實現(xiàn)
代碼略長,建議橫屏觀看。大部分的參照官方的文檔,只做了查詢出數(shù)據(jù)的解析和格式化展示。

3.main函數(shù)
if __name__=='__main__':
localIp,remoteIp=XdbSearcher.getLocalAndRemoteIp()
print(f'localIp: {localIp},remoteIp: {remoteIp}')
# cmd line arguments
parser = argparse.ArgumentParser('a shell script which is executed to analyze the ip information')
parser.add_argument('-ip','--ip',type=str,help='ipaddress', default=remoteIp)
args = parser.parse_args()
#1.緩存
dbPath = os.path.join(os.path.dirname(__file__),'./data/ip2region.xdb')
cb =XdbSearcher.loadContentFromFile(dbfile=dbPath)
# 2.創(chuàng)建查詢對象
searcher =XdbSearcher(contentBuff=cb)
# 3.執(zhí)行查詢
region_str=searcher.searchByIPStr(args.ip)
print(region_str)
searcher.close()4.運行測試
配置一個alias即可實現(xiàn)查詢IP自由。

怎么樣,這個技巧,你get到了嗎?
以上就是基于Python制作簡單的IP查詢工具的詳細(xì)內(nèi)容,更多關(guān)于Python IP查詢的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表詳解
這篇文章主要介紹了Python實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,詳細(xì)分析了鏈表的概念、定義及Python實現(xiàn)與使用鏈表的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04
Pycharm 實現(xiàn)下一個文件引用另外一個文件的方法
今天小編就為大家分享一篇Pycharm 實現(xiàn)下一個文件引用另外一個文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
python利用K-Means算法實現(xiàn)對數(shù)據(jù)的聚類案例詳解
python中的iterator和"lazy?iterator"區(qū)別介紹

