network.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package network
  2. import (
  3. "encoding/json"
  4. "log"
  5. "net"
  6. "net/http"
  7. )
  8. type NICS struct {
  9. Flags string
  10. HardwareAddr string
  11. Index int
  12. MTU int
  13. IPv4Addr string
  14. IPv6Addr string
  15. IPv4MulticastAddrs string
  16. IPv6MulticastAddrs string
  17. Name string
  18. }
  19. func GetNICInfo(w http.ResponseWriter, r *http.Request){
  20. interfaces, err := net.Interfaces()
  21. if err != nil {
  22. sendJSONResponse(w, err.Error())
  23. }
  24. var NICList []NICS
  25. for _, i := range interfaces {
  26. InterfaceName := i.Name
  27. InterfaceIPv4 := ""
  28. InterfaceIPv6 := ""
  29. Flags := i.Flags.String()
  30. HardwareAddr := i.HardwareAddr.String()
  31. Index := i.Index
  32. MTU := i.MTU
  33. IPv4MulticastAddr := ""
  34. IPv6MulticastAddr := ""
  35. if HardwareAddr == "" {
  36. HardwareAddr = "N/A"
  37. }
  38. Addrs, _ := i.Addrs()
  39. for _, addr := range Addrs {
  40. var ip net.IP
  41. switch v := addr.(type) {
  42. case *net.IPNet:
  43. ip = v.IP
  44. case *net.IPAddr:
  45. ip = v.IP
  46. }
  47. ip = ip.To4()
  48. if ip != nil {
  49. InterfaceIPv4 = ip.String()
  50. } else {
  51. InterfaceIPv6 = ip.String()
  52. }
  53. }
  54. if InterfaceIPv4 == "" || InterfaceIPv4 == "<nil>" {
  55. InterfaceIPv4 = "N/A"
  56. }
  57. if InterfaceIPv6 == "" || InterfaceIPv6 == "<nil>" {
  58. InterfaceIPv6 = "N/A"
  59. }
  60. MultiAddrs, _ := i.MulticastAddrs()
  61. for _, addr := range MultiAddrs {
  62. var ip net.IP
  63. switch v := addr.(type) {
  64. case *net.IPNet:
  65. ip = v.IP
  66. case *net.IPAddr:
  67. ip = v.IP
  68. }
  69. ip = ip.To4()
  70. if ip != nil {
  71. IPv4MulticastAddr = ip.String()
  72. } else {
  73. IPv6MulticastAddr = ip.String()
  74. }
  75. }
  76. if IPv4MulticastAddr == "" || IPv4MulticastAddr == "<nil>" {
  77. IPv4MulticastAddr = "N/A"
  78. }
  79. if IPv6MulticastAddr == "" || IPv6MulticastAddr == "<nil>" {
  80. IPv6MulticastAddr = "N/A"
  81. }
  82. n := NICS{
  83. Flags: Flags,
  84. HardwareAddr: HardwareAddr,
  85. Index: Index,
  86. MTU: MTU,
  87. IPv4Addr: InterfaceIPv4,
  88. IPv6Addr: InterfaceIPv6,
  89. IPv4MulticastAddrs: IPv4MulticastAddr,
  90. IPv6MulticastAddrs: IPv6MulticastAddr,
  91. Name: InterfaceName,
  92. }
  93. NICList = append(NICList, n)
  94. }
  95. var jsonData []byte
  96. jsonData, err = json.Marshal(NICList)
  97. if err != nil {
  98. log.Println(err)
  99. }
  100. sendJSONResponse(w, string(jsonData))
  101. }
  102. //Get the IP address of the NIC that can conncet to the internet
  103. func GetOutboundIP() (net.IP, error) {
  104. conn, err := net.Dial("udp", "8.8.8.8:80")
  105. if err != nil {
  106. return nil, err
  107. }
  108. defer conn.Close()
  109. localAddr := conn.LocalAddr().(*net.UDPAddr)
  110. return localAddr.IP, nil
  111. }
  112. func GetPing(w http.ResponseWriter, r *http.Request) {
  113. sendJSONResponse(w, "pong")
  114. }