util.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package tests
  2. import (
  3. "encoding/base64"
  4. "fmt"
  5. "io/ioutil"
  6. "net"
  7. "net/http"
  8. "time"
  9. frpNet "github.com/fatedier/frp/utils/net"
  10. )
  11. func sendTcpMsg(addr string, msg string) (res string, err error) {
  12. c, err := frpNet.ConnectTcpServer(addr)
  13. if err != nil {
  14. err = fmt.Errorf("connect to tcp server error: %v", err)
  15. return
  16. }
  17. defer c.Close()
  18. timer := time.Now().Add(5 * time.Second)
  19. c.SetDeadline(timer)
  20. c.Write([]byte(msg))
  21. buf := make([]byte, 2048)
  22. n, errRet := c.Read(buf)
  23. if errRet != nil {
  24. err = fmt.Errorf("read from tcp server error: %v", errRet)
  25. return
  26. }
  27. return string(buf[:n]), nil
  28. }
  29. func sendUdpMsg(addr string, msg string) (res string, err error) {
  30. udpAddr, errRet := net.ResolveUDPAddr("udp", addr)
  31. if errRet != nil {
  32. err = fmt.Errorf("resolve udp addr error: %v", err)
  33. return
  34. }
  35. conn, errRet := net.DialUDP("udp", nil, udpAddr)
  36. if errRet != nil {
  37. err = fmt.Errorf("dial udp server error: %v", err)
  38. return
  39. }
  40. defer conn.Close()
  41. _, err = conn.Write([]byte(msg))
  42. if err != nil {
  43. err = fmt.Errorf("write to udp server error: %v", err)
  44. return
  45. }
  46. buf := make([]byte, 2048)
  47. n, errRet := conn.Read(buf)
  48. if errRet != nil {
  49. err = fmt.Errorf("read from udp server error: %v", err)
  50. return
  51. }
  52. return string(buf[:n]), nil
  53. }
  54. func sendHttpMsg(method, url string, host string, header map[string]string) (code int, body string, err error) {
  55. req, errRet := http.NewRequest(method, url, nil)
  56. if errRet != nil {
  57. err = errRet
  58. return
  59. }
  60. if host != "" {
  61. req.Host = host
  62. }
  63. for k, v := range header {
  64. req.Header.Set(k, v)
  65. }
  66. resp, errRet := http.DefaultClient.Do(req)
  67. if errRet != nil {
  68. err = errRet
  69. return
  70. }
  71. code = resp.StatusCode
  72. buf, errRet := ioutil.ReadAll(resp.Body)
  73. if errRet != nil {
  74. err = errRet
  75. return
  76. }
  77. body = string(buf)
  78. return
  79. }
  80. func basicAuth(username, passwd string) string {
  81. auth := username + ":" + passwd
  82. return "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
  83. }