当前位置: 首页 > news >正文

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


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.lryc.cn/news/547354.html

相关文章:

  • LLM实践——DeepSeek技术报告学习(含实现逻辑梳理)
  • Autojs无线连接vscode方法
  • 第一节:基于Winform框架的串口助手小项目---基础控件使用《C#编程》
  • 小红书湖仓架构的跃迁之路
  • pytorch高可用的设计策略和集成放大各自功能
  • 神经网络前向微分和后向微分区别
  • Android 创建一个全局通用的ViewModel
  • windows 利用nvm 管理node.js 2025最新版
  • 基于物联网技术的电动车防盗系统设计(论文+源码)
  • run方法执行过程分析
  • 关联封号率降70%!2025最新IP隔离方案实操手册
  • LeetCode 解题思路 10(Hot 100)
  • ASP.NET Core JWT认证与授权
  • 城市地质安全专题连载⑧ | 强化工程地质安全保障力度,为工程项目全栈护航
  • 50.xilinx fir滤波器系数重加载如何控制
  • 低代码平台的后端架构设计与核心技术解析
  • QT实现单个控制点在曲线上的贝塞尔曲线
  • svn 通过127.0.01能访问 但通过公网IP不能访问,这是什么原因?
  • ‌学习DeepSeek V3 与 R1 核心区别(按功能维度分类)
  • C++中的 互斥量
  • 直接法估计相机位姿
  • PHP动态网站建设
  • 【gRPC】Java高性能远程调用之gRPC详解
  • 数据结构知识学习小结
  • 分布式锁—2.Redisson的可重入锁一
  • 计算机毕业设计SpringBoot+Vue.js球队训练信息管理系统(源码+文档+PPT+讲解)
  • FFmpeg入门:最简单的音视频播放器
  • java 查找两个集合的交集部分数据
  • 【系统架构设计师】以数据为中心的体系结构风格
  • 通过HTML有序列表(ol/li)实现自动递增编号的完整解决方案