gahlautabhinav/xint

GitHub: gahlautabhinav/xint

一款基于 Playwright 浏览器自动化的 Twitter/X OSINT 网络关系映射工具,无需官方 API 即可构建社交关系图谱并进行跨平台身份关联分析。

Stars: 0 | Forks: 0

# xint — Twitter/X OSINT 网络映射器 ## 功能 - **网络爬取** — 关注、粉丝、提及、回复、引用推文、转推,支持可配置的深度 - **跨平台检测** — 从个人简介和置顶推文中检测 Instagram、GitHub、LinkedIn、TikTok、YouTube、Telegram、Discord 账号 - **联系信息 + 数据富化** — 公开发布的电子邮件/电话、位置、注册日期、个人头像、推文地理标签(优先展开 t.co 链接) - **发推时区推断** — 对推文时间戳进行分桶以估算账号可能的 UTC 偏移量(启发式 OSINT 信号) - **Hashtag 共现** — 对 Hashtag 进行排名,并显示共享这些 Hashtag 的账号对 (`GET /graph/hashtags`) - **用户名枚举** — 跨约 28 个平台进行 Sherlock 式检查;显示账号存在的位置 (`GET /enrich/username`) - **身份解析** — 交叉引用 GitHub、GitLab、Keybase 公共 API 以查找关联账号 (`GET /enrich/identity`) - **OSINT 枢纽分析** — 反向图片搜索链接、泄露检查提示、档案汇总 (`GET /enrich/pivots`) - **地理地图** — 通过 Nominatim 对账号位置字段进行地理编码,并在交互式 Leaflet 地图上绘制 (`GET /geo/locations`) - **网络交集** — 针对两个或多个种子账号的 Jaccard 相似度 + 公共节点图 (`GET /graph/intersection`) - **Bias agent 集成** — 可选的 [xint-bias-agent](https://github.com/gahlautabhinav/xint-bias-agent) 辅助进程;自动发送时间线进行分类;通过 UI 进行按需分析 - **档案页** — 单账号深入分析:个人资料、关系、跨平台链接、bias 标志 - **实时进度** — 爬取时显示实时终端风格的活动日志,每个账号的事件流式传输到 UI - **交互式图形 UI** — React + Cytoscape.js 可视化,拖拽响应式物理效果、点击展开节点、局部聚焦模式、感知缩放的标签 - **REST API + CLI** — FastAPI 后端,Click CLI (`xint`) - **停止 + 删除任务** — 干净地取消正在运行的爬取任务,删除已完成的任务及其事件历史记录 - **反检测** — Playwright(完整浏览器)、playwright-stealth、UA 轮换、类人延迟、可插拔的代理轮换 - **无需官方 X API** — 仅进行抓取,无需 API 密钥 ## 架构 ``` xint/ ├── scraper/ # Playwright browser automation, proxy/UA rotation, rate limiting ├── graph/ # networkx / Neo4j backends, relationship logic ├── api/ # FastAPI, serves data to CLI and frontend ├── frontend/ # React + Cytoscape.js graph visualization ├── cli/ # Click CLI └── storage/ # SQLite (dev) / Postgres (prod) via SQLAlchemy async ORM ``` ## 快速设置 **要求:** Python 3.10,Node.js 18+ ``` # Clone git clone https://github.com/gahlautabhinav/xint.git cd xint # Python 环境 py -3.10 -m venv .venv # Windows: .venv\Scripts\Activate.ps1 # macOS/Linux: source .venv/bin/activate # Install py -3.10 -m pip install -e ".[dev]" py -3.10 -m playwright install chromium # Verify pytest ``` 就是这样 — 本地开发无需更改 `.env`。默认使用 SQLite。 ## 身份验证(真实抓取必选) xint 需要经过身份验证的 X/Twitter 会话才能抓取个人资料。**在首次爬取之前执行此操作一次。** ### Cookie 方法(推荐) 1. 在您已登录的浏览器中打开 [x.com](https://x.com) 2. 打开开发者工具 → **Application** 标签 → **Cookies** → `https://x.com` 3. 复制 `auth_token` 和 `ct0` 的值 4. 运行: ``` xint login --cookies # 提示时粘贴 auth_token 和 ct0 ``` ### 检查登录状态 ``` xint auth status # shows whether a session is saved + token snippet xint auth revoke # delete session (then re-run login to switch accounts) ``` ## CLI 用法 ``` # 先进行 Authenticate xint login --cookies # Crawl 用户(depth 为 2,最多 200 个账号) xint crawl elonmusk --depth 2 --max-accounts 200 # 列出所有 jobs xint jobs list # 查看特定 job xint jobs show # 搜索目前已抓取的账号 xint accounts list xint accounts search alice # 导出 graph xint graph export elonmusk -o graph.json xint graph export elonmusk -o graph.csv --format csv # Hashtag 排名 + 分享 Hashtag 的账号 xint graph hashtags --min-shared 2 # Auth 管理 xint auth status xint auth revoke ``` ### 完整 CLI 参考 ``` xint --help xint crawl --help xint jobs --help xint accounts --help xint graph --help xint auth --help ``` ## Web UI Web UI 为您提供正在运行的爬取任务的实时视图、可搜索的任务列表以及交互式图形浏览器。 ### 启动 API 服务器 ``` # Windows — 为兼容 Playwright,必须使用 Proactor event loop uvicorn api.main:app --reload # 运行于 http://127.0.0.1:8000 ``` ### 启动前端 ``` cd frontend npm install npm run dev # 开启于 http://localhost:5173 ``` ### 使用 UI | 页面 | URL | 功能描述 | |------|-----|--------------| | Graph Explorer | `/` | 交互式网络图 — 搜索种子、拖动节点、缩放、聚焦 | | Jobs | `/jobs` | 列出所有爬取任务,启动新任务,删除已完成的任务 | | Job Detail | `/jobs/` | 实时终端日志、进度条、用于运行中任务的停止按钮 | | Accounts | `/accounts` | 所有已抓取账号的可搜索表格 | | Hashtags | `/hashtags` | 排名靠前的 Hashtag 共现表格 | | Network Intersection | `/intersection` | 用于两个或多个种子的 Jaccard 相似度图 | | Geo Map | `/geo` | 账号位置字段的 Leaflet 地图 | | Bias Analysis | `/bias` | Bias-agent 标志表格 + 按需分析表单 | | Dossier | `/dossier//` | 深度分析个人资料:简介、关系、跨平台链接、bias 标志 | #### Graph Explorer 提示 - **搜索** 用户名以加载其子图 - **点击** 节点以打开检查器(简介、粉丝数、边) - **拖拽** 任何节点 — 相邻节点会排斥并实时落位(cola 物理效果) - **缩小** — 次要节点的标签会淡出;枢纽/根节点/选中节点的标签保持可见 - **Focus mode**(目标图标)— 使所选节点 N 跳范围(1–3 跳,可配置)之外的所有内容变暗 - 通过工具栏按类型(FOLLOWS、MENTIONS、REPLIES_TO、CROSS_PLATFORM_LINK)**筛选**边 ## Bias Agent(可选) xint 与 [xint-bias-agent](https://github.com/gahlautabhinav/xint-bias-agent) 集成,这是一个独立的辅助进程,使用 Gemini 对 Twitter 时间线进行 bias 信号分类。 ### 设置 1. 克隆并配置 xint-bias-agent: git clone https://github.com/gahlautabhinav/xint-bias-agent cd xint-bias-agent echo "GEMINI_API_KEY=your_key_here" > .env py -3.10 -m src.server # 在 5000 端口启动 2. 添加到 xint 的 `.env` 中: BIAS_AGENT_URL=http://127.0.0.1:5000 3. 重启 xint 后端。现在每次爬取都会自动发送时间线到该 agent。 ### 按需分析 从 **Bias** 页面中,输入 `@username` 并点击 **Analyze Now** — xint 会按需抓取该账号并触发立即分类。 ### 回填现有数据 一次性将所有存储的关系推送到 bias agent: ``` curl -X POST http://127.0.0.1:8000/api/v1/jobs/sync-bias-connections ``` ## 代理设置(可选) 该工具无需代理即可工作(使用您的真实 IP)。对于生产环境: ``` # 创建 proxy 列表 cp config/proxies.txt.example config/proxies.txt # 编辑 config/proxies.txt — 每行一个 proxy: # http://host:port # http://user:pass@host:port # socks5://host:port ``` ## 配置 所有设置均通过 `.env`(或环境变量)进行。将 `.env.example` 复制到 `.env` 以覆盖默认值。 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `DATABASE_URL` | `sqlite+aiosqlite:///./data/xint.db` | 在生产环境中切换为 `postgresql+asyncpg://...` | | `GRAPH_BACKEND` | `networkx` | `networkx`(默认)或 `neo4j` | | `RATE_PROFILE` | `moderate` | `conservative` / `moderate` / `aggressive` | | `DEFAULT_DEPTH` | `2` | 爬取深度 (1–4) | | `BROWSER_POOL_SIZE` | `3` | 并发浏览器上下文 | | `API_KEY` | _(无)_ | 设置后将在所有 API 请求中要求 `X-API-Key` 标头 | | `BIAS_AGENT_URL` | _(无)_ | xint-bias-agent 辅助进程的 URL(例如 `http://127.0.0.1:5000`);启用 bias 分类 | ## 运行测试 ``` py -3.10 -m pytest # all tests (397 currently) py -3.10 -m pytest tests/test_api.py # API layer only py -3.10 -m pytest tests/test_crawler.py # crawler + jobs py -3.10 -m pytest -m live # live browser tests (needs auth + network) ``` ## 安全 通过 [SECURITY.md](SECURITY.md) 报告漏洞 — **不要公开发布 issue**。 ## 许可证 MIT — 请参阅 [LICENSE](LICENSE)。
标签:AV绕过, Cytoscape, ESC4, FastAPI, OSINT, React, Syscalls, 实时处理, 测试用例, 特征检测, 特权检测, 社交网络分析, 身份溯源, 逆向工具