fix(netflow): сохранить IPv6 в смешанных шаблонах IPFIX
This commit is contained in:
1 parent
c718654bc7
commit
11813179a7
13 files changed
+400
-20
No files matched your search
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user