84 lines
1.4 KiB
Go
84 lines
1.4 KiB
Go
package main
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"io"
|
|
)
|
|
|
|
type localAddr struct {
|
|
Addr string
|
|
}
|
|
|
|
//metodo constructor
|
|
func CreateAddr() *localAddr {
|
|
return &localAddr {
|
|
Addr: "192.168.2.10:4444",
|
|
}
|
|
}
|
|
|
|
func (la localAddr) BindPort() {
|
|
listener, err := net.Listen("tcp", la.Addr)
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
defer listener.Close()
|
|
for {
|
|
conn, err := listener.Accept()
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
fmt.Println("\nConexion recibida de ", conn.RemoteAddr())
|
|
go handleConnection(conn)
|
|
}
|
|
}
|
|
|
|
func getShell(conn net.Conn) {
|
|
defer conn.Close()
|
|
go io.Copy(os.Stdout, conn)
|
|
io.Copy(conn, os.Stdin)
|
|
|
|
}
|
|
|
|
|
|
func handleConnection(conn net.Conn) {
|
|
defer conn.Close()
|
|
|
|
if len(os.Args) < 1 {
|
|
fmt.Println("Escribir comando que tenga que realizar el cliente")
|
|
} else if os.Args[1] == "shell" {
|
|
fmt.Println("Ejecutando shell remota en el cliente")
|
|
getShell(conn)
|
|
}
|
|
|
|
|
|
|
|
comando := os.Args[1:]
|
|
comandoUnido := strings.Join(comando, " ")
|
|
_, err := conn.Write([]byte(comandoUnido))
|
|
if err != nil {
|
|
fmt.Println("error al enviar orden")
|
|
}
|
|
|
|
conn.(*net.TCPConn).CloseWrite()
|
|
buf := make([]byte, 4096)
|
|
n, err := conn.Read(buf)
|
|
respuesta := strings.TrimSpace(string(buf[:n]))
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
fmt.Printf("Respuesta de %s:\n", conn.RemoteAddr())
|
|
fmt.Printf("====================\n")
|
|
fmt.Printf(respuesta)
|
|
fmt.Printf("\n====================")
|
|
}
|
|
|
|
func main() {
|
|
myBind := CreateAddr()
|
|
myBind.BindPort()
|
|
}
|
|
|
|
|