@@ -31,7 +31,7 @@ type EventHandler struct {
3131 procMutex sync.RWMutex
3232}
3333
34- var classAPrivateSubnet , classBPrivateSubnet , classCPrivateSubnet , loopBackSubnet * net.IPNet
34+ var classAPrivateSubnet , classBPrivateSubnet , classCPrivateSubnet , loopBackSubnet , ipv6LinkLocalSubnet , ipv6LocalSubnet * net.IPNet
3535
3636func (eventHandler * EventHandler ) handleFileEvent (event * Event ) {
3737 eventHandler .fileMutex .Lock ()
@@ -239,6 +239,11 @@ func (eventHandler *EventHandler) GetToolChain(ppid, exe string) *Tool {
239239}
240240
241241func isPrivateIPAddress (ipAddress string ) bool {
242+
243+ if ipAddress == AllZeros {
244+ return true
245+ }
246+
242247 if classAPrivateSubnet == nil {
243248 _ , classAPrivateSubnet , _ = net .ParseCIDR (classAPrivateAddressRange )
244249 }
@@ -251,6 +256,12 @@ func isPrivateIPAddress(ipAddress string) bool {
251256 if loopBackSubnet == nil {
252257 _ , loopBackSubnet , _ = net .ParseCIDR (loopBackAddressRange )
253258 }
259+ if ipv6LinkLocalSubnet == nil {
260+ _ , ipv6LinkLocalSubnet , _ = net .ParseCIDR (ipv6LinkLocalAddressRange )
261+ }
262+ if ipv6LocalSubnet == nil {
263+ _ , ipv6LocalSubnet , _ = net .ParseCIDR (ipv6LocalAddressRange )
264+ }
254265
255266 ip := net .ParseIP (ipAddress )
256267
@@ -270,5 +281,18 @@ func isPrivateIPAddress(ipAddress string) bool {
270281 return true
271282 }
272283
284+ if ipv6LinkLocalSubnet .Contains (ip ) {
285+ return true
286+ }
287+
288+ if ipv6LocalSubnet .Contains (ip ) {
289+ return true
290+ }
291+
292+ // https://gist.github.com/nanmu42/9c8139e15542b3c4a1709cb9e9ac61eb
293+ if ip .IsLoopback () || ip .IsLinkLocalUnicast () || ip .IsLinkLocalMulticast () {
294+ return true
295+ }
296+
273297 return false
274298}
0 commit comments