emperor-sec/Atmosphere
GitHub: emperor-sec/Atmosphere
一款基于 Go 的道德 OSINT 侦察面板,提供 IP 地理定位、设备指纹识别和 DNS 诊断功能。
Stars: 1 | Forks: 0
# Atmosphere
一款使用 Go 编写的道德 OSINT 侦察面板,用于 IP 地理定位、设备指纹识别和 DNS 诊断。
## 视图
1. **Self Scan** — 显示当前正在查看该面板的设备的信息。
2. **IP Lookup** — 对任何 IP 地址进行手动地理定位查询,并提供地图预览和地图链接。
3. **Batch Lookup** — 在单个请求中解析最多 20 个 IP 地址。
4. **DNS Tools** — 正向主机名解析和反向 PTR 查询。
5. **About** — 工具概述、功能介绍及道德使用指南。
## 功能
- 公网 IP 解析,支持自动多提供商地理定位回退(ip-api.com, ipwho.is, ipapi.co),以提高可靠性和准确性
- 通过 WebRTC ICE 候选者发现本地 IP(仅限 Self Scan,在客户端进行)
- User-Agent 解析:浏览器名称/版本、OS 名称/版本、渲染引擎
- 设备分类:Desktop、Mobile、Tablet、Bot,以及厂商和型号检测
- 在可用时提供移动网络、Proxy/VPN 和 Hosting/Datacenter 标志
- 纬度/经度坐标,附带直达 Google Maps 和 OpenStreetMap 的链接
- 面板内直接渲染的嵌入式交互式地图
- 正向和反向 DNS 解析工具
- Claude-desktop 风格的可折叠侧边栏导航,完全响应式
- GitHub Dark 主题 UI,仅使用 Font Awesome 图标,无表情符号
- 为每种报告类型提供 JSON 导出
## 关于海拔的说明
基于 IP 的地理定位提供商,包括本项目使用的所有提供商,均不提供海拔数据。海拔需要物理 GPS 传感器和明确的设备权限,这超出了 IP 到地理位置映射所能提供的范围。`Altitude` 字段被有意标记为“Not Available From IP Geolocation”,而不是显示伪造的值。
## 道德使用
Atmosphere 不会在未经知情或同意的情况下收集第三方数据。此面板中的所有功能仅适用于:
1. 访问者自身的连接和浏览器 (Self Scan)
2. 操作者明确输入的 IP 地址、IP 列表或主机名 (IP Lookup, Batch Lookup, DNS Tools)
没有跟踪链接生成器,没有隐蔽的捕获机制,也没有对访问者数据的持久化存储——报告仅在请求期间存在。请仅在您获得授权进行测试的系统和目标上使用此工具。
## 项目结构
```
atmosphere/
├── cmd/
│ └── server/
│ └── main.go # Entry point, routing, server bootstrap
├── internal/
│ ├── handler/
│ │ ├── api.go # /api/report, /api/lookup, /api/batch-lookup, /api/dns-resolve, /api/reverse-dns
│ │ └── page.go # Serves the main panel page
│ ├── middleware/
│ │ └── logger.go # Request logging & security headers
│ ├── model/
│ │ └── visitor.go # All shared data structures
│ └── service/
│ ├── geolocate.go # Multi-provider geolocation with fallback chain
│ ├── useragent.go # Browser/OS/device parsing
│ └── dnsresolve.go # Forward and reverse DNS resolution
├── web/
│ ├── static/
│ │ ├── css/style.css # GitHub Dark theme, sidebar layout, responsive
│ │ ├── js/app.js # Client-side logic (class AtmosphereClient)
│ │ └── img/logo.svg # Application logo
│ └── templates/
│ └── index.html # Sidebar shell and all views
├── go.mod
└── README.md
```
## 安装与运行
要求 Go >= 1.22。
```
cd atmosphere
go mod tidy
go run ./cmd/server
```
默认情况下,服务器运行在 `http://localhost:8080`。使用环境变量来指定不同的端口:
```
ATMOSPHERE_PORT=9090 go run ./cmd/server
```
构建生产环境二进制文件:
```
go build -o atmosphere-server ./cmd/server
./atmosphere-server
```
## 端点
| 方法 | 路径 | 描述 |
|--------|---------------------|-----------------------------------------------------------|
| GET | / | 主面板页面 |
| POST | /api/report | 请求设备的 Self-scan 报告 |
| POST | /api/lookup | 针对 `{"TargetIp": "8.8.8.8"}` 的地理定位查询 |
| POST | /api/batch-lookup | 针对 `{"TargetIps": ["8.8.8.8", "1.1.1.1"]}` 的地理定位查询(最多 20 个) |
| POST | /api/dns-resolve | 针对 `{"TargetHost": "example.com"}` 的正向 DNS 解析 |
| POST | /api/reverse-dns | 针对 `{"TargetIp": "1.1.1.1"}` 的反向 DNS/PTR 查询 |
## 部署说明
如果部署在反向代理(Nginx/Caddy)之后,请确保转发 `X-Forwarded-For` 标头,以便 Self Scan 能够准确检测访问者的公网 IP,因为 `service.ExtractClientIp` 会优先使用该标头,然后再回退到 `RemoteAddr`。
标签:DNS解析, ESC4, EVTX分析, GitHub, Go, IP地理定位, OSINT, Ruby工具, Web面板, 多模态安全, 实时处理, 开源项目, 数据可视化, 日志审计