带有密码的Golang UDP远程Shell

时间:2019-04-17 05:57:36

标签: go udp

我正在用Golang做一个UDP shell(我在互联网上找到了它),但需要注意的是,它首先会提示您输入密码。

已经完成了密码比较(通过简单的比较),但是我想做的是,一旦用户输入密码,外壳就会打开,并且在关闭连接之前不再要求输入密码。

所以我的想法是要求输入密码,如果密码正确,则要通过另一个端口(反向外壳)连接回主机,则会发生连接,但不允许我在外壳上书写。

这是我的代码:

package main

import (
    "bufio"
    "strings"
    "fmt"
    "io"
    "log"
    "net"
    "os/exec"
    "syscall"
    "time"
)

func main() {
    udp_bind()
}


func udp_bind() {
    message := make([]byte, 2048)
    addr := net.UDPAddr{
        Port: 6666,
        IP:   net.ParseIP("127.0.0.1"),
    }
    ser, err := net.ListenUDP("udp", &addr)
    if err != nil {
        fmt.Printf("Some error %v\n", err)
        return
    }
    for {
        rlen, remoteaddr, err := ser.ReadFromUDP(message)
        if err != nil {
            fmt.Printf("Some error  %v", err)
            continue
        }
        data := strings.TrimSpace(string(message[:rlen]))
        fmt.Printf("received: %s from %s\n", data, remoteaddr)
        if data == "pwd" {
            go sendResponse(ser, remoteaddr, "From server: correct password ")
            go udp_reverse(remoteaddr)
        } else {
            go sendResponse(ser, remoteaddr, "From server: wrong password ")
        }

    }
}

func udp_reverse(host *net.UDPAddr) {
    obj := host.IP.String() + ":5555"
    remoteAddr, err := net.ResolveUDPAddr("udp", obj)
    conn, err := net.DialUDP("udp", nil, remoteAddr)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Established connection to %s \n", remoteAddr)
    log.Printf("Remote UDP address : %s \n", conn.RemoteAddr().String())
    log.Printf("Local UDP client address : %s \n", conn.LocalAddr().String())
    defer conn.Close()
    // receive message from server
    buffer := make([]byte, 1024)
    n, addr, err := conn.ReadFromUDP(buffer)

    fmt.Println("UDP Server : ", addr)
    fmt.Println("Received from UDP server : ", string(buffer[:n]))
}

我正在使用go run main.go运行服务器,使用ncat -4u -w1 localhost 6666从客户端连接netcat,并使用ncat localhost -vvul 5555从客户端设置侦听器。

这个想法是客户端通过netcat连接到服务器到端口6666,输入密码,如果密码正确,则服务器连接到客户端到端口5555(以前在客户端打开),并且客户端可以从那里将数据写入服务器。如果客户端关闭连接,则反向连接会停止,而端口6666会不断侦听服务器。

但是我进行了绑定连接,服务器正在侦听,我输入了密码,服务器响应说它是正确的,并且它在端口5555上打开了反向连接,但是我无法在{{1 }}我设置的监听器。

0 个答案:

没有答案