Проверьте, содержит ли CIDR публичные IP-адреса - в Java - PullRequest
0 голосов
/ 12 июня 2019

Учитывая строку CIDR, я хотел бы проверить, содержит ли этот CIDR IP-адреса, которые не зарезервированы как частные адреса (т. Е. В одном из следующих диапазонов:)

192.168.0.0 - 192.168.255.255
172.16.0.0 - 172.31.255.255
10.0.0.0 - 10.255.255.255

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Разобрать его в InetAddress , затем проверить его байтов .

int slash = cidr.indexOf('/');
String ip = cidr.substring(0, slash);
InetAddress address = InetAddress.getByName(ip);
byte[] bytes = address.getAddress();
boolean privateAddress =
    (bytes[0] == 10) ||
    (bytes[0] == (byte) 172 && (bytes[1] >= 16 && bytes[1] < 32)) ||
    (bytes[0] == (byte) 192 && bytes[1] == (byte) 168);

Или вы можете просто проверить строку напрямую:

boolean privateAddress =
    cidr.startsWith("10.") || cidr.startsWith("192.168.") ||
    cidr.matches("172\\.(1[6-9]|2[0-9]|3[01])\\..*");

Лично я бы выбрал первый подход;короче не всегда лучше.Я бы предпочел использовать синтаксический анализатор, который обрабатывает каждый угловой случай записи адреса IPv4.

0 голосов
/ 12 июня 2019

Закончено определение статических блоков CIDR для частных диапазонов и использование следующего кода, чтобы увидеть, перекрывается ли он с данным CIDR - https://gist.github.com/nacx/8837081716c5b333d7edc8bec4684482

...