main.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io/ioutil"
  6. "net"
  7. "os"
  8. "strconv"
  9. "strings"
  10. )
  11. // TCP4Server will open listeners and create Go Handlers
  12. func TCP4Server(port int) {
  13. service := "127.0.0.1:" + strconv.Itoa(port)
  14. fmt.Printf("Trying to server on %s\n\n", service)
  15. listener, err := net.Listen("tcp4", service)
  16. checkError(err)
  17. defer listener.Close()
  18. for {
  19. c, err := listener.Accept()
  20. checkError(err)
  21. go ServerHandler(c)
  22. }
  23. }
  24. // ServerHandler will receive data from the socket and answer to it
  25. func ServerHandler(c net.Conn) {
  26. for {
  27. r := bufio.NewReader(c)
  28. aux, err := r.ReadString('\n')
  29. checkError(err)
  30. result := strings.TrimSpace(aux)
  31. fmt.Println(string(result))
  32. answer := OpenRequestIPV4(result, 80)
  33. c.Write([]byte(answer))
  34. }
  35. c.Close()
  36. }
  37. // OpenRequestIPV4 Opens a request to an ipv4 tcp network address
  38. func OpenRequestIPV4(ipv4Address string, port int) string {
  39. service := ipv4Address + ":" + strconv.Itoa(port)
  40. tcpv4Addr, _ := net.ResolveTCPAddr("tcp", service)
  41. conn, _ := net.DialTCP("tcp4", nil, tcpv4Addr)
  42. _, _ = conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\nGet index.html"))
  43. result, _ := ioutil.ReadAll(conn)
  44. return string(result)
  45. }
  46. func checkError(err error) {
  47. if err != nil {
  48. fmt.Println(err.Error())
  49. os.Exit(1)
  50. }
  51. }
  52. func main() {
  53. /*if len(os.Args) != 3 {
  54. fmt.Println("usage: %s ip-address\n", os.Args[0])
  55. os.Exit(1)
  56. }*/
  57. //port, _ := strconv.Atoi(os.Args[2])
  58. //OpenRequestIPV4(os.Args[1], port)
  59. TCP4Server(15232)
  60. }