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, 实时处理, 测试用例, 特征检测, 特权检测, 社交网络分析, 身份溯源, 逆向工具