{"id":2683,"date":"2018-04-06T12:42:15","date_gmt":"2018-04-06T12:42:15","guid":{"rendered":"https:\/\/tst-amo.net.ua\/blog\/?p=2683"},"modified":"2018-04-11T10:37:04","modified_gmt":"2018-04-11T10:37:04","slug":"ng_ipacct-%d0%bf%d0%be%d0%b4%d1%81%d1%87%d0%b5%d1%82-%d1%82%d1%80%d0%b0%d1%84%d0%b8%d0%ba%d0%b0-%d0%bd%d0%b0-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81%d0%b0%d1%85","status":"publish","type":"post","link":"https:\/\/tst-amo.net.ua\/blog\/?p=2683","title":{"rendered":"ng_ipacct &#8211; \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445"},"content":{"rendered":"<p>&nbsp;<\/p>\n<pre>root@tst:\/usr # portsnap fetch update\r\nroot@tst:\/usr # portmaster net-mgmt\/ng_ipacct<\/pre>\n<p>\u0414\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 \u043f\u0440\u043e\u043a\u0441\u0438 Squid, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c calamaris:<\/p>\n<pre>root@tst:\/usr # portmaster www\/calamaris<\/pre>\n<p>\u042f\u0434\u0440\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0435 &#8211; \u0432\u0441\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438.<\/p>\n<p>\u0421\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u0434\u0432\u0443\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445 <em>rl0<\/em> &#8211; LAN, <em>re0<\/em> &#8211; WAN.<\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043c \/usr\/local\/etc\/ng_ipacct.conf, \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 &#8220;ng_ipacct_xl0_&#8221; \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 (2 \u0440\u0430\u0437\u0430) \u0438 \u043c\u0435\u043d\u044f\u0435\u043c <em>_xl0_<\/em> \u043d\u0430 <em>_rl0_<\/em> \u0438 <em>re0<\/em>.<\/p>\n<pre>svm@ring:\/usr\/local\/etc# cat ng_ipacct.conf | grep \"^[^#]\"\r\nng_ipacct_enable=\"<span style=\"color: #ff0000;\">YES<\/span>\"\r\nng_ipacct_modules_load=\"<span style=\"color: #ff0000;\">YES<\/span>\"\r\nng_ipacct_modules_list=\"<span style=\"color: #ff0000;\">netgraph ng_ether ng_ipacct<\/span>\"\r\nng_ipacct_interfaces=\"<span style=\"color: #ff0000;\">rl0 re0<\/span>\"\r\nng_ipacct_default_ether_start='\r\n        mkpeer %%iface%%: tee lower right\r\n        name %%iface%%:lower %%iface%%_tee\r\n        connect %%iface%%: lower upper left\r\n        mkpeer %%iface%%_tee: ipacct right2left %%iface%%_in\r\n        name %%iface%%_tee:right2left %%iface%%_ip_acct\r\n        connect %%iface%%_tee: %%iface%%_ip_acct: left2right %%iface%%_out\r\n'\r\nng_ipacct_default_ether_stop='\r\n        shutdown %%iface%%_ip_acct:\r\n        shutdown %%iface%%_tee:\r\n        shutdown %%iface%%:\r\n'\r\nng_ipacct_bpf_ether_start='\r\n        mkpeer %%iface%%: tee lower right\r\n        name %%iface%%:lower %%iface%%_tee\r\n        connect %%iface%%: lower upper left\r\n        mkpeer %%iface%%_tee: bpf right2left %%iface%%_in\r\n        name %%iface%%_tee:right2left %%iface%%_bpf\r\n        connect %%iface%%_tee: right2left left2right %%iface%%_out\r\n\r\nmkpeer %%iface%%_bpf: ipacct %%iface%%_match_in %%iface%%_in\r\n        name %%iface%%_bpf:%%iface%%_match_in %%iface%%_ip_acct\r\n        connect %%iface%%_bpf: %%iface%%_ip_acct: %%iface%%_match_out %%iface%%_out\r\n'\r\nng_ipacct_bpf_ether_stop='\r\n        shutdown %%iface%%_ip_acct:\r\n        shutdown %%iface%%_bpf:\r\n        shutdown %%iface%%_tee:\r\n        shutdown %%iface%%:\r\n'\r\nng_ipacct_xl0_dlt=\"EN10MB\" # required line; see ipacctctl(8)\r\nng_ipacct_xl0_threshold=\"15000\" # '5000' by default\r\nng_ipacct_xl0_verbose=\"yes\" # 'yes' by default\r\nng_ipacct_xl0_saveuid=\"yes\" # 'no' by default\r\nng_ipacct_xl0_savetime=\"no\" # 'no' by default\r\nng_ipacct_xl0_start=${ng_ipacct_default_ether_start}\r\nng_ipacct_xl0_stop=${ng_ipacct_default_ether_stop}\r\nng_ipacct_xl0_checkpoint_script=\"path\/to\/your\/script --checkpoint-and-save xl0\"\r\n                        # this script is called on \"stop\" (to save accumulated\r\n                        # data) or via \"rc.d\/ng_ipacct.sh checkpoint\"\r\nng_ipacct_cx0_dlt=\"RAW\"\r\nng_ipacct_cx0_start='\r\n        mkpeer %%iface%%: cisco rawdata downstream\r\n        name %%iface%%:rawdata %%iface%%_hdlc\r\n        mkpeer %%iface%%_hdlc: tee inet left\r\n        name %%iface%%_hdlc:inet %%iface%%_tee\r\n        mkpeer %%iface%%_tee: iface right inet\r\n        mkpeer %%iface%%_tee: ipacct right2left %%iface%%_in\r\n        name %%iface%%_tee:right2left %%iface%%_ip_acct\r\n        connect %%iface%%_tee: %%iface%%_ip_acct: left2right %%iface%%_out\r\n'\r\nng_ipacct_cx0_stop='\r\n        shutdown %%iface%%_ip_acct:\r\n        shutdown %%iface%%_tee:\r\n        shutdown %%iface%%_hdlc:\r\n'\r\nng_ipacct_vpn0_dlt=\"RAW\"\r\nng_ipacct_vpn0_start='\r\n        mkpeer ipacct dummy dummy\r\n        name .:dummy %%iface%%_ip_acct\r\n        mkpeer %%iface%%_ip_acct: ksocket %%iface%%_in inet\/raw\/divert\r\n        name %%iface%%_ip_acct:%%iface%%_in ks_%%iface%%_in\r\n        msg ks_%%iface%%_in: bind inet\/0.0.0.0:4001\r\n        mkpeer %%iface%%_ip_acct: ksocket %%iface%%_out inet\/raw\/divert\r\n        name %%iface%%_ip_acct:%%iface%%_out ks_%%iface%%_out\r\n        msg ks_%%iface%%_out: bind inet\/0.0.0.0:4002\r\n        rmhook .:dummy\r\n'\r\nng_ipacct_vpn0_stop='\r\n        shutdown %%iface%%_ip_acct:\r\n'\r\nng_ipacct_xl0_dlt=\"EN10MB\" # required line; see ipacctctl(8)\r\nng_ipacct_xl0_threshold=\"15000\" # '5000' by default\r\nng_ipacct_xl0_verbose=\"yes\" # 'yes' by default\r\nng_ipacct_xl0_saveuid=\"yes\" # 'no' by default\r\nng_ipacct_xl0_savetime=\"no\" # 'no' by default\r\nng_ipacct_xl0_start=${ng_ipacct_bpf_ether_start}\r\nng_ipacct_xl0_stop=${ng_ipacct_bpf_ether_stop}\r\nng_ipacct_xl0_checkpoint_script=\"path\/to\/your\/script --checkpoint-and-save xl0\"\r\n                        # this script is called on \"stop\" (to save accumulated\r\n                        # data) or via \"rc.d\/ng_ipacct.sh checkpoint\"\r\nng_ipacct_xl0_afterstart_script=\"path\/to\/your\/script --load-bpf-filters xl0\"\r\n                        # this script is called just after initialization\r\n                        # of nodes to load filters into xl0_bpf\r\nng_ipacct_ks_start='\r\n        mkpeer ipacct dummy dummy\r\n        name .:dummy %%iface%%_ip_acct\r\n        mkpeer %%iface%%_ip_acct: tee %%iface%%_in left2right\r\n        name %%iface%%_ip_acct:%%iface%%_in %%iface%%_tee_in\r\n        mkpeer %%iface%%_ip_acct: tee %%iface%%_out left2right\r\n        name %%iface%%_ip_acct:%%iface%%_out %%iface%%_tee_out\r\n        mkpeer %%iface%%_tee_in: echo right in\r\n        name %%iface%%_tee_in:right %%iface%%_echo_in\r\n        mkpeer %%iface%%_tee_out: echo right out\r\n        name %%iface%%_tee_out:right %%iface%%_echo_out\r\n\r\n        mkpeer %%iface%%_tee_in: ksocket left inet\/raw\/divert\r\n        name %%iface%%_tee_in:left %%iface%%_ks_in\r\n        msg %%iface%%_ks_in: bind inet\/0.0.0.0:4001\r\n        mkpeer %%iface%%_tee_out: ksocket left inet\/raw\/divert\r\n        name %%iface%%_tee_out:left %%iface%%_ks_out\r\n        msg %%iface%%_ks_out: bind inet\/0.0.0.0:4002\r\n        rmhook .:dummy\r\n'\r\nng_ipacct_ks_stop='\r\n        shutdown %%iface%%_ks_in:\r\n        shutdown %%iface%%_ks_out:\r\n        shutdown %%iface%%_tee_in:\r\n        shutdown %%iface%%_tee_out:\r\n'\r\nng_ipacct_ks_dlt=\"RAW\" # required line; see ipacctctl(8)\r\nng_ipacct_ks_threshold=\"15000\" # '5000' by default\r\nng_ipacct_ks_verbose=\"yes\" # 'yes' by default\r\nng_ipacct_ks_saveuid=\"yes\" # 'no' by default\r\nng_ipacct_ks_savetime=\"no\" # 'no' by default\r\nng_ipacct_ks_checkpoint_script=\"path\/to\/your\/script --checkpoint-and-save ks\"\r\n                       # this script is called on \"stop\" (to save accumulated\r\n                       # data) or via \"rc.d\/ng_ipacct.sh checkpoint\"\r\nng_ipacct_<span style=\"color: #ff0000;\">rl0<\/span>_dlt=\"EN10MB\" # required line; see ipacctctl(8)\r\nng_ipacct_<span style=\"color: #ff0000;\">rl0<\/span>_threshold=\"15000\" # '5000' by default\r\nng_ipacct_<span style=\"color: #ff0000;\">rl0<\/span>_verbose=\"yes\" # 'yes' by default\r\nng_ipacct_<span style=\"color: #ff0000;\">rl0<\/span>_saveuid=\"<span style=\"color: #ff0000;\">no<\/span>\" # 'no' by default\r\nng_ipacct_<span style=\"color: #ff0000;\">rl0<\/span>_savetime=\"<span style=\"color: #ff0000;\">yes<\/span>\" # 'no' by default\r\nng_ipacct_<span style=\"color: #ff0000;\">rl0<\/span>_start=${ng_ipacct_default_ether_start}\r\nng_ipacct_<span style=\"color: #ff0000;\">rl0<\/span>_stop=${ng_ipacct_default_ether_stop}\r\nng_ipacct_<span style=\"color: #ff0000;\">rl0<\/span>_checkpoint_script=\"<span style=\"color: #ff0000;\">\/usr\/sut\/ipacct.sh rl0<\/span>\"\r\n                        # this script is called on \"stop\" (to save accumulated\r\n                        # data) or via \"rc.d\/ng_ipacct.sh checkpoint\"\r\nng_ipacct_<span style=\"color: #ff0000;\">re0<\/span>_dlt=\"EN10MB\" # required line; see ipacctctl(8)\r\nng_ipacct_<span style=\"color: #ff0000;\">re0<\/span>_threshold=\"15000\" # '5000' by default\r\nng_ipacct_<span style=\"color: #ff0000;\">re0<\/span>_verbose=\"yes\" # 'yes' by default\r\nng_ipacct_<span style=\"color: #ff0000;\">re0<\/span>_saveuid=\"<span style=\"color: #ff0000;\">no<\/span>\" # 'no' by default\r\nng_ipacct_<span style=\"color: #ff0000;\">re0<\/span>_savetime=\"<span style=\"color: #ff0000;\">yes<\/span>\" # 'no' by default\r\nng_ipacct_<span style=\"color: #ff0000;\">re0<\/span>_start=${ng_ipacct_default_ether_start}\r\nng_ipacct_<span style=\"color: #ff0000;\">re0<\/span>_stop=${ng_ipacct_default_ether_stop}\r\nng_ipacct_<span style=\"color: #ff0000;\">re0<\/span>_checkpoint_script=\"<span style=\"color: #ff0000;\">\/usr\/sut\/ipacct.sh re0<\/span>\"\r\n                        # this script is called on \"stop\" (to save accumulated\r\n                        # data) or via \"rc.d\/ng_ipacct.sh checkpoint\"<\/pre>\n<pre>mkdir \/usr\/sut<\/pre>\n<p>\u0422\u0430\u043c \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<pre>root@tst:\/usr\/sut # touch daily_istat.pl daily_pstat.pl daily_sumnp.pl daily_traf.sh ipacct.sh ipbas ipbase ipblan ipbreal ipmac.base<\/pre>\n<p>\u0433\u0434\u0435 *.pl \u0438 *.sh \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0430 \u0444\u0430\u0439\u043b\u044b \u0432\u0438\u0434\u0430 ip* &#8211; \u0441\u043f\u0438\u0441\u043e\u043a IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0441\u0435\u0442\u0438.<\/p>\n<p>\u041d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u044b:<\/p>\n<pre>root@ring:\/usr\/sut # cat ipacct.sh\r\n#!\/bin\/sh\r\n# \/usr\/sut\/ipacct.sh\r\n\r\nIPACCTCTL=\"\/usr\/local\/sbin\/ipacctctl\"\r\nINTERFACES=\"<span style=\"color: #ff0000;\">rl0<\/span>\"\r\nIFACE=$1\r\nDIR=\/usr\/sut\/ipacct\r\n\r\nif [ ! -e \"DIR\" ]; then\r\n mkdir $DIR\r\nfi\r\n\r\nNAME=\"traf.log\"\r\nNAMEI=$NAME.$IFACE\r\n\r\nfor IFACE in $INTERFACES; do\r\n$IPACCTCTL ${IFACE}_ip_acct:$IFACE checkpoint\r\n$IPACCTCTL ${IFACE}_ip_acct:$IFACE show &gt;&gt; $DIR\/$NAMEI\r\n$IPACCTCTL ${IFACE}_ip_acct:$IFACE clear\r\ndone\r\n\r\ndp=`\/bin\/date +%y%m%d-%H:%M`\r\nmessag=`\/usr\/bin\/tail -1 $DIR\/$NAMEI | \/usr\/bin\/fgrep exceed`\r\nif [ \"$messag\" ]; then\r\necho \"$dp $messag\" &gt;&gt; \/usr\/sut\/ipacct\/alarm.$IFACE\r\nfi<\/pre>\n<pre>root@ring:\/usr\/sut # cat daily_istat.pl\r\n#!\/usr\/local\/bin\/perl\r\n#\r\n# \/usr\/sut\/daily_istat.pl (daily_istat.pl interface)\r\n# --interface \"re0-inet, rl0-lan\"\r\n\r\n$iface1 = \"<span style=\"color: #ff0000;\">re0<\/span>\";\r\n$net1 = \"<span style=\"color: #ff0000;\">194.44.<\/span>\";\r\n$iface2 = \"<span style=\"color: #ff0000;\">rl0<\/span>\";\r\n$net2 = \"<span style=\"color: #ff0000;\">192.168.<\/span>\";\r\n#$net2 = \/[0-9].[0-9].\/;\r\n\r\n$iface = shift(@ARGV);\r\n\r\nif ($iface eq $iface1) {\r\n        $ipi = \"ipbreal\";\r\n        $net = $net1;\r\n        }\r\nif ($iface eq $iface2) {\r\n        $ipi = \"ipblan\";\r\n        $net = $net2;\r\n        }\r\nopen (Fip, \"\/usr\/sut\/ipmac.base\");\r\nopen (Fipi, \"&gt;\/usr\/sut\/$ipi\");\r\nopen (Fipii, \"&gt;\/usr\/sut\/ipbas\");\r\nopen (Fipiii, \"&gt;\/usr\/sut\/ipbase\");\r\n$i = 0;\r\n$j = 0;\r\nwhile ($line = &lt;Fip&gt;) {\r\n        ($p1,$xlam) = split(' ',$line,2);\r\n        if ($p1 =~ \/$net\/) {\r\n        print Fipi \"$i $p1\\n\";\r\n        print Fipii \"$i $p1\\n\";\r\n        $i = $i + 1;\r\n        }\r\n        $j = $j + 1;\r\n        print Fipiii \"$j       $p1\\n\";\r\n}\r\n$count = $i;\r\nclose (Fip);\r\nclose (Fipi);\r\nclose (Fipii);\r\nclose (Fipiii);\r\n\r\n\r\n#goto Z1;\r\nopen (Fy, \"\/usr\/sut\/workyer\");\r\nchomp($y = &lt;Fy&gt;);\r\nclose (Fy);\r\nopen (Fm, \"\/usr\/sut\/workmon\");\r\nchomp($m = &lt;Fm&gt;);\r\nclose (Fm);\r\nopen (Fd, \"\/usr\/sut\/workday\");\r\nchomp($d = &lt;Fd&gt;);\r\nclose (Fd);\r\nZ1:\r\ngoto Z2;\r\n$y = \"13\";\r\n$m = \"08\";\r\n$d = \"30\";\r\nZ2:\r\n\r\nopen (Fipii, \"\/usr\/sut\/ipbas\");\r\n@mip = &lt;Fipii&gt;;\r\nclose (Fipii);\r\n\r\n$infile = \"\/usr\/sut\/$y.$m\/$y$m$d.$iface\";\r\nopen (InF, \"$infile\");\r\n\r\nfor ($i = 0; $i &lt; $count; $i++) {\r\n$ipin[$i] = 0;\r\n$ipout[$i] = 0;\r\n$ipsum[$i] = 0;\r\n}\r\n\r\nwhile ($line = &lt;InF&gt;) {\r\n        ($p1,$p2,$p3,$p4,$p5,$p6,$p7,$p8) = split(\/     \/,$line,8);\r\n        foreach $str (@mip) {\r\n        chomp($str);\r\n        ($i,$ip) = split(\/     \/,$str,2);\r\n                 if ($p1 eq $ip) {\r\n                 $ipin[$i] = $ipin[$i] + $p7;\r\n                 }\r\n                 if ($p3 eq $ip) {\r\n                 $ipout[$i] = $ipout[$i] + $p7;\r\n                 }\r\n         }\r\n}\r\n\r\nclose (InF);\r\n#---------------------------------\r\n#goto ZZ;\r\n\r\n\r\nopen (TrF, \"&gt;&gt;$infile.o\");\r\n$sumfile = \"\/usr\/sut\/$y.$m\/tsum$y$m.$iface\";\r\nopen (TrSum, \"&gt;&gt;$sumfile\");\r\n\r\n$Mb = 1048576;\r\n#$Mb = 10;\r\n\r\nfor ($i = 0; $i &lt; $count; $i++) {\r\n$str = @mip[$i];\r\nchomp($str);\r\n($xlam,$ip) = split(\/ \/,$str,2);\r\n$ipin[$i] = int ($ipin[$i] \/ $Mb);\r\n$ipout[$i] = int ($ipout[$i] \/ $Mb);\r\n$ipsum[$i] = $ipin[$i] + $ipout[$i];\r\n\r\nif ($ipsum[$i] &gt; 0) {\r\nprintf TrF (\"%-15s%15d%15d%15d\\n\", $ip, $ipin[$i], $ipout[$i], $ipsum[$i]);\r\n\r\nif ($d eq \"01\") {\r\nprintf TrSum (\"%-15s%15d%15d%15d\\n\", $ip, $ipin[$i], $ipout[$i], $ipsum[$i]);\r\n}\r\n}\r\n}\r\n\r\nclose (TrF);\r\nclose (TrSum);\r\n\r\nif ($d eq \"01\") {\r\ngoto ZZ;\r\n}\r\n\r\n#goto ZZ;\r\n\r\nopen (TekF, \"\/usr\/sut\/$y.$m\/$y$m$d.$iface.o\");\r\n@mt = &lt;TekF&gt;;\r\nclose (TekF);\r\n\r\nopen (SumF, \"\/usr\/sut\/$y.$m\/tsum$y$m.$iface\");\r\n@mts = &lt;SumF&gt;;\r\nclose (SumF);\r\n\r\n\r\nopen (SumF, \"+&gt;\/usr\/sut\/$y.$m\/tsum$y$m.$iface\");\r\n\r\nfor ($k = 0; $k &lt; $count; $k++) {\r\n$str = @mip[$k];\r\nchomp($str);\r\n($k,$ip) = split(\/     \/,$str,2);\r\n        for ($i = 0; $i &lt; $count; $i++) {\r\n        $line1 = @mts[$i];\r\n#       $line1 = @m[$i];\r\n        ($ip1,$in1,$out1,$sum1) = split(\/ +\/,$line1,4);\r\n        $line2 = @mt[$i];\r\n        ($ip2,$in2,$out2,$sum2) = split(\/ +\/,$line2,4);\r\n\r\n        if ($ip eq $ip1) {\r\n        $ins[$k] = $ins[$k] + $in1;\r\n        $outs[$k] = $outs[$k] + $out1;\r\n        $sums[$k] = $sums[$k] + $sum1;\r\n        }\r\n\r\n        if ($ip eq $ip2) {\r\n        $ins[$k] = $ins[$k] + $in2; \r\n        $outs[$k] = $outs[$k] + $out2;\r\n        $sums[$k] = $sums[$k] + $sum2;\r\n        }\r\n        }\r\nif ($sums[$k] &gt; 0) {\r\nprintf SumF (\"%-15s%15d%15d%15d\\n\", $ip, $ins[$k], $outs[$k], $sums[$k]);\r\n}\r\n}\r\n\r\nclose (SumF);\r\n\r\nZZ:\r\n\r\n#END<\/pre>\n<pre>root@ring:\/usr\/sut # cat daily_pstat.pl\r\n#!\/usr\/local\/bin\/perl\r\n#\r\n# \/usr\/sut\/daily_pstat.pl\r\n#\r\n\r\n#goto Z1;\r\nopen (Fy, \"\/usr\/sut\/workyer\");\r\nchomp($y = &lt;Fy&gt;);\r\nclose (Fy);\r\nopen (Fm, \"\/usr\/sut\/workmon\");\r\nchomp($m = &lt;Fm&gt;);\r\nclose (Fm);\r\nopen (Fd, \"\/usr\/sut\/workday\");\r\nchomp($d = &lt;Fd&gt;);\r\nclose (Fd);\r\n\r\nZ1:\r\ngoto Z2;\r\n$y = \"13\";\r\n$m = \"08\";\r\n$d = \"30\";\r\nZ2:\r\n\r\n$file = \"$y$m$d\";\r\n\r\n@temp = `cat \/usr\/sut\/$y.$m\/$file.log | \\\r\n <span style=\"color: #ff0000;\">\/usr\/local\/bin\/calamaris -n -r -1 -S 14 -O -U M<\/span>`;\r\n$i = 0;\r\nforeach $line (@temp) {\r\n ${ip[$i]} = substr($line,0,16);\r\n ${byte[$i]} = substr($line,51,8);\r\n$i++;\r\n}\r\n\r\n$n = $i-7;\r\n\r\nopen (FH,\"&gt;\/usr\/sut\/$y.$m\/$file.log.o\");\r\n\r\nprint FH $temp[1];\r\nprint FH $temp[2];\r\nprint FH $temp[3];\r\nprint FH $temp[4];\r\nprint FH $temp[5];\r\nprint FH $temp[6];\r\nfor ($k = 7; $k&lt;$n; $k++) {\r\nprint FH ${ip[$k]},${byte[$k]},\"\\n\";\r\n}\r\nclose (FH);\r\n\r\nopen (IpF, \"\/usr\/sut\/ipblan\");\r\n@mip = &lt;IpF&gt;;\r\nclose (IpF);\r\n\r\n$infile = \"\/usr\/sut\/$y.$m\/$y$m$d.log.o\";\r\nopen (InF, \"$infile\");\r\n@mp = &lt;InF&gt;;\r\nclose (InF);\r\n\r\n$outfile = \"\/usr\/sut\/$y.$m\/tsum$y$m.log\";\r\nopen (OutF, \"$outfile\");\r\n@msum = &lt;OutF&gt;;\r\nclose (OutF);\r\n\r\n$outfile = \"\/usr\/sut\/$y.$m\/tsum$y$m.log\";\r\nopen (OutF, \"+&gt;$outfile\");\r\n\r\n#print \"$y $m $d $infile $outfile\\n\";\r\n#goto ZZ;\r\n\r\n\r\nforeach $str (@mip) {\r\nchomp($str);\r\n($i,$ip) = split(\/ \/,$str,2);\r\n $ipsums[$i] = 0;\r\n foreach $strs (@msum) {\r\n ($ips,$ipsum) = split(\/ +\/,$strs,2);\r\n if ($ip eq $ips) {\r\n $ipsums[$i] = $ipsum;\r\n }\r\n }\r\n foreach $line (@mp) {\r\n ($p1,$p2) = split(\/ \/,$line,2);\r\n $p2 =~ tr\/M\\n\/ \/;\r\n if ($ip eq $p1 &amp; $p2 &gt; 0) {\r\n $ipsums[$i] = $ipsums[$i] + $p2;\r\n if ($d eq \"01\") {\r\n printf OutF (\"%-15s%15d\\n\", $ip, $p2);\r\n }\r\n }\r\n }\r\n if ($d ne \"01\" &amp; $ipsums[$i] &gt; 0) {\r\n printf OutF (\"%-15s%15d\\n\", $ip, $ipsums[$i]);\r\n }\r\n}\r\nclose (OutF);\r\n\r\nZZ:\r\n\r\n#END<\/pre>\n<pre>root@ring:\/usr\/sut # cat daily_sumnp.pl\r\n#!\/usr\/local\/bin\/perl\r\n# Proxy + NAT\r\n# \/usr\/sut\/sum_n_p.pl\r\n\r\n$iface = \"<span style=\"color: #ff0000;\">rl0<\/span>\";\r\n\r\n#goto Z1;\r\nopen (Fy, \"\/usr\/sut\/workyer\");\r\nchomp($y = &lt;Fy&gt;);\r\nclose (Fy);\r\nopen (Fm, \"\/usr\/sut\/workmon\");\r\nchomp($m = &lt;Fm&gt;);\r\nclose (Fm);\r\nopen (Fd, \"\/usr\/sut\/workday\");\r\nchomp($d = &lt;Fd&gt;);\r\nclose (Fd);\r\nZ1:\r\ngoto Z2;\r\n$y = \"13\";\r\n$m = \"08\";\r\n$d = \"30\";\r\nZ2:\r\nopen (IpF, \"\/usr\/sut\/ipblan\");\r\n@mip = &lt;IpF&gt;;\r\nclose (IpF);\r\n\r\n$infile1 = \"\/usr\/sut\/$y.$m\/tsum$y$m.log\";\r\nopen (InF1, \"$infile1\");\r\n@mproxy = &lt;InF1&gt;;\r\nclose (InF1);\r\n\r\n$infile2 = \"\/usr\/sut\/$y.$m\/tsum$y$m.$iface\";\r\nopen (InF2, \"$infile2\");\r\n@mnat = &lt;InF2&gt;;\r\nclose (InF2);\r\n\r\n$outfile = \"\/usr\/sut\/$y.$m\/sumnp$y$m\";\r\nopen (OutF, \"+&gt;$outfile\");\r\n\r\n#print \"$y $m $d\\n $infile1\\n $infile2\\n $outfile\\n\";\r\n#goto ZZ;\r\n#---------------\r\n$trafproxy = 0;\r\n$trafnat = 0;\r\n$traflan = 0;\r\n$trafproxyr = 0;\r\n$trafnatr = 0;\r\n$traflanr = 0;\r\n\r\nforeach $str (@mip) {\r\nchomp($str);\r\n($i,$ip) = split(\/ \/,$str,2);\r\n $tsum[$i] = 0;\r\n $tproxyp[$i] = 0;\r\n $tsump[$i] = 0;\r\n foreach $linep (@mproxy) {\r\n ($ipp,$tproxy) = split(\/ +\/,$linep,2);\r\n if ($ip eq $ipp) {\r\n $tsum[$i] = $tproxy;\r\n $tproxyp[$i] = $tproxy;\r\n }\r\n }\r\n foreach $linen (@mnat) {\r\n ($ipn,$inn,$outn,$sumn) = split(\/ +\/,$linen,4);\r\n if ($ip eq $ipn) {\r\n $tsum[$i] = $tsum[$i] + $sumn;\r\n $tsump[$i] = $sumn;\r\n }\r\n }\r\nif ($ip =~ \/<span style=\"color: #ff0000;\">192.168.<\/span>\/) {\r\n$trafproxy = $trafproxy + $tproxyp[$i];\r\n$trafnat = $trafnat + $tsump[$i];\r\n$traflan = $traflan + $tsum[$i];\r\n}\r\nif ($ip =~ \/<span style=\"color: #ff0000;\">194.***.<\/span>\/) {\r\n$trafproxyr = $trafproxyr + $tproxyp[$i];\r\n$trafnatr = $trafnatr + $tsump[$i];\r\n$traflanr = $traflanr + $tsum[$i];\r\n}\r\n$trafproxys = $trafproxy + $trafproxyr;\r\n$trafnats = $trafnat + $trafnatr;\r\n$traflans = $traflan + $trafnatr;\r\n\r\nif ($tsum[$i] &gt; 0) {\r\nprintf OutF (\"%-15s%15d%15d%15d\\n\", $ip, $tproxyp[$i], $tsump[$i], $tsum[$i]);\r\n}\r\n}\r\nprintf OutF (\"%-15s%15d%15d%15d\\n\", \"L Pr Nat Summ\", $trafproxy, $trafnat, $traflan);\r\nprintf OutF (\"%-15s%15d%15d%15d\\n\", \"R Pr Nat Summ\", $trafproxyr, $trafnatr, $traflanr);\r\nprintf OutF (\"%-15s%15d%15d%15d\\n\", \"LR Pr Nat Summ\", $trafproxys, $trafnats, $traflans);\r\n\r\nclose (OutF);\r\n\r\nZZ:\r\n\r\n`cp $outfile \/usr\/sut\/traffic`;\r\n\r\n#END<\/pre>\n<pre>root@ring:\/usr\/sut # cat daily_traf.sh\r\n#!\/bin\/sh\r\n# \/usr\/sut\/daily_traf.sh\r\n# Interfaces (out - WAN, in - LAN)\r\nif_out='re0'\r\nif_in='rl0'\r\n\r\ny=`\/bin\/date +%y`\r\nm=`\/bin\/date +%m`\r\nd=`\/bin\/date +%d`\r\n\r\necho \"$y\" &gt; \/usr\/sut\/workyer\r\necho \"$m\" &gt; \/usr\/sut\/workmon\r\necho \"$d\" &gt; \/usr\/sut\/workday\r\n\r\nDIR=\/usr\/sut\/$y.$m\r\nif [ ! -e \"DIR\" ]; then\r\n mkdir $DIR\r\nfi\r\n\r\nmv \/usr\/sut\/ipacct\/traf.log.$if_out $DIR\/$y$m$d.$if_out\r\nmv \/usr\/sut\/ipacct\/traf.log.$if_in $DIR\/$y$m$d.$if_in\r\nif [ -e \/usr\/sut\/ipacct\/alarm.$if_out ]; then\r\nmv \/usr\/sut\/ipacct\/alarm.$if_out \/usr\/sut\/ipacct\/a$y$m$d.$if_out\r\nfi\r\nif [ -e \/usr\/sut\/ipacct\/alarm.$if_in ]; then\r\nmv \/usr\/sut\/ipacct\/alarm.$if_in \/usr\/sut\/ipacct\/a$y$m$d.$if_in\r\nfi\r\n\r\ncp \/var\/log\/squid\/access.log $DIR\/$y$m$d.log\r\n#cp \/dev\/null \/var\/log\/squid\/access.log<\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<pre>root@ring:\/usr\/sut # cat ipbas\r\n0     192.168.113.0\r\n1     192.168.113.1\r\n2     192.168.113.2\r\n.....................\r\n255   192.168.113.255<\/pre>\n<pre>root@ring:\/usr\/sut # less ipbase\r\n1\u00a0 \u00a0 \u00a0192.168.113.0\r\n2\u00a0 \u00a0 \u00a0192.168.113.1\r\n3\u00a0 \u00a0 \u00a0192.168.113.2\r\n4\u00a0 \u00a0 \u00a0192.168.113.3\r\n5\u00a0 \u00a0 \u00a0192.168.113.4\r\n.........................\r\n\r\n255   192.168.113.254\r\n256   192.168.113.255\r\n257   194.***.***.**1\r\n258   194.***.***.**2\r\n259   194.***.***.**3<\/pre>\n<pre>root@ring:\/usr\/sut # cat ipblan\r\n0\u00a0 \u00a0 \u00a0192.168.113.0\r\n1\u00a0 \u00a0 \u00a0192.168.113.1\r\n...................\r\n\r\n253   192.168.113.253\r\n254   192.168.113.254\r\n255   192.168.113.255<\/pre>\n<pre>root@ring:\/usr\/sut # cat ipbreal\r\n0\u00a0 \u00a0 \u00a0194.***.***.***\r\n1\u00a0 \u00a0 \u00a0194.***.***.***\r\n2\u00a0 \u00a0 \u00a0194.***.***.***\r\n3\u00a0 \u00a0 \u00a0194.***.***.***\r\n\r\n<\/pre>\n<pre>root@ring:\/usr\/sut # cat ipmac.base\r\n192.168.113.0\u00a0 \u00a0 \u00a0sn\u00a0 \u00a0           \u00a0 \u00a0 \u00a0 \u00a0 00\u00a0 \u00a0001\u00a0 \u00a0-----\u00a0 \u00a0 \u00a0 \u00a0 ----\r\n192.168.113.1\u00a0 \u00a0 \u00a0mc\u00a0 68:05:ca:02:06:62\u00a0 \u00a000\u00a0 \u00a0002\u00a0 \u00a0g0309\u00a0 \u00a01496\u00a0 \u00a0roller\r\n192.168.113.2\u00a0 \u00a0 \u00a0bl\u00a0 \u00a0                   00\r\n192.168.113.3\u00a0 \u00a0 \u00a0bl\u00a0 \u00a0                   00\r\n192.168.113.4\u00a0 \u00a0 \u00a0bl\u00a0 \u00a0                   00\r\n192.168.113.5\u00a0 \u00a0 \u00a0bl\u00a0 \u00a0                   00\r\n192.168.113.6\u00a0 \u00a0 \u00a0bl\u00a0 \u00a0                   00\r\n192.168.113.7\u00a0 \u00a0 \u00a0mc\u00a0 00:07:e9:b8:ad:ee\u00a0 \u00a000\u00a0 \u00a0024\u00a0 \u00a0g0310\u00a0 \u00a0 ----\u00a0 \u00a0 \u00a0pktn\r\n......................................<\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u0440\u043e\u043d<\/p>\n<pre>root@ring:\/usr\/sut # cat \/etc\/crontab\r\nSHELL=\/bin\/sh\r\nPATH=\/etc:\/bin:\/sbin:\/usr\/bin:\/usr\/sbin\r\n<span style=\"color: #ff0000;\">MAILTO=\"\"<\/span>\r\n#minute hour mday month wday who    command\r\n#\r\n*\/4     *    *    *     *    root   \/usr\/local\/etc\/rc.d\/ng_ipacct checkpoint &gt; \/dev\/null\r\n59      23   *    *     *    root   \/usr\/sut\/daily_traf.sh\r\n10      0    *    *     *    root   \/usr\/sut\/daily_istat.pl <span style=\"color: #ff0000;\">re0<\/span>\r\n20      0    *    *     *    root   \/usr\/sut\/daily_istat.pl <span style=\"color: #ff0000;\">rl0<\/span>\r\n30      0    *    *     *    root   \/usr\/sut\/daily_pstat.pl\r\n1       4    *    *     *    root   \/usr\/sut\/daily_sumnp.pl\r\n\r\n<\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:<\/p>\n<pre>root@ring:\/usr\/sut # ngctl ls\r\nThere are 10 total nodes:\r\n Name: ngctl4605   Type: socket    ID: 000001e2    Num hooks: 0\r\n Name: mpd658-lso  Type: socket    ID: 00000003    Num hooks: 0\r\n Name: mpd658-cso  Type: socket    ID: 00000004    Num hooks: 0\r\n Name: mpd658-eso  Type: socket    ID: 00000005    Num hooks: 0\r\n Name: re0         Type: ether     ID: 00000006    Num hooks: 2\r\n Name: rl0         Type: ether     ID: 00000007    Num hooks: 2\r\n Name: rl0_tee     Type: tee       ID: 00000009    Num hooks: 4\r\n Name: rl0_ip_acct Type: ipacct    ID: 0000000a    Num hooks: 2\r\n Name: re0_tee     Type: tee       ID: 00000012    Num hooks: 4\r\n Name: re0_ip_acct Type: ipacct    ID: 00000013    Num hooks: 2<\/pre>\n<pre>root@ring:\/usr\/sut # kldstat\r\nId Refs Address            Size      Name\r\n 1 46   0xffffffff80200000 1f6e480   kernel\r\n 2 1    0xffffffff82170000 316728    zfs.ko\r\n 3 2    0xffffffff82487000 cb78      opensolaris.ko\r\n 4 4    0xffffffff82494000 44bd8     ipfw.ko\r\n 5 1    0xffffffff824d9000 9bd0      ipfw_nat.ko\r\n 6 2    0xffffffff824e3000 17288     libalias.ko\r\n 7 1    0xffffffff824fb000 28dd0     dummynet.ko\r\n 8 1    0xffffffff82524000 8d40      ipdivert.ko\r\n 9 1    0xffffffff82621000 2986      uhid.ko\r\n10 1    0xffffffff82624000 39cc      ng_socket.ko\r\n11 5    0xffffffff82628000 c57d      netgraph.ko\r\n12 1    0xffffffff82635000 42ab      ng_mppc.ko\r\n13 1    0xffffffff8263a000 81f       rc4.ko\r\n14 1    0xffffffff8263b000 43da      ng_ether.ko\r\n15 1    0xffffffff82640000 17db      ng_ipacct.ko\r\n16 1    0xffffffff82642000 17ce      ng_tee.ko<\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043b\u043e\u0433\u0430 (\u0444\u0430\u0439\u043b \u0432\u0438\u0434\u0430 \/usr\/sut\/18.04\/180408.re0):<\/p>\n<pre>\u0410\u0434\u0440. \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430   \u041f\u043e\u0440\u0442    \u0410\u0434\u0440. \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f  \u041f\u043e\u0440\u0442   \u2116 \u043f\u0440\u043e\u0442. \u041f\u0430\u043a\u0435\u0442\u043e\u0432 \u0411\u0430\u0439\u0442\r\n192.168.113.11\u00a0 \u00a05230\u00a0 \u00a0 192.168.113.1\u00a0   3551 \u00a0 6\u00a0 \u00a0    2       92     -1\r\n192.168.113.11\u00a0 \u00a05230\u00a0 \u00a0 192.168.113.1\u00a0   3551 \u00a0 6\u00a0 \u00a0    4       168    0\r\n192.168.113.11   5225    192.168.113.1    3551   6       2       92     -1\r\n192.168.113.11   5225    192.168.113.1    3551   6       4       168    0\r\n192.168.113.11   5223    192.168.113.1    3551   6       2       92     -1\r\n192.168.113.11   5223    192.168.113.1    3551   6       4       168    0\r\n192.168.113.17   50646   193.47.166.29    123    17      1       76     -1\r\n192.168.113.11   5233    192.168.113.1    3551   6       2       92     -1\r\n192.168.113.11   5233    192.168.113.1    3551   6       4       168    0\r\n192.168.113.11   4427    92.157.81.29     28858  6       3       471    -1\r\n10.90.90.90      0       239.255.255.100  0      2       2       184    0\r\n192.168.113.11   5213    34.252.56.124    443    6       8       2664   100<\/pre>\n<p>\u0433\u0434\u0435 &#8211;\u00a0\u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 (\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \/etc\/protocols)<\/p>\n<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-bottom-right\"><a href=\"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=wpv2posts2683&print=pdf\" class=\"pdfprnt-button pdfprnt-button-pdf\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/tst-amo.net.ua\/blog\/wp-content\/plugins\/pdf-print\/images\/pdf.png\" alt=\"image_pdf\" title=\"View PDF\" \/><\/a><a href=\"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=wpv2posts2683&print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/tst-amo.net.ua\/blog\/wp-content\/plugins\/pdf-print\/images\/print.png\" alt=\"image_print\" title=\"Print Content\" \/><\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>&nbsp; root@tst:\/usr # portsnap fetch update root@tst:\/usr # portmaster net-mgmt\/ng_ipacct \u0414\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 \u043f\u0440\u043e\u043a\u0441\u0438 Squid, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c calamaris: root@tst:\/usr # portmaster www\/calamaris \u042f\u0434\u0440\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0435 &#8211; \u0432\u0441\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438. \u0421\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u0434\u0432\u0443\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445 rl0 &#8211; LAN, re0 &#8211; WAN. \u041f\u0440\u0430\u0432\u0438\u043c \/usr\/local\/etc\/ng_ipacct.conf, \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 &#8220;ng_ipacct_xl0_&#8221; \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 (2 \u0440\u0430\u0437\u0430) \u0438 &#8230;<\/p>\n<p><a href=\"https:\/\/tst-amo.net.ua\/blog\/?p=2683\" class=\"more-link\">Continue reading &lsquo;ng_ipacct &#8211; \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445&rsquo; &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[50,114],"tags":[],"class_list":["post-2683","post","type-post","status-publish","format-standard","hentry","category-freebsd","category-ng_ipacct"],"_links":{"self":[{"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2683"}],"collection":[{"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2683"}],"version-history":[{"count":22,"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2683\/revisions"}],"predecessor-version":[{"id":2710,"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2683\/revisions\/2710"}],"wp:attachment":[{"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tst-amo.net.ua\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}