main.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "net"
  6. "os"
  7. "strconv"
  8. "time"
  9. )
  10. // TCP4Server will open listeners and create Go Handlers
  11. func TCP4Server(port int) {
  12. service := "127.0.0.1:" + strconv.Itoa(port)
  13. fmt.Printf("Trying to server on %s\n\n", service)
  14. listener, err := net.Listen("tcp4", service)
  15. checkError(err)
  16. defer listener.Close()
  17. for {
  18. c, err := listener.Accept()
  19. checkError(err)
  20. go ServerHandler(c)
  21. }
  22. }
  23. func read(c net.Conn, ch chan []byte) {
  24. data := make([]byte, 0, 16384)
  25. tmp := make([]byte, 256)
  26. for {
  27. size, err := c.Read(tmp)
  28. if err != nil {
  29. if err == io.EOF {
  30. break
  31. }
  32. fmt.Printf("\n\n\n### Error on read %v", err)
  33. os.Exit(1)
  34. }
  35. data = append(data, tmp[:size]...)
  36. if size < 256 {
  37. ch <- data
  38. }
  39. }
  40. }
  41. // ServerHandler will receive data from the socket and answer to it
  42. func ServerHandler(c net.Conn) {
  43. p := NewProxy()
  44. ip := "192.168.100.4"
  45. p.SetAddrAndPort(ip, 22)
  46. p.OpenConnection()
  47. p.CheckError()
  48. chServer := make(chan []byte, 10)
  49. chClient := make(chan []byte, 10)
  50. sServer := make(chan []byte, 10)
  51. sClient := make(chan []byte, 10)
  52. for {
  53. go p.ReadAll(chServer)
  54. go read(c, chClient)
  55. select {
  56. case d := <-chClient:
  57. sServer <- d
  58. p.WriteBytes(sServer)
  59. fmt.Printf("\n\n-->Client: %s", string(d))
  60. case d := <-chServer:
  61. sClient <- d
  62. write(c, sClient)
  63. fmt.Printf("\n\n-->SSH Server: %s", string(d))
  64. default:
  65. fmt.Println("server...")
  66. }
  67. time.Sleep(30 * time.Millisecond)
  68. }
  69. }
  70. func write(c net.Conn, ch chan []byte) {
  71. select {
  72. case d := <-ch:
  73. c.Write(d)
  74. }
  75. }
  76. func checkError(err error) {
  77. if err != nil {
  78. fmt.Printf("\n\n\n### Error: %v", err)
  79. os.Exit(1)
  80. }
  81. }
  82. func main() {
  83. /*if len(os.Args) != 3 {
  84. fmt.Println("usage: %s ip-address\n", os.Args[0])
  85. os.Exit(1)
  86. }*/
  87. //port, _ := strconv.Atoi(os.Args[2])
  88. //OpenRequestIPV4(os.Args[1], port)
  89. TCP4Server(15232)
  90. }