netutils.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package netutils
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/http"
  6. "strconv"
  7. "imuslab.com/zoraxy/mod/utils"
  8. )
  9. /*
  10. This script handles basic network utilities like
  11. - traceroute
  12. - ping
  13. */
  14. func HandleTraceRoute(w http.ResponseWriter, r *http.Request) {
  15. targetIpOrDomain, err := utils.GetPara(r, "target")
  16. if err != nil {
  17. utils.SendErrorResponse(w, "invalid target (domain or ip) address given")
  18. return
  19. }
  20. maxhopsString, err := utils.GetPara(r, "maxhops")
  21. if err != nil {
  22. maxhopsString = "64"
  23. }
  24. maxHops, err := strconv.Atoi(maxhopsString)
  25. if err != nil {
  26. maxHops = 64
  27. }
  28. results, err := TraceRoute(targetIpOrDomain, maxHops)
  29. if err != nil {
  30. utils.SendErrorResponse(w, err.Error())
  31. return
  32. }
  33. js, _ := json.Marshal(results)
  34. utils.SendJSONResponse(w, string(js))
  35. }
  36. func TraceRoute(targetIpOrDomain string, maxHops int) ([]string, error) {
  37. return traceroute(targetIpOrDomain, maxHops)
  38. }
  39. func HandlePing(w http.ResponseWriter, r *http.Request) {
  40. targetIpOrDomain, err := utils.GetPara(r, "target")
  41. if err != nil {
  42. utils.SendErrorResponse(w, "invalid target (domain or ip) address given")
  43. return
  44. }
  45. results := []string{}
  46. for i := 0; i < 4; i++ {
  47. realIP, pingTime, ttl, err := PingIP(targetIpOrDomain)
  48. if err != nil {
  49. results = append(results, "Reply from "+realIP+": "+err.Error())
  50. } else {
  51. results = append(results, fmt.Sprintf("Reply from %s: Time=%dms TTL=%d", realIP, pingTime.Milliseconds(), ttl))
  52. }
  53. }
  54. js, _ := json.Marshal(results)
  55. utils.SendJSONResponse(w, string(js))
  56. }