Получение маски подсети ipv4 с Java - PullRequest
0 голосов
/ 02 июля 2011

Я пишу, потому что у меня есть некоторые проблемы с поиском правильной SubnetMask моего собственного ПК.Я уже прочитал вопрос Как получить маску подсети локальной системы с использованием Java? , но если я попытаюсь:

InetAddress thiscomputer = InetAddress.getLocalHost();
NetworkInterface thisNetworkInterface = NetworkInterface.getByInetAddress(thiscomputer);
int thiscomputerSubnetMask = thisNetworkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength();
System.out.println("This pc subnetmask: "+thiscomputerSubnetMask);

, то будет записано 64. Объект thisNetworkInterface.getInterfaceAddresses() имеет толькоеще один элемент и его 128.

Теперь я ищу число, которое можно использовать в протоколе ipv4, и моя фактическая маска подсети - 255.255.255.240, поэтому я ищу 16 (256-240), но я не могу получить это из методов, которые я знаю.

Кроме того, я даже не понимаю, что могут представлять 64 или 128!Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 02 июля 2011

Используйте код ниже, чтобы увидеть, какой адрес указан в / 64 (ответ вас удивит). Ответ в том, что .getInterfaceAddresses (). Get (0) не является расширяемым и может не возвращать ожидаемый вами ответ постоянно.

InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);

for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) {
    System.out.println(address.getAddress() + "/" + address.getNetworkPrefixLength());
}

РЕДАКТИРОВАТЬ: Вот вывод с моей машины (Mac).

/fe80:0:0:0:5ab0:35ff:fe6e:cdc3%6/64
/172.31.255.21/28
...