Инициализация в новом репозитории
This commit is contained in:
commit
eb1f18f53e
374 changed files with 226678 additions and 0 deletions
|
|
@ -0,0 +1,35 @@
|
|||
export const validateIPAddress = (ip: string) => {
|
||||
const ipv4Pattern = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
||||
const ipv6Pattern = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;
|
||||
return ipv4Pattern.test(ip) || ipv6Pattern.test(ip);
|
||||
};
|
||||
|
||||
export const validateSameSubnet = (ip1: string, ip2: string, ip3: string | string[]): boolean => {
|
||||
const extractSubnet = (ip: string): string => {
|
||||
if (typeof ip !== 'string') {
|
||||
throw new TypeError(`Некорректный формат IP-адреса: ${ip}`);
|
||||
}
|
||||
return ip.split('.').slice(0, 3).join('.');
|
||||
};
|
||||
|
||||
const areInSameSubnet = (ip: string, subnet: string): boolean => {
|
||||
return extractSubnet(ip) === subnet;
|
||||
};
|
||||
|
||||
try {
|
||||
const subnet1 = extractSubnet(ip1);
|
||||
const subnet2 = extractSubnet(ip2);
|
||||
|
||||
// Проверяем, что IP и шлюз в одной подсети
|
||||
if (subnet1 !== subnet2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Если DNS — массив, проверяем, что хотя бы один DNS в той же подсети
|
||||
const dnsArray = Array.isArray(ip3) ? ip3 : [ip3];
|
||||
return dnsArray.some(dns => areInSameSubnet(dns, subnet1));
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue