123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package main
- import (
- "fmt"
- "io"
- "net"
- "os"
- "strconv"
- "time"
- )
- // TCP4Server will open listeners and create Go Handlers
- func TCP4Server(port int) {
- service := "127.0.0.1:" + strconv.Itoa(port)
- fmt.Printf("Trying to server on %s\n\n", service)
- listener, err := net.Listen("tcp4", service)
- checkError(err)
- defer listener.Close()
- for {
- c, err := listener.Accept()
- checkError(err)
- go ServerHandler(c)
- }
- }
- func read(c net.Conn, ch chan []byte) {
- data := make([]byte, 0, 16384)
- tmp := make([]byte, 256)
- for {
- size, err := c.Read(tmp)
- if err != nil {
- if err == io.EOF {
- break
- }
- fmt.Printf("\n\n\n### Error on read %v", err)
- os.Exit(1)
- }
- data = append(data, tmp[:size]...)
- if size < 256 {
- ch <- data
- }
- }
- }
- // ServerHandler will receive data from the socket and answer to it
- func ServerHandler(c net.Conn) {
- p := NewProxy()
- ip := "192.168.100.4"
- p.SetAddrAndPort(ip, 22)
- p.OpenConnection()
- p.CheckError()
- chServer := make(chan []byte, 10)
- chClient := make(chan []byte, 10)
- sServer := make(chan []byte, 10)
- sClient := make(chan []byte, 10)
- for {
- go p.ReadAll(chServer)
- go read(c, chClient)
- select {
- case d := <-chClient:
- sServer <- d
- p.WriteBytes(sServer)
- fmt.Printf("\n\n-->Client: %s", string(d))
- case d := <-chServer:
- sClient <- d
- write(c, sClient)
- fmt.Printf("\n\n-->SSH Server: %s", string(d))
- default:
- fmt.Println("server...")
- }
- time.Sleep(30 * time.Millisecond)
- }
- }
- func write(c net.Conn, ch chan []byte) {
- select {
- case d := <-ch:
- c.Write(d)
- }
- }
- func checkError(err error) {
- if err != nil {
- fmt.Printf("\n\n\n### Error: %v", err)
- os.Exit(1)
- }
- }
- func main() {
- /*if len(os.Args) != 3 {
- fmt.Println("usage: %s ip-address\n", os.Args[0])
- os.Exit(1)
- }*/
- //port, _ := strconv.Atoi(os.Args[2])
- //OpenRequestIPV4(os.Args[1], port)
- TCP4Server(15232)
- }
|