netif.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // netif implements helper functions to read network interfaces.
  2. // warning: ONLY suport standard Linux interface config.
  3. package server
  4. import (
  5. "net"
  6. "strings"
  7. )
  8. var (
  9. InternalIP string
  10. ExternalIP string
  11. )
  12. const (
  13. confInternalIP = "internal"
  14. confExternalIP = "external"
  15. )
  16. //to see if an IP is internal ip
  17. func isInternalIP(ip string) bool {
  18. if ip == "127.0.0.1" {
  19. return true
  20. }
  21. ipSplit := strings.Split(ip, ".")
  22. if ipSplit[0] == "10" {
  23. return true
  24. }
  25. if ipSplit[0] == "172" && ipSplit[1] >= "16" && ipSplit[1] <= "31" {
  26. return true
  27. }
  28. if ipSplit[0] == "192" && ipSplit[1] == "168" {
  29. return true
  30. }
  31. return false
  32. }
  33. //read server IP
  34. func readNetInterfaces() {
  35. addrs, err := net.InterfaceAddrs()
  36. if err != nil {
  37. return
  38. }
  39. for _, inter := range addrs {
  40. if len(inter.String()) == 0 {
  41. continue
  42. }
  43. ip := strings.Split(inter.String(), "/")[0]
  44. if isInternalIP(ip) {
  45. InternalIP = ip
  46. } else {
  47. ExternalIP = ip
  48. }
  49. }
  50. if *confExIp != "" {
  51. ExternalIP = *confExIp
  52. }
  53. return
  54. }
  55. // fix host ip with "internal:port" or "external:port" format
  56. func fixHostIp(address string) (*addr, error) {
  57. var ex, in string
  58. if *confExIp != "" {
  59. if strings.Contains(address, confExternalIP) {
  60. in = strings.Replace(address, confExternalIP, "0.0.0.0", -1)
  61. ex = strings.Replace(address, confExternalIP, *confExIp, -1)
  62. } else if strings.Contains(address, confInternalIP) {
  63. in = strings.Replace(address, confInternalIP, InternalIP, -1)
  64. ex = in
  65. }
  66. } else {
  67. if strings.Contains(address, confInternalIP) {
  68. in = strings.Replace(address, confInternalIP, InternalIP, -1)
  69. ex = in
  70. } else {
  71. in = address
  72. ex = address
  73. }
  74. }
  75. return &addr{
  76. externalIp: ex,
  77. internalIp: in,
  78. }, nil
  79. }