通过微步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 result
    except requests.exceptions.RequestException as e:
        print(f"请求微步API失败: {e}")
        return None

def summarize_result(result, ip):
    """根据API返回结果总结是否为可疑IP"""
    if not result:
        print("API返回结果为空,请检查API密钥和网络连接。")
        return

    # 检查API响应结构
    if "data" not in result:
        print("API响应中缺少 'data' 字段,请检查API接口或输入的IP地址。")
        return

    data = 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()

    # 查询微步API
    result = query_threatbook(ip)

    # 总结并展示结果
    if result:
        summarize_result(result, ip)
    else:
        print("查询失败,请检查API密钥和网络连接。")

if __name__ == "__main__":
    main()

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981978.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第七节:基于Winform框架的串口助手小项目---协议解析《C#编程》

介绍 目标 代码实现 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e){if (isRxShow false) return;// 1,需要读取有效的数据 BytesToReadbyte[] dataTemp new byte[serialPort1.BytesToRead];serialPort1.Read(dataTemp,0,dataTemp.Le…

关于tresos Studio(EB)的MCAL配置之GPT

概念 GPT,全称General Purpose Timer,就是个通用定时器,取的名字奇怪了点。定时器是一定要的,要么提供给BSW去使用,要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…

C语言基础要素(011):增量、减量运算

让变量自身加一或减一是一种常用的运算,C语言提供了增量与减量运算符支持这些操作。 增量运算() 让变量自身加1,可以这样实现: int size 3; size size 1; // 语句执行后 size 值为 4 size 1; // 语句执行后 size 值为 5使…

深入探索WebGL:解锁网页3D图形的无限可能

深入探索WebGL:解锁网页3D图形的无限可能 引言 。WebGL,作为这一变革中的重要技术,正以其强大的功能和广泛的应用前景,吸引着越来越多的开发者和设计师的关注。本文将深入剖析WebGL的核心原理、关键技术、实践应用,并…

Python +Anaconda,DeepSeeK API入门小例子

一、环境搭建 1.安装pycharm 、anaconda,deepseek官网申请api key(不会的去百度,申请完了可以充值几块钱,现在官网应该没有免费token可以测试了) 2.anaconda创建虚拟环境 ,打开windows dos界面依次输入 命令:1) con…

股指期货的交易时间是几点到几点?

股指期货是一种金融衍生品,简单来说,就是以股票指数(比如沪深300指数)为标的的期货合约。投资者可以通过买卖这些合约来对冲风险或者投机。它的交易方式和股票有点像,但又有自己的特点。 股指期货的交易时间是什么时候…

推流项目的ffmpeg配置和流程重点总结一下

ffmpeg的初始化配置,在合成工作都是根据这个ffmpeg的配置来做的,是和成ts流还是flv,是推动远端还是保存到本地, FFmpeg 的核心数据结构,负责协调编码、封装和写入操作。它相当于推流的“总指挥”。 先来看一下ffmpeg的…

数字电子技术基础(二十四)——TTL门电路的高、低电平的输出特性曲线

目录 1 TTL门电路的特性曲线 1.1 高电平输出特性 1.1.2 高电平输出特性的实验过程 1.1.2 TTL门电路的输出特性的实验结果 1.2 低电平的输出特性 1 TTL门电路的特性曲线 1.1 高电平输出特性 1.1.2 高电平输出特性的实验过程 现在想要测试TTL门电路的输出特性&#xff0c…

盛铂科技SCP4000射频微波功率计与SPP5000系列脉冲峰值 USB功率计 区别

在射频(RF)和微波测试领域,快速、精准的功率测量是确保通信系统、雷达、卫星设备等高性能运行的核心需求。无论是连续波(CW)信号的稳定性测试,还是脉冲信号的瞬态功率分析,工程师都需要轻量化、…

GCC RISCV 后端 -- cc1 入口

GCC编译工具链中的 gcc 可执行程序,实际上是个驱动程序(Driver),其根据输入的参数,然后调用其它不同的程序,对输入文件进行处理,包括编译、链接等。可以通过以下命令查看: gcc -v h…

C++第二十讲:C++11

C第二十讲:C11 1.列表初始化1.1C98时的{}初始化1.2C11的新规{}初始化1.3initializer_list初始化 2.右值引用和移动语义2.1右值引用2.1.1左值和右值2.1.2左值引用和右值引用2.1.3引用延长声明周期2.1.4左值和右值的参数匹配 2.2右值引用和移动语义的使用2.2.1移动构造…

Finebi_求组内占比和组内累计占比

需求:原始数据结构如下,要求各每个月的各产品销量占比,至每月的各产品销量累计占比 实现步骤: ①维度拖入日期,按年月分组 ②各产品销量占比DEF(SUM_AGG(${产品销量表_销量&…

PE文件结构详解(DOS头/NT头/节表/导入表)使用010 Editor手动解析notepad++.exe的PE结构

一:DOS部分 DOS部分分为DOS MZ文件头和DOS块,其中DOS MZ头实际是一个64位的IMAGE_DOS——HEADER结构体。 DOS MZ头部结构体的内容如下,我们所需要关注的是前面两个字节(e_magic)和后面四个字节(e_lfanew&a…

自由学习记录(41)

代理服务器的核心功能是在客户端(用户设备)和目标服务器(网站/资源服务器)之间充当“中介”,具体过程如下: 代理服务器的工作流程 当客户端希望访问某个网站(比如 example.com)时&…

学习工具的一天之(burp)

第一呢一定是先下载 【Java环境】:Java Downloads | Oracle 下来是burp的下载 Download Burp Suite Community Edition - PortSwigger 【下载方法二】关注的一个博主 【BurpSuite 安装激活使用详细上手教程 web安全测试工具】https://www.bilibili.com/video/BV…

大模型gpt结合drawio绘制流程图

draw下载地址 根据不同操作系统选择不同的安装 截图给gpt 并让他生成drawio格式的,选上推理 在本地将生成的内容保存为xml格式 使用drawio打开 保存的xml文件 只能说效果一般。

K8S学习之基础六:k8s中pod亲和性

Pod节点亲和性和反亲和性 podaffinity:pod节点亲和性指的是pod会被调度到更趋近与哪个pod或哪类pod。 podunaffinity:pod节点反亲和性指的是pod会被调度到远离哪个pod或哪类pod 1. Pod节点亲和性 requiredDuringSchedulingIgnoredDuringExecution&am…

FPGA学习篇——Verilog学习4

1.1 结构语句 结构语句主要是initial语句和always语句,initial 语句它在模块中只执行一次,而always语句则不断重复执行,以下是一个比较好解释的图: (图片来源于知乎博主罗成,画的很好很直观!) 1.1.1 initial语句 ini…

[Computer Vision]图像分割技术

一、技术介绍 1.1 GrabCut 算法 1.1.1 算法原理 GrabCut 算法是一种交互式的图像分割方法,整体流程围绕着用户提供的少量先验信息(如用矩形框大致框选前景区域等),通过构建图模型、拟合高斯混合模型,利用图割算法不断迭代优化,实现了一种有效的交互式图像分割,最终将…

原型链与继承

#搞懂还是得自己动手# 原型链 function Person(name) { this.name name; } Person.prototype.sayName function() { console.log(this.name); };const p new Person("Alice"); 原型链关系图: 原型链:person->Person.prototype->O…