python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python IP查询

基于Python制作简单的IP查询工具

作者:shigen01

这篇文章主要为大家详细介绍了如何基于Python制作一个简单的IP查询工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

hello,今天shigen给大家分享一下如何优雅的查询IP的工具。我们先看一下效果:

shigen在以前服务器被攻击或者我的COS流量被盗刷的时候,经常这样用。很是方便的展示了ip对应的地理位置,帮我快速的定位了攻击的源头。

我们接触的也有很多的在线的API,提供ip的地理位置解析,我们也可以自定义一个脚本,调用远端的API,获得数据。

那知道shigen的都知道,我比较喜欢离线的数据,这意味着我摆脱了对于三方服务的依赖。如:对方的服务突然挂了,对方的服务限流了,对方的服务需要认证了,这都是麻烦事情。所以本着爹有娘有,不如自己有,我选择了一款包含离线数据库的Ip2regionIp2region的gitee地址,而我选的语言是python,具体的python代码书写我们参考官方的文档

其它编程语言都有支持,感兴趣的伙伴可以自行了解。

shigen开始实现了。

首先,需要下载xdb文件。链接放在这里了,它放在了我的data文件夹里。

接下来核心的部分,代码的实现。

1.获得本地和远程的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.参照官方文档的实现

代码略长,建议横屏观看。大部分的参照官方的文档,只做了查询出数据的解析和格式化展示。

3.main函数

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.创建查询对象
    searcher =XdbSearcher(contentBuff=cb)
    
    # 3.执行查询
    region_str=searcher.searchByIPStr(args.ip)
    print(region_str)
    searcher.close()

4.运行测试

配置一个alias即可实现查询IP自由。

怎么样,这个技巧,你get到了吗?

以上就是基于Python制作简单的IP查询工具的详细内容,更多关于Python IP查询的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文