Π‘Π»Π΅Π΄Π²Π°ΠΉΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π° Π°ΡΠ°ΠΊΠ° Π½Π° 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 ];
ΠΠ° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄ ΠΏΡΠ΅Π· Π²ΡΠ½ΡΠ½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° ΡΠ°ΠΌΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅, Π° ΠΌΠ°ΡΠΈΠ²ΡΡ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ, ΡΡΠ΄ΡΡΠΆΠ° Π±Π΅Π·Π²ΡΠ΅Π΄Π΅Π½ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΡΠΏΠΈΡΡΠΊ. ΠΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ»Π΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π·Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π΄ΡΡΠ³Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Ρ ΠΊΠΎΠ΄Π° Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° \u3164, ΠΊΠΎΡΡΠΎ ΡΡΡΠΎ ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠ²Π° Π² ΠΌΠ°ΡΠΈΠ²Π° ΠΎΡ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½, Π°ΠΊΠΎ ΡΠ°ΠΊΡΠ² Π΄ΠΈΠ·Π°ΠΉΠ½ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½, Π°ΡΠ°ΠΊΡΠ²Π°ΡΠΈΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π·Π°ΡΠ²ΠΊΠ° ΠΊΠ°ΡΠΎ βhttps://host:8080/network_health?%E3%85%A4=commandβ, Π·Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Π·Π°Π΄Π½Π°ΡΠ° Π²ΡΠ°ΡΠ° ΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΡΠ²ΠΎΡ ΠΊΠΎΠ΄.
ΠΡΡΠ³ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ Π·Π½Π°ΠΊΡΡ "Η" (ΠΠΠΠΠΠΠΠ ΠΠ Π©Π ΠΠΠΠΠΠ), ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π·Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»Π΅Π½ Π·Π½Π°ΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·ΡΠ°Π·ΡΡ βif(environmentΗ=ENV_PROD){β, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π² Node.js 14, Π²ΠΈΠ½Π°Π³ΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ Π²Π΅ΡΠ΅Π½, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π·Π° ΡΠ°Π·Π»ΠΈΠΊΠ°, Π° ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ENV_PROD Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° βenvironmentΗβ. ΠΡΡΠ³ΠΈ ΠΏΠΎΠ΄Π²Π΅ΠΆΠ΄Π°ΡΠΈ ΡΠ½ΠΈΠΊΠΎΠ΄ Π·Π½Π°ΡΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ "οΌ", "β", "οΌ", "β©΅", "β¨", "β«½", "κΏ" ΠΈ "β".
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru