How tongtf/sshinjector works
SSHInjector is an Android VPN proxy that routes selected applications’ traffic through an in-app SOCKS5 service and SSH direct-tcpip channels. Users configure servers and keys, choose allowed apps, then connect from the dashboard; the VPN service establishes the TUN interface and delegates connection and packet handling to the controller. The graph includes documented DNS, domain-routing, provisioning, and settings capabilities. Some internal wiring is based on README descriptions because the supplied source excerpts are partial.
Main entry points: MainActivity.kt App Activity · VpnController.kt VPN Controller · JschSshClient.kt JSch SSH Client · ServerListScreen.kt Server Management
Components 22
Android UI
- App Activity
app/src/main/java/cn/srv0/sshinjector/ui/MainActivity.kt - Dashboard
app/src/main/java/cn/srv0/sshinjector/ui/screen/dashboard/DashboardScreen.kt - Server Management
app/src/main/java/cn/srv0/sshinjector/ui/screen/server/ServerListScreen.kt - App Whitelist
app/src/main/java/cn/srv0/sshinjector/ui/screen/whitelist/WhitelistScreen.kt - Proxy Settings
app/src/main/java/cn/srv0/sshinjector/ui/screen/settings/SettingsScreen.kt - Key Manager
app/src/main/java/cn/srv0/sshinjector/ui/screen/keymanager/KeyManagerScreen.kt
VPN and Domain
- VPN Service
app/src/main/java/cn/srv0/sshinjector/vpn/SshVpnService.kt - VPN Controller
app/src/main/java/cn/srv0/sshinjector/domain/usecase/VpnController.kt - Packet Processor
app/src/main/java/cn/srv0/sshinjector/domain/vpn/PacketProcessor.kt - SOCKS5 Proxy
app/src/main/java/cn/srv0/sshinjector/domain/vpn/Socks5ProxyServer.kt - DNS Interceptor
app/src/main/java/cn/srv0/sshinjector/domain/vpn/DnsInterceptor.kt - Tunnel Manager
app/src/main/java/cn/srv0/sshinjector/domain/vpn/tunnel/TunnelManager.kt - Domain Rules
app/src/main/java/cn/srv0/sshinjector/data/local/DomainListManager.kt
SSH and Provisioning
- SSH Key Manager
app/src/main/java/cn/srv0/sshinjector/data/remote/ssh/SshKeyManager.kt - JSch SSH Client
app/src/main/java/cn/srv0/sshinjector/data/remote/ssh/JschSshClient.kt - Server Provisioner
app/src/main/java/cn/srv0/sshinjector/data/remote/config/ServerProvisioner.kt
Local Data
- Server Repository
app/src/main/java/cn/srv0/sshinjector/domain/usecase/ServerRepository.kt - Room Database
app/src/main/java/cn/srv0/sshinjector/data/local/database/AppDatabase.kt - Settings Store
app/src/main/java/cn/srv0/sshinjector/data/local/preferences/SettingsDataStore.kt
Other components
- User
- SSH Server
- Selected Apps
Connections 27
- User → App Activity: opens
- App Activity → Dashboard: navigates
- App Activity → Server Management: navigates
- App Activity → App Whitelist: navigates
- App Activity → Proxy Settings: navigates
- App Activity → Key Manager: navigates
- Dashboard → VPN Service: starts or stops
- VPN Service → VPN Controller: connects
- VPN Controller → Tunnel Manager: starts plugin
- VPN Controller → Packet Processor: processes traffic
- Packet Processor → SOCKS5 Proxy: dispatches TCP
- Packet Processor → DNS Interceptor: dispatches DNS
- VPN Controller → Domain Rules: checks domains
- Tunnel Manager → JSch SSH Client: uses SSH channel
- JSch SSH Client → SSH Key Manager: loads identity
- JSch SSH Client → SSH Server: opens SSH channels
- Server Management → Server Repository: manages servers
- App Whitelist → Server Repository: manages allowed apps
- Server Repository → Room Database: reads and writes
- Proxy Settings → Settings Store: updates preferences
- Domain Rules → Settings Store: reads list settings
- Domain Rules → SSH Server: fetches rules
- Key Manager → SSH Key Manager: generates and imports
- Server Management → Server Provisioner: provisions server
- Server Provisioner → JSch SSH Client: executes commands
- App Whitelist → Selected Apps: selects apps
- VPN Service → Selected Apps: allows VPN traffic