From eeec1b22cd29e5abfddfad7a436758ce01440726 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:09:53 +0100 Subject: [PATCH 01/18] Update docs --- README.md | 2 +- docs/collectors.md | 2 +- docs/loggers/logger_kafka.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 48459d79..7b2ff715 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ *NOTE: The code before version 1.x is considered beta quality and is subject to breaking changes.* -`DNS-collector` acts as a passive high speed **ingestor, aggregator and distributor** for your DNS logs with usage indicators and security analysis, written in **Golang**. The DNS traffic can be collected and aggregated from simultaneously [sources](./docs/collectors.md) like DNStap streams, network interface or log files and relays it to multiple other [listeners](./docs/loggers.md) with some [transformations](./docs/transformers.md) on it ([traffic filtering](./docs/transformers.md#dns-filtering), [user privacy](./docs/transformers.md#user-privacy), ...). +`DNS-collector` acts as a passive high speed **ingestor** with **pipelining** support for your DNS logs, written in **Golang**. It allows enhancing your DNS logs by adding metadata, extracting usage patterns, and facilitating security analysis. The DNS traffic can be collected and aggregated from simultaneously [sources](./docs/collectors.md) like DNStap streams, network interface or log files and relays it to multiple other [listeners](./docs/loggers.md) with some [transformations](./docs/transformers.md) on it ([traffic filtering](./docs/transformers.md#dns-filtering), [user privacy](./docs/transformers.md#user-privacy), ...). > Additionally, DNS-collector also support > diff --git a/docs/collectors.md b/docs/collectors.md index 3bd916c2..312c89e2 100644 --- a/docs/collectors.md +++ b/docs/collectors.md @@ -7,4 +7,4 @@ | [Tail](collectors/collector_tail.md) | Tail on plain text file | | [XDP Sniffer](collectors/collector_xdp.md) | Live capture on network interface with XDP | | [AF_PACKET Sniffer](collectors/collector_afpacket.md) | Live capture on network interface with AF_PACKET socket | -| [File Ingestor](collectors/collector_file.md) | File ingestor like pcap | +| [File Ingestor](collectors/collector_fileingestor.md) | File ingestor like pcap | diff --git a/docs/loggers/logger_kafka.md b/docs/loggers/logger_kafka.md index 83895a6d..027fb8a0 100644 --- a/docs/loggers/logger_kafka.md +++ b/docs/loggers/logger_kafka.md @@ -1,6 +1,6 @@ # Logger: Kafka Producer -Kafka producer +Kafka producer, based on [kafka-go](https://github.com/segmentio/kafka-go) library. Options: From 6b6bce94266a6208d71086e58d204946cd1d6341 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 12:11:08 +0100 Subject: [PATCH 02/18] update overview diagram --- README.md | 2 +- docs/_images/overview.png | Bin 39023 -> 21778 bytes docs/overview.drawio | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7b2ff715..da20f666 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Run dnscollector

-Multiplexer +Pipelining ![overview](./docs/_images/overview.png) diff --git a/docs/_images/overview.png b/docs/_images/overview.png index 158e92c98d11132f8693133f59ae22adfba94ccb..5e5e569e73991586e2d5ed124a9493cb8bc38c1e 100644 GIT binary patch literal 21778 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%0Dx9 zKRdlwk5x3x-O-g=zMwlE-a?ilA!_rS==Lm zqFs+Vfg(|jN9Glm)Hi^7$2an%LvQqwZkU(dn05qw-m*8>W0^UQnp5*MVKb@pfaJ)z zrFp>R-zS^#9Qj$6f%eb&03aN_{&8k8ZD%P=@22wZ4-<+9 z8oylS8K_+$Dar=N6!z*%kVFMXpHx{Bw=D(-vy4x&r@-B8Pui2!2sA1DxFf z6JOcd5lK%*5}H^*-T#k0*PqT*A3V0Of2~yY%>PH&Ux!8YzR|^I6=`C^9v?{s0n8liA3i6U_j2fMFGtd%7Z20DI z(Mv|puzN75J?auS!I&Jnr7)ismRqp+41y#{Z3Rq0A#+$ip*h!BUiMR#_rgX`ZyizFZ~9H<@U8k`0cdV z{5LJr>CxbXDduDsv#Ywr1T{LSk)hx(uFn+-4CV(Yshof3Z~-{v1+8Nf9$-PHca`FH zLAS?Nmb-tbNc}0p04vyX2!;rF8$v??6hO2jmS{!-fRxfdz3%~rRN)kIdpE!TA9n-n zR2*e5WrrTO=Bvo^rgQw@n=7BBZ936c5nq&IzF0K}y^Q+dJR#&f+d!+4!V9aL1k{1H zp*)QruSU7+&q4q67%^29;^hHY>Dq+L`E6jd25tM5`bM{+FKPsL4woY%I9EV;yKWm6LI$+Z@vp znN_2oDCh#qWi7KPML*x3uHElCJw1gJ(uv#!{I_?0iQ|E%y9+0E^MEJgFjFVGzuX%IVn*)smM}oC!s0eA`XJTj|-ej}d|RYPG>PGTcu~5a5ZXh|vG-;FD&f?(t*B0~=T(74!JGVdDj5xPw*>2o{xne@?Q9vo#Wpbf*gLqyUCo^x9X;d3Oj4YU zE7^g^pRl~Su~q?J@%{6xG?fP1?j)qo4in~`JK)&hn!pJS1l%$~yB^8`YE14W3)$D3 zA7^flLogS<8j`LLHpzT4s;7V6Vr6_zDADO#66Q&T<36o~sK}e=;{L~*9)y&19%vLE z9(pNapx`Ye)G9PC&$<*y zuCVX_5_EOGPj@cle!BaDw)%#%v4)O8&VE|Bf!ArzhR=L=6I1A zQmYU}?C|&d{ie%(jWfD8<-gNJH6qhU5wiZrn%Ak&3b{~BAT@w!&uh)T=I(%A10t11 zg7}-Sx@&{ExL6EeJ=GNqloOcZWN$7h0PB(8#DoydpE%?47@S-52J0Rygy=dEdXh

?z1x+2lgu( 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 \ No newline at end of file +7Vtbd5s4EP41PDYHxMXw2Dhp+7Db7B737LZ5IyDbnGDEkeVbf32FuUs4gCMsWpvkAQ1iBPN9MxqNsKJPV/vP2I2XfyMfhgpQ/b2iPygAaAYASvKv+odUYk3UVLDAgZ91KgWz4CfMhHm3TeDDda0jQSgkQVwXeiiKoEdqMhdjtKt3m6OwPmrsLiAnmHluyEv/D3yyTKW2qZbyLzBYLPORNTW7snLzzplgvXR9tKuI9EdFn2KESHq22k9hmBgvt0t636cTV4sHwzAiXW748KSvnreLffDt3+cNft799/S4/ZBp2brhJnvh7GHJIbcAjPyPiSFpK0IRFd4vySqkLY2eYrSJfJiMoNLWmmD0WtjJLCRTFCJ81KZPjwe9ko4Dfc785ftohZUovSBaQYIPtMuuxCGHYVmBIJdhGLok2NbVuxkdFoW6YoR/UEAHBmpOXSvTcyiQratYow32YHZX1e6MIqC2KCIuXkDCKaInldcuRUdYe0AMOIgfvs6+ubECrJCa7P4F07NFckZhCqkPUahYDpQwJ6DvlgGBs9j1kqs76vd1TsyDMKwgrnuGboImLugavWIkd6CIVOTz40HlLvayiGAVjNlCTOC+L2dOYOFkzQql7AZKGepp9tTg6ouNzmHzMY7DAw8NwW60niO8WgvFBrovtuZw2GR+zsCiHo8aLBMxsOj2uGAxOFj+QosGUFAyowQUiAv4SzMmhasIQMG0xoWCyaHwFZIdwq88ErMomM/hReJWCw6lbzjDhCxtIhkWi4Pljh7XYPrCprJMP+FMz5l9oGyNWgwfvmc3Hhs/ksadmTcf9tWLD4espXTM8mhWf8yC2uZKWdkgYGYoTXXuJkAtD72usWtyqIN+egfOFW15BNsH5HumJTmv0Iu2SnYljf7kSuFoT8RaSWjIJKExGYaEJkvuC69QHGms68ogWYhbxjCIWz3D2cAEyPl2Y0B7GcIWwwAurWzROzQDxBWitAulNt4GbwvK/bF5jiC6cXnOeXSj+LuHSrc46bA+/Tq6xgzrqG8/Jttfq/WnJ+kTiOU+4Lj/FMOIX+UmAwWe2ArQaKoN0te1Gl+Mu9YQlDJSWporqvLOUczultf2jTImG9y0t6MM19/u2b8lipls1uhcIorxRdNz3edPy+G4LF7QpMpl8ZJzOL5ge2qnaUaZMIpy7QATmfQqocZXaC/liSMoE6YsHEv+DMzEJc9zb3ZXDFjdpi9h/iyv3Dz2iM6uyt8DM7fL0KBraKTl1X3HjjQ7d78HaXa+loG0uFrrpRY5+c5AuRvwQyn3CZp3Bs5cGAnbJpA7CXH7BICZODovoBhFRagSvIAyQPNMd+q5jBMz46ALnPwZO7qOjzYvIbwPkff6Vqykd3wKwvxa3Z/0Jn+6P/79BpFTa9hjcCbvX/Xkq9muentzVPgHeP1q2zfiNCxrLasCsC2IOC165RMH3IjzHuIk+VUVYE0Mb1rUyqdNv0L21dPG6Idv5+SpYV03atr0K+BePW1YfM/fpjix6TgiavCV3Rs13qCGbvIpqogMRmc3tFr0yidOv1L01ROHXQgXm+J9mcIpckYXU/pVl6+eGlbTh2BaxfeN85hisbGqRa984vQrVt+IwxbxTEHEaapmj5o4/WrfN+I0fW4+AHHa9A5IHNosf4Cddi9/xq4//gI= \ No newline at end of file From 07158f003f349c144a8a37299db610977c0e013a Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 14:41:17 +0100 Subject: [PATCH 03/18] Update overview --- README.md | 4 ++-- docs/_images/overview.png | Bin 21778 -> 35160 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index da20f666..ec331157 100644 --- a/README.md +++ b/README.md @@ -20,13 +20,13 @@ > - IPv4/v6 defragmentation and TCP reassembly > - Nanoseconds in timestamps -Run +**Run**

dnscollector

-Pipelining +**Pipelining mode** ![overview](./docs/_images/overview.png) diff --git a/docs/_images/overview.png b/docs/_images/overview.png index 5e5e569e73991586e2d5ed124a9493cb8bc38c1e..c2dbba6810de92bc91d985341dd2c96f5e61554e 100644 GIT binary patch literal 35160 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 z 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 Date: Sat, 6 Jan 2024 14:45:05 +0100 Subject: [PATCH 04/18] Update overview image --- docs/_images/overview.png | Bin 35160 -> 18777 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/_images/overview.png b/docs/_images/overview.png index c2dbba6810de92bc91d985341dd2c96f5e61554e..8ed7e45f8ed39ad6656a113b173ce87ffc3d1413 100644 GIT binary patch literal 18777 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 literal 35160 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 z $9lGg|Tj?n|k3Hc*VDyw@d4i(7{XQ(lB6HHbEA04`czLOxGM2V43eeZRcAAy*6 zz#~$o0UA99!c0LZig=g*n7hpb2MdJ4)HQP)_(mh@!T{m{Pj2{*7-TG z$oF>UeclAtB*<98-c_XG(46Re@8)$3#q6%Q{u}{1)Zp+J;BZJVE1ihR3!R$)$Ey!9 zdA%>rprlq;hFO>!?u}PB4ivZ0vMP&;{R+nh;MT(!Gkj1uiG=wRD?)`UNV=M>ND!DH zmpEeHs<^Bxk8po0GT^_mk{)`&o5gCdpl!3-bF^YPkPuBHvJ=j!S4npbZj`WAb&-B2 z=BQ+&QffgPL_$^PFDim?{R<_g7$sMYL`8n96{6XJIB;t4IwlsN4oI%C8M{FSsOsW` z=Siv`RHuR9LtAOE4NB-*4fQw@Vj(tv$SOkv4-=ccOAX+g)x~OsdBO=EJ?ou>6$N#5 z)wG`Km#8M6Rl{wb`x$VG9f_#78cXx*%?qSBYIC_#Ce62Mu5(RXQB!~8>+(Z zrT7B_-+2osjRBk+oqL(GKMQlcqA^Au{Xz@w`uS-yXp>#RN=eIFt!7~-%v!DyA1`axD<89+tq5BotAekXqZcGVWg&%?-Uuy5G713mgCoBU^gtYDS4 zyVPA4(@B1iBF>bc2eEOSxzkhRWkCIvD@RA#z*x;&Mw`L4LE0eCA>B>!!OV<6KVfyw z&&{q7`vUfGlmW-Jn(q)ed283?KA5G4rGSp5AY2+bUmfm~dXh#o^h~3?VYUUN`Gx25 z8Hzy|_$Y(J)+c*qK%)U7ShBkqVD?-->)Rk4H&@2tv0zFqi$Bw39GGzU?T8z&R;J2j1yuz6>qw1WqH;r&hay@m2 z4c=$}qVW=v7%@pfyt#|i+2>^8Op&RHXKN>UAFHIGh7_-4UFPRgtdhfaAQ^5d5%GHFPr z&6JV#mG1Qci~4y@+bEjPpmgSkrTpLwTxZ*uKM;r7xpg+lA=>-_NyLS85eD$Er@BJa z6ix((sl7{}nq)pEX-@Dr?!%=q0LZM(j-3PR+xvoZ)A0by!(YkY-VQ)7MXr3TTOR<& zQiiD%?sjK_hUd{kVDI9~074|L@wvPTJnS_1dEy9^wWH$sf2T0qMc^0sBc`MJR^vP_ z4)k#LrfLC6v!zb@Yf$zm+idCnH8@uN*?%hf)mWZm3H(I{LW}xCf53P2r|eC&3xuZS zc|H6<)Yp`o!ye#9hYjGVaQ84P0Qxh&{Z+u5EWz6=ctg4^N*B;_UEkf6!y;;IYj~d+ z2yT*{6h=^v060=bvE{=!9$e2*{70=+&kClV-czhh4(n*uXiQupjy~pSVZBx z9qup7y;@X1T<%kZD^(Qw?+0gf;W?@%p9c;zJ~1umNV7r-sIafFqOK-utol~%v%BhI zHJlc&gCyJp>$@?V=H6zl9x+7tLO{Dqm|eQ=rBGK3fmUBOqB=Jhrtyp~BGPw#RR=H@=pdXuYs zu&xB9jViOfE4o(d%Bq~Bf}99>3~n1iTSCV_(m$v8ohcqE$99n57H&mjs%4#Y4$n~z zxCIe&hu7}$N--LT04s}Ay{~efaDmT4FYWQCEjvrgv9~Ra2QQSKrcb;?Z`oqHu4j0d zukps-#Mc2`?sUPF;HE(Rfd>gC^_K~Wycg|XW1dXlr~FpFCg<+5-s0dLNP36LjHXhJzsE@}k!FF1}WU+dg+S@#>3Cmp34 zz4eh8OdO1T)Z{p>U?`3^O(HVBi4n&WtPL=A6q4*sXma(`ZaX= z;5j^H(9ZzIEp*1HxRAuy7DeYI-cjSYxIx?Ac}9mU;Rg=FlpvztPvs+!1>KpTTdE2w zI)^6$rY@X^aV9$8A^{X%3UsGJL<3D4MMX;A!nG>qHWRS~w|= z7y36X{hI=>gXxI#?lrZ?xYiQ`kjHZ%fo}==A?rjk+YWRgC*lHHGc6m=-UD1hUYtSj@^%AIR)Ii+q)SQg}wT9uu@Rh*L`x-XagK?VwH={o1i({@@qB~VC zu?w(_of|PLXWD(I3QXwEjgG%kfP|1X|HkrJY7L~8^117oPC2t1HPVKOPKAKnQviC> zmW;W4s;3hIa7~MdD`7mt3rZvW*6pZ3256ov=PkO)`aIsAXj z@c+RKZ!p;oq(?`wCL3l1!=)lW#8Qy|l7*h(g-EaB18!3g$1wEnI`L!1-;-0hT^9qS z%vl1Y${#;!VjOLL{w*2rtKSu>S?X?x+nDbB>*?5Pew`q1c;NW$gR_6>bIqXtnmi>kB>qNAn(`b+ zOX{X*`*&JWNkKqMy0<_hP@fTc`wpl4-s2bv1^k7dYsn?fCkQn)jCEKx6TeJjCa5?0 zdelo-w*TTDUFg^#O}hLTvqB30e)yfSUJaA^!MW1ZO{&oVw5v90>w5Yrdu8~e6p_@i z53?6Yzsk#OU^dM<9@ttckodyEBuZ|G&ukp~cY09Rvsr2i`<1ju!{;A#cn~6$xs#%i-JUzw z2<)$dNlFh2sg_8S$!~r7E0v~i(SPa_Oj@3t5INribwsywD?2d?UdJux^0xA7-;JKL0}V0BR0aY1S_`xx9Mg&)4Jb3Zx0)+W}!)0%9dM z07C500tJ3$$K^HsrT(LyxZtUCYG1^u0+ zvuOV4*8I$>#)TJ-=ryfiOlIGupO!iqFM;OTNM|eOaek%Be|UKRqXSPG!||W4B+ijG z`a7d&E{;(&M<0k18C?DY^faxO&4to4WKgMc^51D0b11LE^Vz6Cku%RZ?SPJ2BICbt z06zjiXF!ppbE`O#QUjxDEm;VE!($bNk7{W+M#4t04&kv2wuL+erIRP?&^SCE%5%FH zF9kkdf{=iMSRzm}V4ut7-;)>yK77c=EWZv!SQ4^3x&W%_iu-hSvetaT2Imy_DZDWv zKtI;TZ$LrCUnc?D+>f$KeWN>`0#VNZ$U#lV1x4;Q#QL@vO{|AME2;V}*22~t4 z5H&S5W6DSCp&}JkaU*8a7Uf8Q6jZup=!Le}cbtLQpZJHFQ)Vc{_H1;vv-bQcSxhM8 zvwWs3>|CW3nx|thP>8yl%)Nh#96_RsIF2Sm&W~mv2j9N))XlACvrGI$mwj1ex43qQ zz@&B&vpGx-_cS!_jRwlBf7IO`2Bi(T{@Ne6!fV#+ytc;AAVimT9#xK=G`=!dk)_j- zI@noY1e^WO-@Y@nks|r5G(WqqdaFlq7_4}3xqxE`Oo>Us1|5J%Nc@s+9b#hyS zt9FmEx?0|7xDtlCCAk+qOZC$+zc3t}&HdaEDj4Wa4dV}^=SgXVdH`(26L4`Ua?7K4 zmUClikF{j4G~HhLWK;u+VyEIS;Jzat@sT^qi!&`b0b0AeWS4%q;LRh5Q@|&sIxsHX zr{xN-0$X8%m!wil4h229{|io>1+9}IMBf}H(#m|Cq*rKIe?BnG1vpAkKJ${=%5U0D zzyDd@o&D9aDemaE=D+X?7PvFmy6Sy2pRkdDeP`Rx7CBQMofH{H^|jTVp*_hv=aIu|<&dr8mv z?)o%+2Lmb=V%TVdRI_s2?3?w%&!N$Qfmc3OEW>y*e_tR(M?^%B-eeXM66)fyW3({6 z%*FE_H-Y4Sksi%uIVg%NxQzV1d4^y4^&ibqha{z&IXmu91Jb_UzN_fV|4nOf043*% zWbdE0uQRGHUBs`)4vHLWJ3%fQ!ZshhKgc(oNZF~j8`DZ5|eAWi*K{2Ur8CG0* zE0(8|4@W)O0j{V1ZRU9<`@ejK=TOWe3r2^G=VH1NnigIR3}#7k)+Yaqm}xaj?{T4b}KS zUY0B>1H_*P-vw~!ipgU(QPHdKPHinoAynxEQSa^>o?Ebb?ih6=R7O(b(=HPfIs;8* ze1y+>=i2+S@Gn{UVsHJn*SxgleW!fO(iw^F*F`vg>%E!JNunF1YDn~X7AosXasdET z6`^+{WU@4z4iIUzom@P_C+!pC)tkv(38gHx@h4c+$?9f&`yY|r&cqCSjmt=BZL#ei zX^XPvG=(?CDB!_DJ_I>QY$Th?;X}LB^*<=1RxHVn$X8Y442m*xo(ra ztlt$YU7#AgS;I$$6j4HP=~v8+9ekQLI+|*-McyZyaw2*wb;anJIG@|BmwVu}vJiV- z2*YC8TAuRTeyf4E!CbW&!n=7v7tpu9bo*A_C$7AyMyJnC4M3)%hTrH%8k)$l?<8ow zvkebo^8E3A}J8Kh)V7Pzn`s!h^aw8Fq{K~(iOHb$)J*I90sQ11R9Q}xXDa-5sue^Z-f0CNYaAV+iRh0c_mGiBq~ZqHtu_Aq2_}z?b=d%a z^R684<23|FHEX-LwN2G-!|EXSPYsXRwG~9A750hUdba|`Xs>B)Dwtc**m)$OW=hf} zD=r1JszKa~(?auQZrab+K{pI<;Yn6K>UgCuC+cRa1pYb2w&~ToIkNUrQdteXN()(_ zdVOPcc{ADo@gQlTbkqe??72($&~_*R#&FMc^*pn~o%N^L>pYA>yN!debyVlt?s`k} zYA}NSSjYzTX3VXE;r^gY1w;ArJIC}TM1Mm|7GiuvHZM1Nd0?6^H8X!n4P?G9JshE# ziV@Sr(!4*s%f+PU(cTl>lzi!s){}ugDb+4H#2FKT3Nw`beE8@0$BaV;gH@LuM3QG% z!<7ny!#F;x9gb-`3;#>}+EmGhnk|?HN5$hrzLnJM!2`<=nZ1``Jc5ElnjwmoR#qqZ zJ7P7>npnE>lZqV!>rv~I%8BBsnfL}rjO5ELPK;0x6Y>gnvfEaz&dpH+)?101MXQAx z6}eLmXw})SmnLIpdAHWbrc8}Iu1+~_7fz|~9r&x~SKMoeaqV=OEnogaMvVLnODbz& zBSNR(w-W#Gv+WsAVY%RGJCRVkgMzK-@+@Gu) z{-K&`D!Hj#s5EN7A)~SVZf(x{#FTLAQC@${lo%@By5yHMk6HWPI86gf*icgQEhur= zc^IQWVmoxqg0441F*ljfK=j-jH*&a0WbTBMpY68WbLsx;PxiyK%Gu{a`XfCbSAD=V zOnh9NU?W7Y3`f^va){8y^noqHjCJU@Gy_*I2r=sKh?(2ZlEYbAs+a54g@~i~lR>cf za;?lu0SKIZ^d=e8??L>Rgy;v!hX*ycNSeryBu~U1e9e(`5%mD{!curc?(i0-VeD&A z!>)0U=Dp@fp2B2d#|5GFoOihcrC$zWsvR&7bp}!$YAmXI*?&~|CxI6mITBr_a0^v5)>H+j)`8&=vF^tw)yqhk=Jer!#^ZMN%%^?oFM~5~C zbz&pA>+4WMkL-0Xfg>$DhLA<@-5bnd?5~%_9T`Ga5msYneaE9C&c(0qYt?BF)MbBB4iw&FnKz%%US=oQY4@ex?H z=YAoqVWwbs+}qH7hLrzr9`f{GYlkt+RaZ2LKy(2G-T-MrF~RE~J{c z4qcQ7HeTcQE105~egB+xpLa{4^!j4MUjJ53x0LCW12T1g6C;kIhj(jGK;XGUktDim z!BA1gv5XI_4z5Ck=yB)KJNkC>uIMk-4517mYm2tu%sWZNJ*+jVrsBLw8L(@0wvFx1 zfu>5rOdsgAGR&PZaWT-b@wlbLbH0XDPh1V z(mAvqGGDDnQYQ;H93M5z&X=d(tE7Po3>jNuPv|1+G{lJq&#yhJdc7lr#J9b(s*}zk z2jL1R7GS2{evI0hvuTZaklVpZ96jF???8gA9~Q`E{#Yr|x~bb5Qx}<|VG!xRHnqro ziOL&2QZ%))dMS;rev%38zAJWPrT!%40JER8^J^NZ=QN(}RaWJ4zfMqB^aLCDqqNzH zxOS;TZOA@YARv(5i&x)eUBhI#RGcgx)}SM%uv)XJWHOT$7C?1uZh&=o8_a~vpFNyB zlKO528{=IP^gO)Lm`sw4__JWiXZMP){}Pf3f9G>7E1Mj|mWGBIm=jvwKf zYP34v!D`ydVFck)D;))`7+>+hl0((8C_}9 z8Y2%Q4Li~w;Wj+lH5uMmg>#>5hM3@1Ts7sR&9&mNr~Qj> zU9q*bKYW?vVjA4U+#z=^GT_l0bi(}C+*-=yjXfL*3D65W8C#L#9-AG#EpFa0&>>XJ z#L?Nq%hd#E8|TJj5{OIsX@}gX_{{Qb1`vZ#r0h%%6TvI%9d{3|j(h9Z-5&F3qcd5| zuOJ>Y^pbQrxhfkt#bXsb8eLd>TixIOte z_FFYfR_X}9k9r&*m3}v9Te<9va)7n%S4>#8t%cU_WD%j|P;3kTltS9t9q2K4^jdrfPKkH_%@Un^Tr4QcUZ{K zC5AwMbNc37Ku=|@Y-<_ZxSWW9)`rbnnQycB#%3 zOZq#I*28$nqGkCzhO5T@F{EMk07ZM%3sn~uaB|pRxZv%)P1Sitz;km4(7`fT3!zd1 z+b@sWl)l7LEXbh<&~lZTD6mu6Jrw)WwoQgKu#w2FrGm@P@KWR96C9|2$&svj)iOin z%`AE~tj`d8CHQ++vin0X^{EQNZxcYO{b6UBk|O@x*Pq1C2Vy4y>&>FH=7B zY-UBDXV`x%_(EwDs!uQ+EM9p}v~Hu=_N8b}9frO(K$?orH3L=tr z)TRAwmCLO@G?5~O9Mw1ph#_-PKF~4FeUhO(AvwVahXh@@0corY;F^4mEDh$_BrR9bZzM5%YJ5{uW#2@ zUn*xswghLNjlS1txT_1Xx{3s(;JMbpD@8wBrH<==8-=k%^bMr?chp;b;`?o6 zvh&3Cu&1ROl9dYjr>S78J8p`6JaPT~%I;y-9}oHbfPgj|1UkWkOdU7kh!vt5+x=%5 zc<$X>Yx*^kjE&%aMuyI9gVmy$X1c6p@MpjpG9wt5F6B#2)M3Q?(s=UEWr0ea00P6y z{+n836>ls8qF%59H9~)X$6s&SsGSa;Ioz@(!Pai+F7Mx)8HDLMEed#zA&A)uYk)-C zmtQtCP?uiu9*lrAe0GiXd}jE1yDvI(#SN2aq&G;^#P$g^jDT6v7x^$CW*S&-1)Vz0o`0N zDr93hw}OH5&iTr*jo^lCy%aG{V9ak0H*}AZ9A@iQwz&~2bI)j8qzofxbUP-Q+H8z! z1P2%TfWhG5gYS2-o2;ux<|66UEYFMlm@Jpv)*KRN&$-lhf#||_weu#EpJ1Tj8^_uD z>D8b=s^6&6;WRFRdmHzkk6>D7xljH0U+L3~f1dnDOaEBNKcnNHnc=Tl@}F7ppS9!v d({=Mmy#2P!ygEMA Date: Sat, 6 Jan 2024 14:46:27 +0100 Subject: [PATCH 05/18] Update overview image --- docs/_images/overview.png | Bin 18777 -> 18777 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/_images/overview.png b/docs/_images/overview.png index 8ed7e45f8ed39ad6656a113b173ce87ffc3d1413..17258abab9351d22fab03ecb5cac03664daead8a 100644 GIT binary patch delta 21 dcmcaPiSgzn#tqLH+4Kb6m;Yb4`3+;PI{<4{38Vl3 delta 21 dcmcaPiSgzn#tqLH*>o%&R7|gJe#4mS4gh1~2%Z1{ From abfe1992700ed195fdd5814ade815e1c3e4f467d Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 14:47:36 +0100 Subject: [PATCH 06/18] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ec331157..fb11da26 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,8 @@ Download the latest [`release`](https://github.com/dmachard/go-dns-collector/rel If you prefer run it from docker, follow this [guide](./docs/docker.md). +![run](docs/_images/terminal.gif) + ## Configuration The configuration of DNS-collector is done through a file named [`config.yml`](config.yml). When the DNS-collector starts, it will look for the config.yml from the current working directory. From 6d34c7a72a93f9eb51a451661cfa84122df20b00 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 14:48:41 +0100 Subject: [PATCH 07/18] Update README.md --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index fb11da26..9d5e0ce9 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,6 @@ > - IPv4/v6 defragmentation and TCP reassembly > - Nanoseconds in timestamps -**Run** - -

-dnscollector -

- **Pipelining mode** ![overview](./docs/_images/overview.png) @@ -87,10 +81,10 @@ Download the latest [`release`](https://github.com/dmachard/go-dns-collector/rel ./go-dnscollector -config config.yml ``` -If you prefer run it from docker, follow this [guide](./docs/docker.md). - ![run](docs/_images/terminal.gif) +If you prefer run it from docker, follow this [guide](./docs/docker.md). + ## Configuration The configuration of DNS-collector is done through a file named [`config.yml`](config.yml). When the DNS-collector starts, it will look for the config.yml from the current working directory. From 2d34391966805b24cd968e1f9416d7fd18b55b8b Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 14:51:44 +0100 Subject: [PATCH 08/18] Update README.md --- README.md | 6 +++--- docs/overview.drawio | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9d5e0ce9..bc03890d 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,11 @@ > - IPv4/v6 defragmentation and TCP reassembly > - Nanoseconds in timestamps -**Pipelining mode** +## Features -![overview](./docs/_images/overview.png) +- **[Pipelining/Multiplexer](./docs/collectors.md)** -## Features + - ![overview](./docs/_images/overview.png) - **[Collectors](./docs/collectors.md)** diff --git a/docs/overview.drawio b/docs/overview.drawio index 9507e962..653e0e10 100644 --- a/docs/overview.drawio +++ b/docs/overview.drawio @@ -1 +1 @@ -7Vtbd5s4EP41PDYHxMXw2Dhp+7Db7B737LZ5IyDbnGDEkeVbf32FuUs4gCMsWpvkAQ1iBPN9MxqNsKJPV/vP2I2XfyMfhgpQ/b2iPygAaAYASvKv+odUYk3UVLDAgZ91KgWz4CfMhHm3TeDDda0jQSgkQVwXeiiKoEdqMhdjtKt3m6OwPmrsLiAnmHluyEv/D3yyTKW2qZbyLzBYLPORNTW7snLzzplgvXR9tKuI9EdFn2KESHq22k9hmBgvt0t636cTV4sHwzAiXW748KSvnreLffDt3+cNft799/S4/ZBp2brhJnvh7GHJIbcAjPyPiSFpK0IRFd4vySqkLY2eYrSJfJiMoNLWmmD0WtjJLCRTFCJ81KZPjwe9ko4Dfc785ftohZUovSBaQYIPtMuuxCGHYVmBIJdhGLok2NbVuxkdFoW6YoR/UEAHBmpOXSvTcyiQratYow32YHZX1e6MIqC2KCIuXkDCKaInldcuRUdYe0AMOIgfvs6+ubECrJCa7P4F07NFckZhCqkPUahYDpQwJ6DvlgGBs9j1kqs76vd1TsyDMKwgrnuGboImLugavWIkd6CIVOTz40HlLvayiGAVjNlCTOC+L2dOYOFkzQql7AZKGepp9tTg6ouNzmHzMY7DAw8NwW60niO8WgvFBrovtuZw2GR+zsCiHo8aLBMxsOj2uGAxOFj+QosGUFAyowQUiAv4SzMmhasIQMG0xoWCyaHwFZIdwq88ErMomM/hReJWCw6lbzjDhCxtIhkWi4Pljh7XYPrCprJMP+FMz5l9oGyNWgwfvmc3Hhs/ksadmTcf9tWLD4espXTM8mhWf8yC2uZKWdkgYGYoTXXuJkAtD72usWtyqIN+egfOFW15BNsH5HumJTmv0Iu2SnYljf7kSuFoT8RaSWjIJKExGYaEJkvuC69QHGms68ogWYhbxjCIWz3D2cAEyPl2Y0B7GcIWwwAurWzROzQDxBWitAulNt4GbwvK/bF5jiC6cXnOeXSj+LuHSrc46bA+/Tq6xgzrqG8/Jttfq/WnJ+kTiOU+4Lj/FMOIX+UmAwWe2ArQaKoN0te1Gl+Mu9YQlDJSWporqvLOUczultf2jTImG9y0t6MM19/u2b8lipls1uhcIorxRdNz3edPy+G4LF7QpMpl8ZJzOL5ge2qnaUaZMIpy7QATmfQqocZXaC/liSMoE6YsHEv+DMzEJc9zb3ZXDFjdpi9h/iyv3Dz2iM6uyt8DM7fL0KBraKTl1X3HjjQ7d78HaXa+loG0uFrrpRY5+c5AuRvwQyn3CZp3Bs5cGAnbJpA7CXH7BICZODovoBhFRagSvIAyQPNMd+q5jBMz46ALnPwZO7qOjzYvIbwPkff6Vqykd3wKwvxa3Z/0Jn+6P/79BpFTa9hjcCbvX/Xkq9muentzVPgHeP1q2zfiNCxrLasCsC2IOC165RMH3IjzHuIk+VUVYE0Mb1rUyqdNv0L21dPG6Idv5+SpYV03atr0K+BePW1YfM/fpjix6TgiavCV3Rs13qCGbvIpqogMRmc3tFr0yidOv1L01ROHXQgXm+J9mcIpckYXU/pVl6+eGlbTh2BaxfeN85hisbGqRa984vQrVt+IwxbxTEHEaapmj5o4/WrfN+I0fW4+AHHa9A5IHNosf4Cddi9/xq4//gI= \ No newline at end of file +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 \ No newline at end of file From 71acbc4651a57815fea1b3061abc725904785f05 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:00:39 +0100 Subject: [PATCH 09/18] Update docs --- README.md | 13 +++++----- docs/configuration.md | 54 +++-------------------------------------- docs/running_mode.md | 56 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 57 deletions(-) create mode 100644 docs/running_mode.md diff --git a/README.md b/README.md index bc03890d..c24445ad 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,3 @@ - -![DNS-collector](./docs/dns-collector_logo.png) - [![Go Report Card](https://goreportcard.com/badge/github.com/dmachard/go-dns-collector)](https://goreportcard.com/report/dmachard/go-dns-collector) ![Go version](https://img.shields.io/badge/go%20version-min%201.20-blue) ![Go tests](https://img.shields.io/badge/go%20tests-377-green) @@ -9,6 +6,10 @@ ![Github Actions](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-dnstap.yml/badge.svg) ![Github Actions PDNS](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-powerdns.yml/badge.svg) + +![DNS-collector](./docs/dns-collector_logo.png) + + *NOTE: The code before version 1.x is considered beta quality and is subject to breaking changes.* `DNS-collector` acts as a passive high speed **ingestor** with **pipelining** support for your DNS logs, written in **Golang**. It allows enhancing your DNS logs by adding metadata, extracting usage patterns, and facilitating security analysis. The DNS traffic can be collected and aggregated from simultaneously [sources](./docs/collectors.md) like DNStap streams, network interface or log files and relays it to multiple other [listeners](./docs/loggers.md) with some [transformations](./docs/transformers.md) on it ([traffic filtering](./docs/transformers.md#dns-filtering), [user privacy](./docs/transformers.md#user-privacy), ...). @@ -22,9 +23,9 @@ ## Features -- **[Pipelining/Multiplexer](./docs/collectors.md)** +- **[Pipelining](./docs/running_mode.md)** - - ![overview](./docs/_images/overview.png) + [![overview](./docs/_images/overview.png)](./docs/running_mode.md) - **[Collectors](./docs/collectors.md)** @@ -67,7 +68,7 @@ - Traffic [Filtering](docs/transformers/transform_trafficfiltering.md) and [Reducer](docs/transformers/transform_trafficreducer.md) - Latency [Computing](docs/transformers/transform_latency.md) - - Apply user [Privacy](docs/transformers/transform_userprivacy.md) + - Apply [User Privacy](docs/transformers/transform_userprivacy.md) - [Normalize](docs/transformers/transform_normalize.md) DNS messages - Add [Geographical](docs/transformers/transform_geoip.md) metadata - Various data [Extractor](docs/transformers/transform_dataextractor.md) diff --git a/docs/configuration.md b/docs/configuration.md index 8d1778fd..5e521cf4 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -2,17 +2,14 @@ The configuration of DNS-collector is done through one yaml file named [`config.yml`](https://github.com/dmachard/go-dnscollector/blob/main/config.yml). When the DNS-collector starts, it will look for the config.yml from the current working directory. -A typically configuration would have one or more collector to receive DNS traffic, and severals loggers to process the -incoming traffics. You can take a look to the list of config [`examples`](examples.md). +A typically configuration in [multiplexer](./docs/running_mode.md) mode would have one or more collector to receive DNS traffic, and severals loggers to process the incoming traffics. You can take a look to the list of config [`examples`](examples.md). + +You can find the global settings below - [Global](#global) - [Trace](#trace) - [Custom text format](#custom-text-format) - [Server identity](#server-identity) -- [Multiplexer](#multiplexer) - - [Collectors](#collectors) - - [Loggers](#loggers) - - [Routes](#routes) ## Global @@ -118,48 +115,3 @@ Output example: 2023-04-08T18:27:29.278929Z unbound FORWARDER_RESPONSE NOERROR 0.0.0.0 20817 IPv4 UDP 54b google.fr A 0.000000 2023-04-08T18:27:29.279039Z unbound CLIENT_RESPONSE NOERROR 127.0.0.1 39028 IPv4 UDP 54b google.fr A 0.000000 ``` - -## Multiplexer - -The dns collector can be configured with multiple loggers and collectors at the same time. - -You must defined the list of - -- `collectors`: list of running inputs -- `loggers`: list of running outputs -- `routes`: routing definition - -### Collectors - -List of supported [collectors](./collectors.md) - -```yaml -multiplexer: - collectors: - - name: - ..... -``` - -### Loggers - -List of supported [loggers](./loggers.md) - -```yaml -multiplexer: - loggers: - - name: - ... -``` - -### Routes - -Then defines the routing to use between all of them according to the name. -You can connect one collector to multiple loggers and you can also -connect multiple collectors to the same logger. - -```yaml -multiplexer: - routes: ... - - from: [ list of collectors by name ] - to: [ list of loggers by name ] -``` diff --git a/docs/running_mode.md b/docs/running_mode.md new file mode 100644 index 00000000..df991363 --- /dev/null +++ b/docs/running_mode.md @@ -0,0 +1,56 @@ +# DNS-collector - Running mode + +- [Multiplexer](#multiplexer) + - [Collectors](#collectors) + - [Loggers](#loggers) + - [Routes](#routes) + +## Pipelining + +> EXPERIMENTAL + +## Multiplexer + +The dns collector can be configured with multiple loggers and collectors at the same time. + +You must defined the list of + +- `collectors`: list of running inputs +- `loggers`: list of running outputs +- `routes`: routing definition + +### Collectors + +List of supported [collectors](./collectors.md) + +```yaml +multiplexer: + collectors: + - name: + ..... +``` + +### Loggers + +List of supported [loggers](./loggers.md) + +```yaml +multiplexer: + loggers: + - name: + ... +``` + +### Routes + +Then defines the routing to use between all of them according to the name. +You can connect one collector to multiple loggers and you can also +connect multiple collectors to the same logger. + +```yaml +multiplexer: + routes: ... + - from: [ list of collectors by name ] + to: [ list of loggers by name ] +``` + From 0d8d9df3dcfe38112436b8f1d00ac9622c7f7ee3 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:03:09 +0100 Subject: [PATCH 10/18] Update logo --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c24445ad..53dc59a3 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,14 @@ ![Go version](https://img.shields.io/badge/go%20version-min%201.20-blue) ![Go tests](https://img.shields.io/badge/go%20tests-377-green) ![Go lines](https://img.shields.io/badge/go%20lines-36222-red) + ![Go Tests](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-go.yml/badge.svg) ![Github Actions](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-dnstap.yml/badge.svg) ![Github Actions PDNS](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-powerdns.yml/badge.svg) - -![DNS-collector](./docs/dns-collector_logo.png) - +

+DNS-collector +

*NOTE: The code before version 1.x is considered beta quality and is subject to breaking changes.* From ce6ebe4eee763a0d96ef5158d646f6ce7603d921 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:04:12 +0100 Subject: [PATCH 11/18] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 53dc59a3..f771b1f9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +

[![Go Report Card](https://goreportcard.com/badge/github.com/dmachard/go-dns-collector)](https://goreportcard.com/report/dmachard/go-dns-collector) ![Go version](https://img.shields.io/badge/go%20version-min%201.20-blue) ![Go tests](https://img.shields.io/badge/go%20tests-377-green) @@ -6,13 +7,12 @@ ![Go Tests](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-go.yml/badge.svg) ![Github Actions](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-dnstap.yml/badge.svg) ![Github Actions PDNS](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-powerdns.yml/badge.svg) +

DNS-collector

-*NOTE: The code before version 1.x is considered beta quality and is subject to breaking changes.* - `DNS-collector` acts as a passive high speed **ingestor** with **pipelining** support for your DNS logs, written in **Golang**. It allows enhancing your DNS logs by adding metadata, extracting usage patterns, and facilitating security analysis. The DNS traffic can be collected and aggregated from simultaneously [sources](./docs/collectors.md) like DNStap streams, network interface or log files and relays it to multiple other [listeners](./docs/loggers.md) with some [transformations](./docs/transformers.md) on it ([traffic filtering](./docs/transformers.md#dns-filtering), [user privacy](./docs/transformers.md#user-privacy), ...). > Additionally, DNS-collector also support @@ -24,6 +24,8 @@ ## Features +*NOTE: The code before version 1.x is considered beta quality and is subject to breaking changes.* + - **[Pipelining](./docs/running_mode.md)** [![overview](./docs/_images/overview.png)](./docs/running_mode.md) From 878eda1f4eb59035a7217edc5778e8645372fbd6 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:06:54 +0100 Subject: [PATCH 12/18] Update README.md --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f771b1f9..bb6b9df2 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -

+ [![Go Report Card](https://goreportcard.com/badge/github.com/dmachard/go-dns-collector)](https://goreportcard.com/report/dmachard/go-dns-collector) ![Go version](https://img.shields.io/badge/go%20version-min%201.20-blue) ![Go tests](https://img.shields.io/badge/go%20tests-377-green) ![Go lines](https://img.shields.io/badge/go%20lines-36222-red) -![Go Tests](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-go.yml/badge.svg) -![Github Actions](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-dnstap.yml/badge.svg) -![Github Actions PDNS](https://github.com/dmachard/go-dns-collector/actions/workflows/testing-powerdns.yml/badge.svg) +

+Go Tests +Github Actions +Github Actions PDNS

@@ -22,10 +23,10 @@ > - IPv4/v6 defragmentation and TCP reassembly > - Nanoseconds in timestamps -## Features - *NOTE: The code before version 1.x is considered beta quality and is subject to breaking changes.* +## Features + - **[Pipelining](./docs/running_mode.md)** [![overview](./docs/_images/overview.png)](./docs/running_mode.md) From 7e39174b070840598f544416cf03aedc30b51047 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:11:16 +0100 Subject: [PATCH 13/18] Update README.md --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bb6b9df2..6fad4950 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ - -[![Go Report Card](https://goreportcard.com/badge/github.com/dmachard/go-dns-collector)](https://goreportcard.com/report/dmachard/go-dns-collector) -![Go version](https://img.shields.io/badge/go%20version-min%201.20-blue) -![Go tests](https://img.shields.io/badge/go%20tests-377-green) -![Go lines](https://img.shields.io/badge/go%20lines-36222-red) +

+Go Report +Go version +Go tests +Go lines +

Go Tests From e163bdf11bf625c77cda1781b0253d37a52993ba Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:23:21 +0100 Subject: [PATCH 14/18] fix misspell --- README.md | 4 +--- collectors/file_ingestor.go | 4 ++-- dnsutils/message.go | 12 +++++------ dnsutils/message_test.go | 10 +++++----- docs/transformers/transform_trafficreducer.md | 6 +++--- loggers/dnstapclient.go | 2 +- loggers/fluentd.go | 2 +- loggers/prometheus.go | 8 ++++---- loggers/prometheus_test.go | 2 +- loggers/redispub.go | 2 +- loggers/tcpclient.go | 2 +- netlib/conn.go | 2 +- transformers/machinelearning.go | 4 ++-- transformers/reducer.go | 6 +++--- transformers/reducer_test.go | 20 +++++++++---------- transformers/subprocessors.go | 2 +- 16 files changed, 43 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 6fad4950..cd22500b 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,6 @@ Go version Go tests Go lines -

- -

Go Tests Github Actions Github Actions PDNS @@ -13,6 +10,7 @@

DNS-collector +release

`DNS-collector` acts as a passive high speed **ingestor** with **pipelining** support for your DNS logs, written in **Golang**. It allows enhancing your DNS logs by adding metadata, extracting usage patterns, and facilitating security analysis. The DNS traffic can be collected and aggregated from simultaneously [sources](./docs/collectors.md) like DNStap streams, network interface or log files and relays it to multiple other [listeners](./docs/loggers.md) with some [transformations](./docs/transformers.md) on it ([traffic filtering](./docs/transformers.md#dns-filtering), [user privacy](./docs/transformers.md#user-privacy), ...). diff --git a/collectors/file_ingestor.go b/collectors/file_ingestor.go index d2b6b697..256c09a8 100644 --- a/collectors/file_ingestor.go +++ b/collectors/file_ingestor.go @@ -138,7 +138,7 @@ func (c *FileIngestor) ProcessFile(filePath string) { go c.ProcessPcap(filePath) } case pkgconfig.ModeDNSTap: - // processs dnstap + // process dnstap if filepath.Ext(filePath) == ".fstrm" { c.LogInfo("file ready to process %s", filePath) go c.ProcessDnstap(filePath) @@ -412,7 +412,7 @@ func (c *FileIngestor) Run() { go c.ProcessPcap(fn) } case pkgconfig.ModeDNSTap: - // processs dnstap + // process dnstap if filepath.Ext(fn) == ".fstrm" { go c.ProcessDnstap(fn) } diff --git a/dnsutils/message.go b/dnsutils/message.go index 8a13b850..11f03451 100644 --- a/dnsutils/message.go +++ b/dnsutils/message.go @@ -178,7 +178,7 @@ type TransformExtracted struct { } type TransformReducer struct { - Occurences int `json:"occurences" msgpack:"occurences"` + Occurrences int `json:"occurrences" msgpack:"occurrences"` CumulativeLength int `json:"cumulative-length" msgpack:"cumulative-length"` } @@ -204,7 +204,7 @@ type TransformML struct { ConsecutiveDigits int `json:"consecutive-digits" msgpack:"consecutive-digits"` ConsecutiveConsonants int `json:"consecutive-consonants" msgpack:"consecutive-consonants"` Size int `json:"size" msgpack:"size"` - Occurences int `json:"occurences" msgpack:"occurences"` + Occurrences int `json:"occurrences" msgpack:"occurrences"` UncommonQtypes int `json:"uncommon-qtypes" msgpack:"uncommon-qtypes"` } @@ -421,8 +421,8 @@ func (dm *DNSMessage) handleReducerDirectives(directives []string, s *strings.Bu s.WriteString("-") } else { switch directive := directives[0]; { - case directive == "reducer-occurences": - s.WriteString(strconv.Itoa(dm.Reducer.Occurences)) + case directive == "reducer-occurrences": + s.WriteString(strconv.Itoa(dm.Reducer.Occurrences)) case directive == "reducer-cumulative-length": s.WriteString(strconv.Itoa(dm.Reducer.CumulativeLength)) } @@ -468,8 +468,8 @@ func (dm *DNSMessage) handleMachineLearningDirectives(directives []string, s *st s.WriteString(strconv.Itoa(dm.MachineLearning.ConsecutiveConsonants)) case directive == "ml-size": s.WriteString(strconv.Itoa(dm.MachineLearning.Size)) - case directive == "ml-occurences": - s.WriteString(strconv.Itoa(dm.MachineLearning.Occurences)) + case directive == "ml-occurrences": + s.WriteString(strconv.Itoa(dm.MachineLearning.Occurrences)) case directive == "ml-uncommon-qtypes": s.WriteString(strconv.Itoa(dm.MachineLearning.UncommonQtypes)) } diff --git a/dnsutils/message_test.go b/dnsutils/message_test.go index d854c020..40365e97 100644 --- a/dnsutils/message_test.go +++ b/dnsutils/message_test.go @@ -156,10 +156,10 @@ func TestDnsMessage_Json_Transforms_Reference(t *testing.T) { }, { transform: "reducer", - dmRef: DNSMessage{Reducer: &TransformReducer{Occurences: 10, CumulativeLength: 47}}, + dmRef: DNSMessage{Reducer: &TransformReducer{Occurrences: 10, CumulativeLength: 47}}, jsonRef: `{ "reducer": { - "occurences": 10, + "occurrences": 10, "cumulative-length": 47 } }`, @@ -589,14 +589,14 @@ func TestDnsMessage_TextFormat_Directives_Reducer(t *testing.T) { }{ { name: "undefined", - format: "reducer-occurences", + format: "reducer-occurrences", dm: DNSMessage{}, expected: "-", }, { name: "default", - format: "reducer-occurences", - dm: DNSMessage{Reducer: &TransformReducer{Occurences: 1}}, + format: "reducer-occurrences", + dm: DNSMessage{Reducer: &TransformReducer{Occurrences: 1}}, expected: "1", }, } diff --git a/docs/transformers/transform_trafficreducer.md b/docs/transformers/transform_trafficreducer.md index 1599c2f2..82dab3cc 100644 --- a/docs/transformers/transform_trafficreducer.md +++ b/docs/transformers/transform_trafficreducer.md @@ -30,8 +30,8 @@ transforms: Specific text directive(s) available for the text format: -- `reducer-occurences`: display the number of detected duplication -- `cumulative-length`: sum of the length of each occurences +- `reducer-occurrences`: display the number of detected duplication +- `cumulative-length`: sum of the length of each occurrences When the feature is enabled, the following json field are populated in your DNS message: @@ -40,7 +40,7 @@ Example: ```json { "reducer": { - "occurences": 1, + "occurrences": 1, "cumulative-length": 47 } } diff --git a/loggers/dnstapclient.go b/loggers/dnstapclient.go index 305b55ec..ee569372 100644 --- a/loggers/dnstapclient.go +++ b/loggers/dnstapclient.go @@ -200,7 +200,7 @@ func (ds *DnstapSender) ConnectToRemote() { // block until framestream is ready ds.transportReady <- true - // block until an error occured, need to reconnect + // block until an error occurred, need to reconnect ds.transportReconnect <- true } } diff --git a/loggers/fluentd.go b/loggers/fluentd.go index 1f24314a..3553ed5c 100644 --- a/loggers/fluentd.go +++ b/loggers/fluentd.go @@ -213,7 +213,7 @@ func (fc *FluentdClient) ConnectToRemote() { // block until framestream is ready fc.transportReady <- true - // block until an error occured, need to reconnect + // block until an error occurred, need to reconnect fc.transportReconnect <- true } } diff --git a/loggers/prometheus.go b/loggers/prometheus.go index db5ea579..93f0fef5 100644 --- a/loggers/prometheus.go +++ b/loggers/prometheus.go @@ -32,7 +32,7 @@ var metricNameRegex = regexp.MustCompile(`_*[^0-9A-Za-z_]+_*`) /* This is the list of available label values selectors. -Configuration may specifiy a list of lables to use for metrics. +Configuration may specify a list of lables to use for metrics. Any label in this catalogueSelectors can be specidied in config (prometheus-labels stanza) */ var catalogueSelectors map[string]func(*dnsutils.DNSMessage) string = map[string]func(*dnsutils.DNSMessage) string{ @@ -93,7 +93,7 @@ type PrometheusCountersCatalogue interface { // This type represents a set of counters for a unique set of label name=value pairs. // By default, we create a set per setream_id for backward compatibility -// However, we can allow slicing and dicing data using more dimentions. +// However, we can allow slicing and dicing data using more dimensions. // Each CounterSet is registered with Prometheus collection independently (wrapping label values) type PrometheusCountersSet struct { prom *Prometheus @@ -742,7 +742,7 @@ func (c *PromCounterCatalogueContainer) GetCountersSet(dm *dnsutils.DNSMessage) return c.stats[lbl].GetCountersSet(dm) } -// This function checks the configuration, to determine which label dimentions were requested +// This function checks the configuration, to determine which label dimensions were requested // by configuration, and returns correct implementation of Catalogue. func CreateSystemCatalogue(o *Prometheus) ([]string, *PromCounterCatalogueContainer) { lbls := o.config.Loggers.Prometheus.LabelsList @@ -1322,7 +1322,7 @@ PROCESS_LOOP: } /* -This is an implementation of variadic dimentions map of label values. +This is an implementation of variadic dimensions map of label values. Having nested structure offers the fastest operations, compared to super-flexibile approach that prom client uses with arbitrary set of labels. diff --git a/loggers/prometheus_test.go b/loggers/prometheus_test.go index e44d69de..db61794c 100644 --- a/loggers/prometheus_test.go +++ b/loggers/prometheus_test.go @@ -171,7 +171,7 @@ func TestPrometheus_EPS_Counters(t *testing.T) { noErrorRecord := dnsutils.GetFakeDNSMessage() noErrorRecord.DNS.Type = dnsutils.DNSQuery g.Record(noErrorRecord) - // Zero second elapsed, initalize EPS + // Zero second elapsed, initialize EPS g.ComputeEventsPerSecond() mf := getMetrics(g, t) ensureMetricValue(t, mf, "dnscollector_throughput_ops", map[string]string{"stream_id": "collector"}, 0) diff --git a/loggers/redispub.go b/loggers/redispub.go index cbb90c6e..5b4e8c29 100644 --- a/loggers/redispub.go +++ b/loggers/redispub.go @@ -227,7 +227,7 @@ func (c *RedisPub) ConnectToRemote() { // block until framestream is ready c.transportReady <- true - // block until an error occured, need to reconnect + // block until an error occurred, need to reconnect c.transportReconnect <- true } } diff --git a/loggers/tcpclient.go b/loggers/tcpclient.go index e426830b..d8c9cac1 100644 --- a/loggers/tcpclient.go +++ b/loggers/tcpclient.go @@ -225,7 +225,7 @@ func (c *TCPClient) ConnectToRemote() { // block until framestream is ready c.transportReady <- true - // block until an error occured, need to reconnect + // block until an error occurred, need to reconnect c.transportReconnect <- true } } diff --git a/netlib/conn.go b/netlib/conn.go index 1cc6c63e..3f64f04e 100644 --- a/netlib/conn.go +++ b/netlib/conn.go @@ -12,7 +12,7 @@ func Close(conn io.Closer, reset bool) error { CloseRead() error } - // Agressive closing, send TCP RESET instead of FIN + // Aggressive closing, send TCP RESET instead of FIN if reset { if tcpConn, ok := conn.(*net.TCPConn); ok { tcpConn.SetLinger(0) diff --git a/transformers/machinelearning.go b/transformers/machinelearning.go index fc84657f..76024190 100644 --- a/transformers/machinelearning.go +++ b/transformers/machinelearning.go @@ -78,7 +78,7 @@ func (p *MlProcessor) InitDNSMessage(dm *dnsutils.DNSMessage) { ConsecutiveDigits: 0, ConsecutiveConsonants: 0, Size: 0, - Occurences: 0, + Occurrences: 0, UncommonQtypes: 0, } } @@ -200,7 +200,7 @@ func (p *MlProcessor) AddFeatures(dm *dnsutils.DNSMessage) { // occurences if dm.Reducer != nil { - dm.MachineLearning.Occurences = dm.Reducer.Occurences + dm.MachineLearning.Occurrences = dm.Reducer.Occurrences } // qtypes diff --git a/transformers/reducer.go b/transformers/reducer.go index aaab6dd2..801b6f46 100644 --- a/transformers/reducer.go +++ b/transformers/reducer.go @@ -49,12 +49,12 @@ func (mp *MapTraffic) Set(key string, dm *dnsutils.DNSMessage) { defer mp.Unlock() if v, ok := mp.kv.Load(key); ok { - v.(*dnsutils.DNSMessage).Reducer.Occurences++ + v.(*dnsutils.DNSMessage).Reducer.Occurrences++ v.(*dnsutils.DNSMessage).Reducer.CumulativeLength += dm.DNS.Length return } - dm.Reducer.Occurences = 1 + dm.Reducer.Occurrences = 1 dm.Reducer.CumulativeLength = dm.DNS.Length mp.kv.Store(key, dm) @@ -152,7 +152,7 @@ func (p *ReducerProcessor) LoadActiveReducers() { func (p *ReducerProcessor) InitDNSMessage(dm *dnsutils.DNSMessage) { if dm.Reducer == nil { dm.Reducer = &dnsutils.TransformReducer{ - Occurences: 0, + Occurrences: 0, CumulativeLength: 0, } } diff --git a/transformers/reducer_test.go b/transformers/reducer_test.go index 482daee8..b39fb198 100644 --- a/transformers/reducer_test.go +++ b/transformers/reducer_test.go @@ -95,10 +95,10 @@ func TestReducer_RepetitiveTrafficDetector(t *testing.T) { }, dnsMessagesOut: []dnsutils.DNSMessage{ { - Reducer: &dnsutils.TransformReducer{Occurences: 1}, + Reducer: &dnsutils.TransformReducer{Occurrences: 1}, }, { - Reducer: &dnsutils.TransformReducer{Occurences: 1}, + Reducer: &dnsutils.TransformReducer{Occurrences: 1}, }, }, }, @@ -118,7 +118,7 @@ func TestReducer_RepetitiveTrafficDetector(t *testing.T) { }, dnsMessagesOut: []dnsutils.DNSMessage{ { - Reducer: &dnsutils.TransformReducer{Occurences: 2}, + Reducer: &dnsutils.TransformReducer{Occurrences: 2}, }, }, }, @@ -138,10 +138,10 @@ func TestReducer_RepetitiveTrafficDetector(t *testing.T) { }, dnsMessagesOut: []dnsutils.DNSMessage{ { - Reducer: &dnsutils.TransformReducer{Occurences: 1}, + Reducer: &dnsutils.TransformReducer{Occurrences: 1}, }, { - Reducer: &dnsutils.TransformReducer{Occurences: 1}, + Reducer: &dnsutils.TransformReducer{Occurrences: 1}, }, }, }, @@ -162,8 +162,8 @@ func TestReducer_RepetitiveTrafficDetector(t *testing.T) { for _, dmRef := range tc.dnsMessagesOut { newDm := <-outChan - if newDm.Reducer.Occurences != dmRef.Reducer.Occurences { - t.Errorf("DNS message invalid repeated: Want=%d, Get=%d", dmRef.Reducer.Occurences, newDm.Reducer.Occurences) + if newDm.Reducer.Occurrences != dmRef.Reducer.Occurrences { + t.Errorf("DNS message invalid repeated: Want=%d, Get=%d", dmRef.Reducer.Occurrences, newDm.Reducer.Occurrences) } } }) @@ -208,7 +208,7 @@ func TestReducer_QnamePlusOne(t *testing.T) { }, dnsMessagesOut: []dnsutils.DNSMessage{ { - Reducer: &dnsutils.TransformReducer{Occurences: 2}, + Reducer: &dnsutils.TransformReducer{Occurrences: 2}, }, }, }, @@ -230,8 +230,8 @@ func TestReducer_QnamePlusOne(t *testing.T) { for _, dmRef := range tc.dnsMessagesOut { newDm := <-outChan - if newDm.Reducer.Occurences != dmRef.Reducer.Occurences { - t.Errorf("DNS message invalid repeated: Want=%d, Get=%d", dmRef.Reducer.Occurences, newDm.Reducer.Occurences) + if newDm.Reducer.Occurrences != dmRef.Reducer.Occurrences { + t.Errorf("DNS message invalid repeated: Want=%d, Get=%d", dmRef.Reducer.Occurrences, newDm.Reducer.Occurrences) } } }) diff --git a/transformers/subprocessors.go b/transformers/subprocessors.go index 71b5cd6b..3f9bb50e 100644 --- a/transformers/subprocessors.go +++ b/transformers/subprocessors.go @@ -307,7 +307,7 @@ func (p *Transforms) ProcessMessage(dm *dnsutils.DNSMessage) int { return ReturnDrop } - // and finaly apply other transformation + // and finally apply other transformation var rCode int for _, fn := range p.activeTransforms { rCode = fn(dm) From 1926a79b4f94dd678aacfeaf14663aff8a207a55 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:24:45 +0100 Subject: [PATCH 15/18] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cd22500b..a5b6be4a 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ Go Report Go version Go tests -Go lines -Go Tests -Github Actions -Github Actions PDNS +Go linesActions PDNS"/>

DNS-collector +

+ +

release

From 06752cdf0b019bc2383616e22e3acebd3e0889a8 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:25:49 +0100 Subject: [PATCH 16/18] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5b6be4a..fd5fd054 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Go Report Go version Go tests -Go linesActions PDNS"/> +Go lines

From ff360a0d3b3ecd1523e8072c43e5cf279f919c9a Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:27:51 +0100 Subject: [PATCH 17/18] fix regression --- transformers/reducer_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transformers/reducer_test.go b/transformers/reducer_test.go index b39fb198..4d2c9376 100644 --- a/transformers/reducer_test.go +++ b/transformers/reducer_test.go @@ -31,7 +31,7 @@ func TestReducer_Json(t *testing.T) { refJSON := ` { "reducer": { - "occurences": 0, + "occurrences": 0, "cumulative-length": 0 } } From 3490c2a21c39004ff92cc515a7bac564dc29fae6 Mon Sep 17 00:00:00 2001 From: dmachard <5562930+dmachard@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:38:16 +0100 Subject: [PATCH 18/18] Update README.md --- docs/_images/overview.png | Bin 18777 -> 55242 bytes docs/overview.drawio | 216 +++++++++++++++++++++++++++++++++++++- 2 files changed, 215 insertions(+), 1 deletion(-) diff --git a/docs/_images/overview.png b/docs/_images/overview.png index 17258abab9351d22fab03ecb5cac03664daead8a..567c3ce60eda6f26cc31e7ecee6ecd96114b1b57 100644 GIT binary patch literal 55242 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 diff --git a/docs/overview.drawio b/docs/overview.drawio index 653e0e10..91aae95c 100644 --- a/docs/overview.drawio +++ b/docs/overview.drawio @@ -1 +1,215 @@ -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 \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +