悠米是只猫

悠米是只猫

探索IP地址背后的秘密:打造一个简易的IP信息查询工具

2024-01-01

在数字化的世界中,IP地址如同每个人的身份证号码,它标识着网络中的每一个设备。了解一个IP地址的归属地、运营商等信息,对于网络安全、数据分析等领域都有着重要的意义。今天,我将带领大家一起编写一个简单的Python脚本,通过Tkinter图形界面和requests库,实现一个IP地址信息查询工具。

工具功能简介

这个工具的主要功能是:

  1. 用户可以手动输入一个IP地址进行查询。

  2. 如果用户没有输入IP地址,工具将自动查询本机的公网IP地址并进行查询。

  3. 查询结果将显示在一个文本框中,并且会保存到一个以IP地址命名的日志文件中。

技术栈介绍

  • Python:一种广泛使用的高级编程语言,适用于快速开发和原型设计。

  • Tkinter:Python的标准GUI(图形用户界面)库,用于创建窗口程序。

  • requests:一个简单易用的HTTP库,用于发送HTTP请求。

代码解析

让我们一起来看看这个工具的核心代码部分:

from tkinter import *
from tkinter import ttk
import requests

# ...(省略部分代码)

def query_ip():
    # 获取用户输入的IP地址或查询本机公网IP
    # ...(省略部分代码)

    # 使用APNIC的JWHOIS服务查询IP信息
    url = f'https://wq.apnic.net/apnic-bin/jwhois.pl?ip={ip}'
    response = requests.get(url)
    # ...(省略部分代码)

def format_result(result):
    # 格式化查询结果
    # ...(省略部分代码)

# 创建Tkinter窗口
root = Tk()
# ...(省略部分代码)

root.mainloop()

query_ip函数中,我们首先检查用户是否输入了IP地址。如果没有,我们使用https://api.ipify.org服务来获取本机的公网IP地址。然后,我们使用APNIC提供的JWHOIS服务来查询IP地址的信息。

format_result函数是用来格式化查询结果的,这里可以根据实际的返回结果进行调整,以便更友好地展示给用户。

如何运行

要运行这个工具,你需要有Python环境,并且安装了requests库。可以通过以下命令安装requests库:

pip install requests

然后,将上面的代码保存为一个.py文件,比如ip_query_tool.py,在命令行中运行这个文件即可启动工具。

结语

通过这个小工具,我们可以方便地查询IP地址的相关信息。虽然这个工具比较简单,但它展示了如何结合Python的网络请求能力和Tkinter的GUI功能来开发实用的小程序。你可以在此基础上添加更多的功能,比如支持批量查询、导出查询结果等,使其更加完善。

希望这篇博客能帮助你理解IP地址查询的基本原理,并激发你对编程的热情。如果你有任何问题或建议,欢迎在评论区留言交流。

完整源码

from tkinter import *
from tkinter import ttk

import requests


def query_ip():
    ip = entry.get()
    if not ip:
        # 如果用户没有输入 IP 地址,查询本机公网 IP 地址
        response = requests.get('https://api.ipify.org')
        if response.status_code == 200:
            ip = response.text
            entry.delete(0, END)
            entry.insert(END, ip)
        else:
            text.delete(1.0, END)
            text.insert(INSERT, '查询失败')
            return

    url = f'https://wq.apnic.net/apnic-bin/jwhois.pl?ip={ip}'
    response = requests.get(url)
    if response.status_code == 200:
        result = response.text
        formatted_result = format_result(result)
        text.delete(1.0, END)
        text.insert(INSERT, formatted_result)
        with open(f'{ip}.log', 'w') as f:
            f.write(f'查询IP:{ip}\n查询结果:{formatted_result}\n')
    else:
        text.delete(1.0, END)
        text.insert(INSERT, '查询失败')


def format_result(result):
    # 这里需要根据实际的返回结果进行格式化
    return result


root = Tk()
root.title('IP信息查询-数据来源APNIC-PoweredBy KGSH')
root.geometry('600x400')

Label(root, text='请输入IP地址或直接默认本机公网IP查询').pack(pady=10)

frame = ttk.Frame(root, padding=(20, 10))
frame.pack(fill=BOTH)

entry = ttk.Entry(frame)
entry.pack(side=LEFT, padx=(0, 10))

# 获取本机公网 IP 地址并设置为输入框的默认值
response = requests.get('https://api.ipify.org')
if response.status_code == 200:
    ip = response.text
    entry.insert(END, ip)

button = ttk.Button(frame, text='查询', command=query_ip)
button.pack(side=LEFT)

text = Text(root, wrap=WORD, relief=SUNKEN, borderwidth=1)
text.pack(fill=BOTH, padx=20, pady=10)

root.mainloop()