基于Python制作簡(jiǎn)單的IP查詢工具
hello,今天shigen
給大家分享一下如何優(yōu)雅的查詢IP的工具。我們先看一下效果:
shigen
在以前服務(wù)器被攻擊或者我的COS流量被盜刷的時(shí)候,經(jīng)常這樣用。很是方便的展示了ip對(duì)應(yīng)的地理位置,幫我快速的定位了攻擊的源頭。
我們接觸的也有很多的在線的API,提供ip的地理位置解析,我們也可以自定義一個(gè)腳本,調(diào)用遠(yuǎn)端的API,獲得數(shù)據(jù)。
那知道shigen
的都知道,我比較喜歡離線的數(shù)據(jù),這意味著我擺脫了對(duì)于三方服務(wù)的依賴。如:對(duì)方的服務(wù)突然掛了,對(duì)方的服務(wù)限流了,對(duì)方的服務(wù)需要認(rèn)證了,這都是麻煩事情。所以本著爹有娘有,不如自己有,我選擇了一款包含離線數(shù)據(jù)庫(kù)的Ip2region
。Ip2region的gitee地址,而我選的語言是python
,具體的python
代碼書寫我們參考官方的文檔。
其它編程語言都有支持,感興趣的伙伴可以自行了解。
那shigen
開始實(shí)現(xiàn)了。
首先,需要下載xdb文件。鏈接放在這里了,它放在了我的data
文件夾里。
接下來核心的部分,代碼的實(shí)現(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,remoteIp
2.參照官方文檔的實(shí)現(xiàn)
代碼略長(zhǎng),建議橫屏觀看。大部分的參照官方的文檔,只做了查詢出數(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)建查詢對(duì)象 searcher =XdbSearcher(contentBuff=cb) # 3.執(zhí)行查詢 region_str=searcher.searchByIPStr(args.ip) print(region_str) searcher.close()
4.運(yùn)行測(cè)試
配置一個(gè)alias
即可實(shí)現(xiàn)查詢IP自由。
怎么樣,這個(gè)技巧,你get到了嗎?
以上就是基于Python制作簡(jiǎn)單的IP查詢工具的詳細(xì)內(nèi)容,更多關(guān)于Python IP查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中網(wǎng)絡(luò)請(qǐng)求中Retry策略實(shí)現(xiàn)方式
這篇文章主要介紹了Python中網(wǎng)絡(luò)請(qǐng)求中Retry策略實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06在Django的session中使用User對(duì)象的方法
這篇文章主要介紹了在Django的session中使用User對(duì)象的方法,Django是眾Python web開發(fā)框架中人氣最高的一個(gè),需要的朋友可以參考下2015-07-07Python實(shí)現(xiàn)批量將word轉(zhuǎn)html并將html內(nèi)容發(fā)布至網(wǎng)站的方法
這篇文章主要介紹了Python實(shí)現(xiàn)批量將word轉(zhuǎn)html并將html內(nèi)容發(fā)布至網(wǎng)站的方法,涉及Python調(diào)用第三方接口進(jìn)行文件轉(zhuǎn)換及操作數(shù)據(jù)庫(kù)等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07Python OpenCV 圖像平移的實(shí)現(xiàn)示例
本篇博客學(xué)習(xí)OpenCV 中關(guān)于圖像平移的方法,核心學(xué)習(xí)到的方法是warpAffine,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06PyQt5爬取12306車票信息程序的實(shí)現(xiàn)
12306是學(xué)習(xí)爬蟲的比較好的一個(gè)練手網(wǎng)站。本文主要實(shí)現(xiàn)了PyQt5爬取12306車票信息程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05對(duì)python讀寫文件去重、RE、set的使用詳解
今天小編就為大家分享一篇對(duì)python讀寫文件去重、RE、set的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12pyqt5之將textBrowser的內(nèi)容寫入txt文檔的方法
今天小編就為大家分享一篇pyqt5之將textBrowser的內(nèi)容寫入txt文檔的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python面向?qū)ο蟪绦蛟O(shè)計(jì)類的多態(tài)用法詳解
這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計(jì)類的多態(tài)用法,結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類的多態(tài)概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-04-04