refactor: seperate application into seperate files and add killForwarding

This commit is contained in:
Patryk Hegenberg 2025-01-03 12:50:04 +01:00
parent fec43ea77d
commit a7ea6f41a7
7 changed files with 481 additions and 357 deletions

58
forwarder.go Normal file
View file

@ -0,0 +1,58 @@
package main
import (
"io"
"log"
"net"
"golang.org/x/crypto/ssh"
)
type PortFowarder struct {
sshCon *ssh.Client
localPort string
remotePort string
remoteHost string
}
func NewPortForwarder(sshCon *ssh.Client, localPort, remotePort, remoteHost string) *PortFowarder {
return &PortFowarder{
sshCon: sshCon,
localPort: localPort,
remotePort: remotePort,
remoteHost: remoteHost,
}
}
func (pw *PortFowarder) forward() error {
listener, err := net.Listen("tcp", "127.0.0.1:"+pw.localPort)
if err != nil {
log.Printf("Fehler beim Öffnen des lokalen Ports %s: %v", pw.localPort, err)
return err
}
defer listener.Close()
for {
localConn, err := listener.Accept()
if err != nil {
log.Printf("Fehler beim Akzeptieren der Verbindung: %v", err)
continue
}
remoteConn, err := pw.sshCon.Dial("tcp", pw.remoteHost+":"+pw.remotePort)
if err != nil {
log.Printf("Fehler beim Verbinden zum Remote-Host %s:%s: %v", pw.remoteHost, pw.remotePort, err)
localConn.Close()
continue
}
go pw.copyConn(localConn, remoteConn)
go pw.copyConn(remoteConn, localConn)
}
}
func (pw *PortFowarder) copyConn(dst, src net.Conn) {
defer dst.Close()
defer src.Close()
io.Copy(dst, src)
}