tkanov/egresslens
GitHub: tkanov/egresslens
EgressLens 是一款专为监控 Docker 中 Python 应用出站网络活动而设计的工具,提供可视化界面和日志分析功能。
Stars: 0 | Forks: 0
# EgressLens
追踪Docker中Python应用的出站网络活动,将事件写入JSONL格式,并通过小型网页界面检查结果。
[](LICENSE)
[](https://www.python.org/downloads/)
[](https://www.docker.com/)
## 功能说明
EgressLens在`strace`下运行应用,捕获IPv4网络系统调用,并生成:
- `egress.jsonl`:解析后的连接事件
- `egress.strace`:原始跟踪输出
- `run.json`:命令、镜像、计时、退出码和事件计数
后端可以通过跟踪中被动DNS观察到的域名来丰富上传的报告,然后对未解析的公共IPv4地址进行有界反向DNS查询。
## 快速开始
要求:Docker 20.10+、Python 3.8+,以及用于UI的Node.js 18+。
```
pip install -e cli/
docker build -t egresslens/base:latest .
egresslens run-app ./sample_app --args "dns example.com"
```
输出将位于`egresslens-output/`目录中。
## 查看报告
启动API:
```
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
```
启动UI:
```
cd frontend
npm install
npm run dev
```
打开`http://localhost:5173`并上传:
- `egresslens-output/egress.jsonl`作为报告
- `egresslens-output/run.json`作为元数据
- `egresslens-output/egress.strace`用于域名丰富

## 命令行界面
追踪一个入口点为`__main__.py`、`main.py`或`app.py`的Python项目:
```
egresslens run-app ./my_python_app --args "arg1 arg2"
```
追踪任意命令:
```
egresslens watch -- curl https://example.com
```
常用选项:
- `--out `:将输出写入其他位置
- `--image `:使用已安装`strace`的不同镜像
更多详情:[cli/README.md](cli/README.md)。
## 仓库结构
- `cli/`:捕获网络活动并写入跟踪产物
- `backend/`:FastAPI上传、聚合、丰富和导出API
- `frontend/`:用于上传和报告的React UI
- `sample_app/`:用于可预测演示流量的小型应用
- `docs/getting-started.md`:包含截图的较长入门指南
## 安全模型
跟踪需要降低隔离性的Docker设置:
- `--cap-add SYS_PTRACE`
- `--security-opt seccomp=unconfined`
CLI仍会以只读方式挂载应用,丢弃其他权限,使用`no-new-privileges`,并提供tmpfs临时空间。将跟踪的代码视为您选择运行的代码。
## 限制
- 仅限IPv4。目前忽略IPv6连接。
- 域名丰富功能可以看到`egress.strace`中的UDP DNS A记录应答;不覆盖DNS-over-HTTPS、DNS-over-TLS、缓存DNS、TCP DNS、AAAA记录或IPv6。
- 反向DNS回退会跳过私有和不可路由的IP范围,并受后端配置限制。
## 许可证
MIT。参见[LICENSE](LICENSE)。
标签:DNS解析, Docker, JSONL日志, MITM代理, Python应用, SYN扫描, Web截图, Web界面, 出站流量分析, 域名解析, 安全防御评估, 容器安全, 工具开发, 应用监控, 开源项目, 系统调用跟踪, 被动DNS, 请求拦截, 逆向工具