Skip to content
This repository was archived by the owner on Feb 15, 2023. It is now read-only.

Commit b63f3c5

Browse files
committed
Use standard library for IP masking
Signed-off-by: Tobias Guggenmos <[email protected]>
1 parent 50b3afa commit b63f3c5

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

reducer/reducer.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ import (
99
bwmessage "github.com/bwNetFlow/protobuf/go"
1010
)
1111

12+
var (
13+
// Masks the last byte.
14+
IPv4Mask = net.IPv4Mask(0, 0, 0, 255)
15+
// Masks the last 64 bits.
16+
IPv6Mask = net.CIDRMask(64, 128)
17+
)
18+
1219
// Reducer stores the reduction specific configuration.
1320
type Reducer struct {
1421
// Fields which will be kept
@@ -45,13 +52,13 @@ func (r *Reducer) Process(msg *bwmessage.FlowMessage) *bwmessage.FlowMessage {
4552
if reduced_field.Type() == reflect.TypeOf([]uint8{}) {
4653
raw := reduced_field.Interface().([]uint8)
4754
address := net.IP(raw)
48-
raw[len(raw)-1] = 0
49-
if address.To4() == nil {
50-
for i := 2; i <= 8; i++ {
51-
raw[len(raw)-i] = 0
52-
}
55+
var maskedAddress net.IP
56+
if v4Addr := address.To4(); v4Addr != nil {
57+
maskedAddress = v4Addr.Mask(IPv4Mask)
58+
} else {
59+
maskedAddress = address.Mask(IPv6Mask)
5360
}
54-
reduced_field.Set(reflect.ValueOf(raw))
61+
reduced_field.Set(reflect.ValueOf(maskedAddress))
5562
} else {
5663
log.Printf("Field '%s' has type '%s'. Anonymization is only supported for IP types.", fieldname, reduced_field.Type())
5764
}

0 commit comments

Comments
 (0)