通过微步API接口对单个IP进行查询

ops/2025/3/7 3:07:01/

import requests
import json# 微步API的URL和你的API密钥
API_URL = "https://api.threatbook.cn/v3/ip/query"
API_KEY = "***"  # 替换为你的微步API密钥
def query_threatbook(ip):"""查询微步API接口,判断IP是否为可疑"""# 构造请求参数params = {"apikey": API_KEY,"resource": ip,  # 查询的目标IP"lang": "zh",    # 语言设置为中文}try:# 发送GET请求response = requests.get(API_URL, params=params)response.raise_for_status()  # 检查请求是否成功result = response.json()  # 解析返回的JSON数据return resultexcept requests.exceptions.RequestException as e:print(f"请求微步API失败: {e}")return Nonedef summarize_result(result, ip):"""根据API返回结果总结是否为可疑IP"""if not result:print("API返回结果为空,请检查API密钥和网络连接。")return# 检查API响应结构if "data" not in result:print("API响应中缺少 'data' 字段,请检查API接口或输入的IP地址。")returndata = result["data"]ip_info = data.get(ip, {})# 提取威胁情报和标签信息judgments = ip_info.get("judgments", [])  # 威胁标签intelligences = ip_info.get("intelligences", {}).get("threatbook_lab", [])  # 情报信息basic_info = ip_info.get("basic", {})  # 基础信息(如运营商、地理位置)ports = ip_info.get("ports", [])  # 开放端口信息# 展示基础信息print("\n🔍 IP 基础信息:")if basic_info:carrier = basic_info.get("carrier", "未知")location = basic_info.get("location", {})country = location.get("country", "未知")province = location.get("province", "未知")city = location.get("city", "未知")print(f"  - 运营商: {carrier}")print(f"  - 地理位置: {country} {province} {city}")else:print("  - 无基础信息")# 展示威胁标签print("\n⚠️ 威胁标签:")if judgments:for tag in judgments:print(f"  - {tag}")else:print("  - 无威胁标签")# 展示详细情报信息print("\n🔍 详细情报信息:")if intelligences:for intel in intelligences:source = intel.get("source", "未知")confidence = intel.get("confidence", "未知")expired = "已过期" if intel.get("expired") else "未过期"intel_types = ", ".join(intel.get("intel_types", []))print(f"  - 来源: {source}, 置信度: {confidence}, 状态: {expired}, 类型: {intel_types}")else:print("  - 无详细情报信息")# 展示开放端口信息print("\n🔍 开放端口信息:")if ports:for port_info in ports:port = port_info.get("port", "未知")module = port_info.get("module", "未知")print(f"  - 端口: {port}, 协议: {module}")else:print("  - 无开放端口信息")# 安全性总结print("\n✅ 安全性总结:")if judgments:print(f"  - 该IP被标记为 **可疑**,威胁标签包括: {', '.join(judgments)}")else:print(f"  - 该IP **未被标记为可疑**,暂未发现威胁标签。")def main():"""主函数,查询用户输入的IP是否为可疑"""# 用户输入ip = input("请输入要查询的IP地址: ").strip()# 查询微步APIresult = query_threatbook(ip)# 总结并展示结果if result:summarize_result(result, ip)else:print("查询失败,请检查API密钥和网络连接。")if __name__ == "__main__":main()

通过微步API接口对单个IP进行查询效果,其实还可以弄成批量的。我发现反复查询同一个IP,查一次算一次,所以得注意,批量我也测试了,好用,就是费钱。


http://www.ppmy.cn/ops/163767.html

相关文章

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年,人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角,AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型,从技术背景、应用领域、性能、成本效益等多个方…

PHP之连接Mysql

在你有别的编程语言的基础下,你想学习PHP,可能要了解关链接数据库的信息。 使用PDO 使用pdo执行sql代码 exec执行不带返回结果的sql,query执行带返回结果的sql //默认端口是3306 host代表的ip dbname代表的数据库名 prot代表的端口号 $dsn…

后端架构模式之-BFF(Backend-For-Frontend)

Backend-for-Frontend(BFF) 的概念与意义 1. 什么是 Backend-for-Frontend(BFF)? Backend-for-Frontend(简称 BFF)是一种后端架构模式,它为特定的前端应用(Web、移动端…

【C#】WebApiClient 实例

WebApiClient 实例 一、引用类库 <PackageReference Include"WebApiClientCore" Version"2.1.5" /> <PackageReference Include"WebApiClientCore.Extensions.NewtonsoftJson" Version"2.1.5" /> <PackageReference …

Python 面向对象高级编程-定制类

目录 __str__ __iter__ __getitem__ __getattr__ __call__ 小结 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意&#xff0c;这些在Python中是有特殊用途的。 __slots__我们已经知道怎么用了&#xff0c;__len__()方法我们也知道是为了能让class作用于len()…

Rust~String、str、str、String、Box<str> 或 Box<str>

Rust语言圣经中定义 str Rust 语言类型大致分为两种&#xff1a;基本类型和标准库类型&#xff0c;前者由语言特性直接提供&#xff0c;后者在标准库中定义 str 是唯一定义在 Rust 语言特性中的字符串&#xff0c;但也是几乎不会用到的字符串类型 str 字符串是 DST 动态大小…

huggingface镜像站hf-mirror的各大AI模型文件下载

一、说明 huggingface地址&#xff1a;https://huggingface.co 但是由于需要国外网络&#xff0c;国内网络延迟较大或无法下载&#xff0c;所以使用国内镜像站&#xff1a; hf-mirror地址&#xff1a;https://hf-mirror.com/ 二、下载方法 1.本机安装了GIT 2.打开HF-Mirro…

【Qt】Qt Widgets和QML(Qt Quick)开发界面的区别

Qt 提供了两种主要的 UI 技术&#xff1a;Qt Widgets 和 QML&#xff08;Qt Quick&#xff09;。它们的核心区别主要体现在使用方式、架构、性能、开发难度和适用场景等方面。 1. Qt Widgets vs. QML 总体对比 对比项Qt WidgetsQML (Qt Quick)语言C (带 Qt UI 库)QML JavaScr…