Echtzeit-Visualisierung von Server-Traffic auf einer interaktiven 2D- und 3D-Weltkarte mittels tcpdump über ssh.
TCPGEO verbindet sich per SSH mit Servern, führt tcpdump aus, löst die erfassten IPs über MaxMind GeoIP auf und zeigt den Traffic live auf einem Cyber-3D-Globus sowie einer 2D-Leaflet-Karte an.
- Echtzeit-Traffic-Visualisierung — Live-Arcs und Geo-Punkte auf 3D-Globus und 2D-Karte
- SSH-basiertes Capturing — Verbindung zu beliebigen Servern via Passwort oder SSH-Key
- GeoIP-Auflösung — Automatische IP → Standort-Zuordnung (Stadt, Land, Koordinaten)
- Cyber-UI — Dunkles Design mit Neon-Akzenten, HUD-Overlays und Starfield-Hintergrund
- Presets — Konfigurierbare tcpdump-Filter pro Server (Interface, Filter, Regex)
- Multi-User — JWT-basierte Authentifizierung mit Admin/Viewer-Rollen
- Server-Verwaltung — CRUD für SSH-Server mit Verbindungstest
- Auto-GeoIP-Update — Wöchentlicher Cron-Job aktualisiert die GeoIP-Datenbank
- systemd-Integration — Service-Datei und Management-Script inklusive
- Beschriftete Geo-Punkte — Flexible Labels mit Stadt/Land an jedem Traffic-Punkt
| Komponente | Version |
|---|---|
| OS | Debian / Ubuntu (oder kompatibel) |
| Node.js | ≥ 18 (empfohlen: 20+) |
| MaxMind Account | Kostenlos unter maxmind.com/en/geolite2/signup |
| Zielserver | SSH-Zugang + tcpdump installiert |
git clone https://github.com/bmetallica/TCPGEO.git /opt/tcpgeo
cd /opt/tcpgeo
sudo bash setup.shDas Setup-Script erledigt alles automatisch:
- Installiert Node.js 20 (falls nötig)
- Installiert npm-Abhängigkeiten
- Fragt den MaxMind License Key ab
- Initialisiert die Datenbank
- Lädt die GeoIP-Datenbank herunter
- Legt einen Admin-User an
- Installiert optional den systemd-Service
git clone https://github.com/bmetallica/TCPGEO.git /opt/tcpgeo
cd /opt/tcpgeonpm install --productioncp .env.example .env
nano .envMAXMIND_LICENSE_KEY=dein_license_key_hier
JWT_SECRET=ein_langer_zufaelliger_string
PORT=3333Tipp: JWT_SECRET generieren:
openssl rand -hex 32
npm run download-geoipnpm run init-dbnpm run create-admin -- admin deinPasswortnpm startDashboard öffnen: http://deine-ip:3333
# Service installieren und aktivieren
sudo cp service/tcpgeo.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now tcpgeo
# Oder über das mitgelieferte Script:
sudo bash service/tcpgeo-ctl.sh install
sudo bash service/tcpgeo-ctl.sh startVerfügbare Befehle:
bash service/tcpgeo-ctl.sh {install|start|stop|restart|status|logs}tcpgeo/
├── server.js # Haupt-Entry-Point
├── setup.sh # Quick-Install-Script
├── .env # Umgebungsvariablen
├── package.json
│
├── backend/
│ ├── auth.js # JWT-Authentifizierung
│ ├── aggregation.js # Paket-Aggregation (Anti-Flood)
│ ├── tcpdump-streamer.js # SSH + tcpdump Streaming
│ └── routes/
│ ├── auth-routes.js # Login / User-Management
│ ├── server-routes.js # Server CRUD + Verbindungstest
│ └── preset-routes.js # Preset CRUD
│
├── frontend/
│ ├── index.html # SPA Entry
│ ├── app.js # Client-Logik (Maps, Socket.io, UI)
│ └── cyberpunk.css # Cyberpunk-Theme
│
├── db/
│ ├── database.js # SQLite Zugriffs-Layer
│ ├── init-db.js # Schema-Migration
│ └── create-admin.js # Admin-User anlegen
│
├── geoip/
│ ├── geoip-resolver.js # IP → Geo-Daten
│ ├── download-geoip.js # MaxMind DB Download
│ └── geoip-update-scheduler.js # Auto-Update Cron
│
└── service/
├── tcpgeo.service # systemd Unit
└── tcpgeo-ctl.sh # Service-Management
| Variable | Standard | Beschreibung |
|---|---|---|
MAXMIND_LICENSE_KEY |
— | MaxMind GeoLite2 License Key (erforderlich) |
JWT_SECRET |
tcpgeo-secret-change-me |
Secret für JWT-Token-Signierung |
PORT |
3333 |
HTTP-Port des Dashboards |
GEOIP_UPDATE_SCHEDULE |
0 3 * * 0 |
Cron-Schedule für GeoIP-Updates |
- Im Dashboard einloggen
- Admin-Panel → Server → Neuer Server
- SSH-Daten eingeben (Host, Port, User, Passwort oder Key)
- Verbindung testen
- Optional: Presets mit tcpdump-Filtern anlegen
Presets definieren tcpdump-Parameter pro Server:
| Feld | Beispiel | Beschreibung |
|---|---|---|
| Interface | eth0 |
Netzwerk-Interface |
| Filter | port 80 or port 443 |
tcpdump BPF-Filter |
| Regex | (leer = Standard) | Eigener Regex zur IP-Extraktion |
- JWT_SECRET unbedingt in Produktion ändern
- Standard-Admin-Passwort nach Setup sofort ändern
- SSH-Keys statt Passwörter wenn möglich verwenden
- Zugriff auf Port 3333 per Firewall einschränken oder Reverse-Proxy (nginx) vorschalten
- Die
.env-Datei enthält Secrets — nicht ins Repository committen
MIT License — siehe LICENSE
Made with ☕ and tcpdump
