From 32255c6a3a320e666930ddd8067217e7b98a31dd Mon Sep 17 00:00:00 2001 From: shats Date: Sat, 24 Jan 2026 00:52:35 +0700 Subject: [PATCH] fix(NetworkConfigManager): enhance validation for /30 networks by ensuring local and remote IPs do not conflict with network and broadcast addresses, improving IP generation accuracy --- frontend/src/NetworkConfigManager.jsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/frontend/src/NetworkConfigManager.jsx b/frontend/src/NetworkConfigManager.jsx index 51b26f3..025253c 100644 --- a/frontend/src/NetworkConfigManager.jsx +++ b/frontend/src/NetworkConfigManager.jsx @@ -1003,6 +1003,13 @@ function NetworkConfigManager() { if (dVal % 4 !== 0) continue; // Базовый адрес должен быть кратен 4 if (dVal + 2 > 255) continue; // Проверяем, что remoteIp не превышает 255 // Для /30 dVal + 1 и dVal + 2 всегда валидны (не сетевой и не broadcast) + // Но нужно проверить, что эти IP не являются сетевыми или broadcast для других сетей /30 + const localLastOctet = dVal + 1; + const remoteLastOctet = dVal + 2; + // Проверяем, что Local IP не является сетевым адресом (кратен 4) или broadcast (кратен 4 + 3) + if (localLastOctet % 4 === 0 || localLastOctet % 4 === 3) continue; + // Проверяем, что Remote IP не является сетевым адресом (кратен 4) или broadcast (кратен 4 + 3) + if (remoteLastOctet % 4 === 0 || remoteLastOctet % 4 === 3) continue; } // Проверяем, что IP входят в диапазон пула @@ -1037,6 +1044,13 @@ function NetworkConfigManager() { // Для /30 dVal + 1 и dVal + 2 всегда валидны (не сетевой и не broadcast) if (prefix >= 30) { if (dVal + 2 > 255) continue; // Проверяем, что remoteIp не превышает 255 + // Дополнительно проверяем, что IP не являются сетевыми или broadcast для других сетей /30 + const localLastOctet = dVal + 1; + const remoteLastOctet = dVal + 2; + // Проверяем, что Local IP не является сетевым адресом (кратен 4) или broadcast (кратен 4 + 3) + if (localLastOctet % 4 === 0 || localLastOctet % 4 === 3) continue; + // Проверяем, что Remote IP не является сетевым адресом (кратен 4) или broadcast (кратен 4 + 3) + if (remoteLastOctet % 4 === 0 || remoteLastOctet % 4 === 3) continue; } // Проверяем, что IP входят в диапазон пула и отличаются