Π‘Π»Π΅Π΄ ΠΠ΅ΡΠΎΠ΄ΡΡ Π½Π° Π°ΡΠ°ΠΊΠ° Trojan Source, ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Unicode ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΡΠ΅Π΄Π° Π½Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄Π²ΡΠΏΠΎΡΠΎΡΠ΅Π½ ΡΠ΅ΠΊΡΡ, Π΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π΄ΡΡΠ³Π° ΡΠ΅Ρ Π½ΠΈΠΊΠ° Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΊΡΠΈΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠ° Π·Π° ΠΊΠΎΠ΄ Π½Π° JavaScript. ΠΠΎΠ²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° unicode ΡΠΈΠΌΠ²ΠΎΠ»Π° βγ €β (ΠΊΠΎΠ΄ 0x3164, βHANGUL FILLERβ), ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ ΠΊΡΠΌ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° Π½Π° Π±ΡΠΊΠ²ΠΈΡΠ΅, Π½ΠΎ Π½ΡΠΌΠ° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. Unicode ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΠΏΠΎΠΏΠ°Π΄Π° ΡΠΎΠ·ΠΈ ΡΠΈΠΌΠ²ΠΎΠ», Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π° ΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° ECMAScript 2015 Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² JavaScript, ΠΊΠΎΠ΅ΡΠΎ Π΄Π°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Π½ΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΈ Π½Π° ΠΊΠΎΠ΄, ΠΊΠ°ΡΠΎ Notepad++ ΠΈ VS Code.
ΠΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ Π΄Π°Π΄Π΅Π½ ΠΊΠΎΠ΄ Π·Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Node.js, Π² ΠΊΠΎΠΉΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΡΡΡΡΠΎΡΡΠ° ΡΠ΅ ΠΎΡ Π΅Π΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ» βγ €β, Π΅ ΡΠΊΡΠΈΡ Π±Π΅ΠΊΠ΄ΠΎΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΠ°Π·Π°Π½ ΠΎΡ Π°ΡΠ°ΠΊΡΠ²Π°ΡΠ° ΠΊΠΎΠ΄: app.get(β/network_healthβ, async (req, res) => { const { timeout,γ €} = req.query; // ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ βconst { timeout,γ € \u3164}β const checkCommands = [ βping -c 1 google.comβ, βcurl -s http://example.com/β,γ € // ΡΠ»Π΅Π΄ Π·Π°ΠΏΠ΅ΡΠ°ΡΡΠ° ΡΠ»Π΅Π΄Π²Π° ΡΠΈΠΌΠ²ΠΎΠ» \u3164 ];
ΠΠ° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄, ΠΏΡΠ΅Π· Π²ΡΠ½ΡΠ½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° ΡΠ°ΠΌΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° timeout, Π° ΠΌΠ°ΡΠΈΠ²ΡΡ Ρ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΡΠ΄ΡΡΠΆΠ° Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π΅Π½ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΡΠΏΠΈΡΡΠΊ. ΠΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, ΡΠ»Π΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° timeout, ΡΠ΅ Π·Π°Π΄Π°Π²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° Π΄ΡΡΠ³Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Ρ ΠΊΠΎΠ΄ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° \u3164, ΠΊΠΎΡΡΠΎ ΡΡΡΠΎ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΠΌΠ°ΡΠΈΠ²Π° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. Π’Π°ΠΊΠ° ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΊΠ°Π²Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, Π·Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π±Π΅ΠΊΠ΄ΠΎΡΠ° ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ ΠΊΠΎΠ΄, Π°ΡΠ°ΠΊΡΠ²Π°ΡΠΈΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π·Π°ΡΠ²ΠΊΠ° ΠΎΡ Π²ΠΈΠ΄Π° Β«https://host:8080/network_health?=ΠΊΠΎΠΌΠ°Π½Π΄Π°Β».
ΠΠ°ΡΠΎ ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ ΠΏΠΎΡΠΎΡΠ²Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡΡ βΗβ (ALVEOLAR CLICK), ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ»ΡΠ·ΠΈΡ Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»Π΅Π½ Π·Π½Π°ΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΡΠ°Π·ΡΡ βif(environmentΗ=ENV_PROD){β ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π² Node.js 14 Π²ΠΈΠ½Π°Π³ΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΡΡΠΈΠ½Π΅Π½, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² Π½Π΅Π³ΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΡΠ°Π·Π»ΠΈΡΠΈΠ΅, Π° ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° βenvironmentΗβ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ENV_PROD. Π‘ΡΠ΅Π΄ Π·Π°Π±Π»ΡΠΆΠ΄Π°Π²Π°ΡΠΈΡΠ΅ unicode ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΡΠ° ΡΡΡΠΎ βοΌβ, βββ, βοΌβ, ββ©΅β, ββ¨β, ββ«½β, βκΏβ ΠΈ βββ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
