fix(netflow): сохранить IPv6 в смешанных шаблонах IPFIX

This commit is contained in:
Denozordec committed 2026-10-11 16:44:00 +07:00
1 parent c718654bc7
commit 11813179a7
13 files changed
+400 -20

No files matched your search

+12 -6
View File
@@ -1,4 +1,4 @@
import { canonicalIp } from "./traffic-flow-ip.js"
import { canonicalIp, isUnspecifiedIp } from "./traffic-flow-ip.js"
export interface ParsedFlow {
src: string
@@ -99,7 +99,7 @@ function ipv4(buf: Buffer, offset: number): string {
function usableIpfixIp(ip: string): boolean {
const t = String(ip ?? "").trim()
if (!t) return false
return t !== "0.0.0.0" && t.toLowerCase() !== "::" && t.toLowerCase() !== "::0"
return !isUnspecifiedIp(t)
}
function ipv6(buf: Buffer, offset: number): string {
@@ -238,16 +238,22 @@ function recordFromFields(
const { data } = field
switch (f.type) {
case 8:
if (data.length === 4) src = ipv4(data, 0)
if (data.length === 4) {
const value = ipv4(data, 0)
if (usableIpfixIp(value) || !usableIpfixIp(src)) src = value
}
break
case 12:
if (data.length === 4) dst = ipv4(data, 0)
if (data.length === 4) {
const value = ipv4(data, 0)
if (usableIpfixIp(value) || !usableIpfixIp(dst)) dst = value
}
break
case 27:
if (data.length === 16 && !src) src = ipv6(data, 0)
if (data.length === 16 && !usableIpfixIp(src)) src = ipv6(data, 0)
break
case 28:
if (data.length === 16 && !dst) dst = ipv6(data, 0)
if (data.length === 16 && !usableIpfixIp(dst)) dst = ipv6(data, 0)
break
case 15:
if (data.length === 4 && !nextHop) nextHop = ipv4(data, 0)