ipv4.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package ipconv // import "fixup.cc/go/util/ipconv"
  2. import (
  3. "net"
  4. "strconv"
  5. "strings"
  6. )
  7. type IP4Convertor struct{}
  8. func NewIP4Convertor() *IP4Convertor {
  9. return &IP4Convertor{}
  10. }
  11. // 网络字节序大端整形 转换为x.x.x.x格式IP
  12. func (this *IP4Convertor) Inetntoa(ip_int int) string {
  13. return inet_ntoa(uint32(ip_int))
  14. }
  15. // x.x.x.x格式IP 转换为网络字节序大端整形
  16. func (this *IP4Convertor) Inetaton(ip_str string) int {
  17. return int(inet_aton(ip_str))
  18. }
  19. //////////////////////////////////////////////////////////////////////////////
  20. // 向C致敬
  21. func inet_ntoa(ipnr uint32) string {
  22. var bytes [4]byte
  23. bytes[0] = byte(ipnr & 0xFF)
  24. bytes[1] = byte((ipnr >> 8) & 0xFF)
  25. bytes[2] = byte((ipnr >> 16) & 0xFF)
  26. bytes[3] = byte((ipnr >> 24) & 0xFF)
  27. return net.IPv4(bytes[3], bytes[2], bytes[1], bytes[0]).String()
  28. }
  29. func inet_aton(ipnr string) uint32 {
  30. bits := strings.Split(ipnr, ".")
  31. b0, _ := strconv.Atoi(bits[0])
  32. b1, _ := strconv.Atoi(bits[1])
  33. b2, _ := strconv.Atoi(bits[2])
  34. b3, _ := strconv.Atoi(bits[3])
  35. var sum uint32
  36. sum += uint32(b0) << 24
  37. sum += uint32(b1) << 16
  38. sum += uint32(b2) << 8
  39. sum += uint32(b3)
  40. return sum
  41. }
  42. // Miling
  43. func InetNtoa(ipnr int64) net.IP {
  44. var bytes [4]byte
  45. bytes[0] = byte(ipnr & 0xFF)
  46. bytes[1] = byte((ipnr >> 8) & 0xFF)
  47. bytes[2] = byte((ipnr >> 16) & 0xFF)
  48. bytes[3] = byte((ipnr >> 24) & 0xFF)
  49. return net.IPv4(bytes[3], bytes[2], bytes[1], bytes[0])
  50. }
  51. func InetAton(ipnr string) int64 {
  52. bits := strings.Split(strings.Split(ipnr, ":")[0], ".")
  53. b0, _ := strconv.Atoi(bits[0])
  54. b1, _ := strconv.Atoi(bits[1])
  55. b2, _ := strconv.Atoi(bits[2])
  56. b3, _ := strconv.Atoi(bits[3])
  57. var sum int64
  58. sum += int64(b0) << 24
  59. sum += int64(b1) << 16
  60. sum += int64(b2) << 8
  61. sum += int64(b3)
  62. return sum
  63. }