1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package sshprox
- import (
- "errors"
- "net/http"
- "net/url"
- "os"
- "os/exec"
- "path/filepath"
- "runtime"
- "imuslab.com/zoraxy/mod/reverseproxy"
- "imuslab.com/zoraxy/mod/utils"
- )
- /*
- SSH Proxy
- This is a tool to bind gotty into Zoraxy
- so that you can do something similar to
- online ssh terminal
- */
- type Instance struct {
- ExecPath string
- }
- func NewSSHProxy(binaryRoot string) (*Instance, error) {
- //Check if the binary exists in system/gotty/
- binary := "gotty_" + runtime.GOOS + "_" + runtime.GOARCH
- execPath := filepath.Join(binaryRoot, binary)
- if !utils.FileExists(execPath) {
- //Binary not found
- return nil, errors.New("binary not found at " + execPath)
- }
- //Convert the binary path to realpath
- realpath, err := filepath.Abs(execPath)
- if err != nil {
- return nil, err
- }
- return &Instance{
- ExecPath: realpath,
- }, nil
- }
- //Create a new Connection to target address
- func (i *Instance) CreateNewConnection(ipaddr string) (*reverseproxy.ReverseProxy, error) {
- //Create a gotty instance
- cmd := exec.Command(i.ExecPath, "-p", "8080", "-w", "ssh", ipaddr)
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
- cmd.Run()
- //Create a new proxy agent for this root
- path, err := url.Parse(ipaddr)
- if err != nil {
- return nil, err
- }
- proxy := reverseproxy.NewReverseProxy(path)
- return proxy, nil
- }
- func HandleWebSSHConnection(w http.ResponseWriter, r *http.Request) {
- }
|