Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/alw1ez/pano
OSINT (开源情报)侦察信息收集AI 安全
GitHubalw1ez/pano

PANO

基于图谱的开源情报调查平台,具有时间线分析、实体管理和AI驱动的转换功能,用于揭示电子邮件、用户名、图像和地点之间的隐藏联系。

查看仓库
5626816个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

PANO - 平台分析与网络运营平台

PANO 标志

许可证: CC BY-NC Python 3.11+ PySide6 平台

PANO 是一个强大的 OSINT 调查平台,它结合了图形可视化、时间线分析和 AI 驱动工具,帮助您发现数据中的隐藏联系和模式。

快速入门 • 功能特性 • 文档 • 贡献


https://github.com/user-attachments/assets/6b95e97a-ffdd-4056-b12b-f268d8e5d565

https://github.com/user-attachments/assets/af0c0f65-7b79-417c-a678-a789d42a6003

https://github.com/user-attachments/assets/568b4c28-be78-4559-a607-899fca2f9613

https://github.com/user-attachments/assets/6aa191eb-09de-41d5-b96f-4a2e32d6a0c2

https://github.com/user-attachments/assets/96377b80-e137-4eb4-9387-a0db4e49c2c1

https://github.com/user-attachments/assets/4228bda0-6c13-4ea9-bc07-d87abe367e10

🚀 快速入门

  1. 克隆仓库:

    root@kitploit:~
    git clone https://github.com/ALW1EZ/PANO.git
    cd PANO
    
  2. 运行应用程序:

    • Linux:./start_pano.sh
    • Windows:start_pano.bat

启动脚本将自动:

  • 检查更新
  • 设置 Python 环境
  • 安装依赖项
  • 启动 PANO

为了使用 Email Lookup 转换功能 您需要先使用 GHunt 登录。 通过启动脚本启动 PANO 后;

  1. 手动选择虚拟环境
    • Linux:source venv/bin/activate
    • Windows:call venv\Scripts\activate
  2. 查看如何登录 点击这里

💡 快速入门指南

  1. 创建调查:开始新的调查或加载现有调查
  2. 添加实体:从侧边栏将实体拖到图形上
  3. 发现关联:使用转换功能自动查找关系
  4. 分析:使用时间线和地图视图理解模式
  5. 保存:导出调查以备将来使用

🔍 功能特性

🕸️ 核心功能

  • 交互式图形可视化

    • 拖放创建实体
    • 多种布局算法(圆形、层次、径向、力导向)
    • 动态关系映射
    • 可视化的节点和边样式
  • 时间线分析

    • 按时间顺序的事件可视化
    • 交互式时间线导航
    • 事件过滤和分组
    • 时间关系分析
  • 地图集成

    • 地理数据可视化
    • 基于位置的分析
    • 交互式地图功能
    • 坐标绘制和追踪

🎯 实体管理

  • 支持的实体类型
    • 📧 电子邮件地址
    • 👤 用户名
    • 🌐 网站
    • 🖼️ 图片
    • 📍 位置
    • ⏰ 事件
    • 📝 文本内容
    • 🔧 自定义实体类型

🔄 转换系统

  • 电子邮件分析

    • Google 账户调查
    • 日历事件提取
    • 位置历史分析
    • 已连接服务发现
  • 用户名分析

    • 跨平台用户名搜索
    • 社交媒体资料发现
    • 平台关联分析
    • 网络足迹分析
  • 图片分析

    • 反向图片搜索
    • 视觉内容分析
    • 元数据提取
    • 相关图片发现

🤖 AI 集成

  • PANAI
    • 自然语言调查助手
    • 自动实体提取和关系映射
    • 模式识别和异常检测
    • 多语言支持
    • 上下文感知建议
    • 时间线和图形分析

🧩 核心组件

📦 实体

实体是 PANO 的基本构建块。它们代表可以被连接和分析的不同信息片段:

  • 内置类型

    • 📧 电子邮件:带有服务检测的电子邮件地址
    • 👤 用户名:社交媒体和平台的用户名
    • 🌐 网站:带有元数据的网页
    • 🖼️ 图片:带有 EXIF 和分析的图片
    • 📍 位置:地理坐标和地址
    • ⏰ 事件:基于时间的事件
    • 📝 文本:通用文本内容
  • 属性系统

    • 类型安全的属性验证
    • 自动属性获取器
    • 动态属性更新
    • 自定义属性类型
    • 元数据支持

⚡ 转换

转换是自动化的操作,用于处理实体以发现新的信息和关系:

  • 操作类型

    • 🔍 发现:从现有实体中查找新实体
    • 🔗 关联:连接相关实体
    • 📊 分析:从实体数据中提取洞察
    • 🌐 OSINT:收集开源情报
    • 🔄 丰富:向现有实体添加数据
  • 特性

    • 异步操作支持
    • 进度追踪
    • 错误处理
    • 速率限制
    • 结果验证

🛠️ 助手

助手是具有专用用户界面的专业化工具,用于特定的调查任务:

  • 可用助手

    • 🔍 交叉审查:分析陈述和证词
    • 👤 头像创建器:生成面部合成图
    • 📸 媒体分析器:高级图像处理和分析
    • 🔍 基地搜索器:搜索兴趣点附近
    • 🔄 翻译器:在语言之间翻译文本
  • 助手特性

    • 自定义 Qt 界面
    • 实时更新
    • 图形集成
    • 数据可视化
    • 导出功能

👥 贡献

我们欢迎贡献!要为 PANO 做贡献:

  1. 在 https://github.com/ALW1EZ/PANO/ 分支仓库
  2. 在您的分支中进行更改
  3. 彻底测试您的更改
  4. 向我们的主分支创建拉取请求
  5. 在您的拉取请求描述中,包括:
    • 更改的内容
    • 做出这些更改的原因
    • 您所做的任何测试
    • 屏幕截图(如果适用)

注意:我们使用单一 main 分支进行开发。所有拉取请求应直接提交到 main。

📖 开发指南

点击展开开发文档

系统要求

  • 操作系统:Windows 或 Linux
  • Python 3.11+
  • PySide6 用于 GUI
  • 在线功能需要互联网连接

自定义实体

实体是 PANO 中的核心数据结构。每个实体代表一个具有特定属性和行为的信息片段。要创建自定义实体:

  1. 在 entities 文件夹中创建一个新文件(例如 entities/phone_number.py)
  2. 实现您的实体类:
root@kitploit:~
from dataclasses import dataclass
from typing import ClassVar, Dict, Any
from .base import Entity

@dataclass
class PhoneNumber(Entity):
    name: ClassVar[str] = "Phone Number"
    description: ClassVar[str] = "A phone number entity with country code and validation"
    
    def init_properties(self):
        """Initialize phone number properties"""
        self.setup_properties({
            "number": str,
            "country_code": str,
            "carrier": str,
            "type": str,  # mobile, landline, etc.
            "verified": bool
        })
    
    def update_label(self):
        """Update the display label"""
        self.label = self.format_label(["country_code", "number"])

自定义转换

转换是处理实体并生成新洞察或关系的操作。要创建自定义转换:

  1. 在 transforms 文件夹中创建一个新文件(例如 )

📄 许可证

本项目采用知识共享署名-非商业性使用 (CC BY-NC) 许可证。

您可以自由地:

  • ✅ 分享:复制和重新分发材料
  • ✅ 改编:重新混合、转换和基于材料进行创作

遵守以下条款:

  • ℹ️ 署名:您必须给出适当的署名
  • 🚫 非商业性使用:不得用于商业目的
  • 🔓 无额外限制

🙏 致谢

特别感谢所有使本项目成为可能的库作者和贡献者。

👨‍💻 作者

由 ALW1EZ 借助 AI ❤️ 创建

下载工具
transforms/phone_lookup.py
  • 实现您的转换类:
  • root@kitploit:~
    from dataclasses import dataclass
    from typing import ClassVar, List
    from .base import Transform
    from entities.base import Entity
    from entities.phone_number import PhoneNumber
    from entities.location import Location
    from ui.managers.status_manager import StatusManager
    
    @dataclass
    class PhoneLookup(Transform):
        name: ClassVar[str] = "Phone Number Lookup"
        description: ClassVar[str] = "Lookup phone number details and location"
        input_types: ClassVar[List[str]] = ["PhoneNumber"]
        output_types: ClassVar[List[str]] = ["Location"]
        
        async def run(self, entity: PhoneNumber, graph) -> List[Entity]:
            if not isinstance(entity, PhoneNumber):
                return []
                
            status = StatusManager.get()
            operation_id = status.start_loading("Phone Lookup")
            
            try:
                # Your phone number lookup logic here
                # Example: query an API for phone number details
                location = Location(properties={
                    "country": "Example Country",
                    "region": "Example Region",
                    "carrier": "Example Carrier",
                    "source": "PhoneLookup transform"
                })
                
                return [location]
                
            except Exception as e:
                status.set_text(f"Error during phone lookup: {str(e)}")
                return []
                
            finally:
                status.stop_loading(operation_id)
    

    自定义助手

    助手是通过专用 UI 界面提供额外调查能力的专业化工具。要创建自定义助手:

    1. 在 helpers 文件夹中创建一个新文件(例如 helpers/data_analyzer.py)
    2. 实现您的助手类:
    root@kitploit:~
    from PySide6.QtWidgets import (
        QWidget, QVBoxLayout, QHBoxLayout, QPushButton,
        QTextEdit, QLabel, QComboBox
    )
    from .base import BaseHelper
    from qasync import asyncSlot
    
    class DummyHelper(BaseHelper):
        """A dummy helper for testing"""
        
        name = "Dummy Helper" 
        description = "A dummy helper for testing"
        
        def setup_ui(self):
            """Initialize the helper's user interface"""
            # Create input text area
            self.input_label = QLabel("Input:")
            self.input_text = QTextEdit()
            self.input_text.setPlaceholderText("Enter text to process...")
            self.input_text.setMinimumHeight(100)
            
            # Create operation selector
            operation_layout = QHBoxLayout()
            self.operation_label = QLabel("Operation:")
            self.operation_combo = QComboBox()
            self.operation_combo.addItems(["Uppercase", "Lowercase", "Title Case"])
            operation_layout.addWidget(self.operation_label)
            operation_layout.addWidget(self.operation_combo)
            
            # Create process button
            self.process_btn = QPushButton("Process")
            self.process_btn.clicked.connect(self.process_text)
            
            # Create output text area
            self.output_label = QLabel("Output:")
            self.output_text = QTextEdit()
            self.output_text.setReadOnly(True)
            self.output_text.setMinimumHeight(100)
            
            # Add widgets to main layout
            self.main_layout.addWidget(self.input_label)
            self.main_layout.addWidget(self.input_text)
            self.main_layout.addLayout(operation_layout)
            self.main_layout.addWidget(self.process_btn)
            self.main_layout.addWidget(self.output_label)
            self.main_layout.addWidget(self.output_text)
            
            # Set dialog size
            self.resize(400, 500)
            
        @asyncSlot()
        async def process_text(self):
            """Process the input text based on selected operation"""
            text = self.input_text.toPlainText()
            operation = self.operation_combo.currentText()
            
            if operation == "Uppercase":
                result = text.upper()
            elif operation == "Lowercase":
                result = text.lower()
            else:  # Title Case
                result = text.title()
                
            self.output_text.setPlainText(result)