refactor: seperate application into seperate files and add killForwarding
This commit is contained in:
parent
fec43ea77d
commit
a7ea6f41a7
7 changed files with 481 additions and 357 deletions
58
forwarder.go
Normal file
58
forwarder.go
Normal 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)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue