Fix decoding IPv6 addresses
This commit is contained in:
@@ -207,6 +207,7 @@ func procDelimiter(c rune) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func convertIPv4(data string) net.IP {
|
func convertIPv4(data string) net.IP {
|
||||||
|
// Decode and bullshit check the data length.
|
||||||
decoded, err := hex.DecodeString(data)
|
decoded, err := hex.DecodeString(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warningf("proc: could not parse IPv4 %s: %s", data, err)
|
log.Warningf("proc: could not parse IPv4 %s: %s", data, err)
|
||||||
@@ -216,11 +217,14 @@ func convertIPv4(data string) net.IP {
|
|||||||
log.Warningf("proc: decoded IPv4 %s has wrong length", decoded)
|
log.Warningf("proc: decoded IPv4 %s has wrong length", decoded)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Build the IPv4 address with the reversed byte order.
|
||||||
ip := net.IPv4(decoded[3], decoded[2], decoded[1], decoded[0])
|
ip := net.IPv4(decoded[3], decoded[2], decoded[1], decoded[0])
|
||||||
return ip
|
return ip
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertIPv6(data string) net.IP {
|
func convertIPv6(data string) net.IP {
|
||||||
|
// Decode and bullshit check the data length.
|
||||||
decoded, err := hex.DecodeString(data)
|
decoded, err := hex.DecodeString(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warningf("proc: could not parse IPv6 %s: %s", data, err)
|
log.Warningf("proc: could not parse IPv6 %s: %s", data, err)
|
||||||
@@ -230,6 +234,11 @@ func convertIPv6(data string) net.IP {
|
|||||||
log.Warningf("proc: decoded IPv6 %s has wrong length", decoded)
|
log.Warningf("proc: decoded IPv6 %s has wrong length", decoded)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Build the IPv6 address with the translated byte order.
|
||||||
|
for i := 0; i < 16; i += 4 {
|
||||||
|
decoded[i], decoded[i+1], decoded[i+2], decoded[i+3] = decoded[i+3], decoded[i+2], decoded[i+1], decoded[i]
|
||||||
|
}
|
||||||
ip := net.IP(decoded)
|
ip := net.IP(decoded)
|
||||||
return ip
|
return ip
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user