Как получить маску подсети локальной системы, используя Java?

Я использую этот метод лично

if (typeof(Foo).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Any(c => c.GetCustomAttributes(typeof(SomeAttribute), false).Any()))
{ 
    // do stuff
}
18
задан Cardinal System 26 April 2019 в 00:25
поделиться

3 ответа

сетевая маска первого адреса интерфейса localhost:

InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
networkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength();

более полный подход:

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

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

/ 24 означает 255.255.255.

26
ответ дан 30 November 2019 в 06:39
поделиться

java.net.InterfaceAddress в SE6 имеет метод getNetworkPrefixLength, который возвращает, как следует из названия, длину префикса сети. Вы можете рассчитать маску подсети из этого, если хотите, чтобы она была в этом формате. java.net.InterfaceAddress поддерживает как IPv4, так и IPv6.

getSubnetMask () в нескольких API-интерфейсах сетевых приложений возвращает маску подсети в форме java.net.InetAddress для указанного IP-адреса (в локальной системе может быть много локальных IP-адреса)

5
ответ дан 30 November 2019 в 06:39
поделиться

FWIW, в в прошлом я пробовал использовать InterfaceAddress.getNetworkPrefixLength () и InterfaceAddress.getBroadcast (), но они не t возвращает точную информацию (это в Windows с обновлением 10 Sun JDK 1.6.0). Длина префикса сети составляет 128 (а не 24, как в моей сети), а возвращаемый широковещательный адрес - 255.255.255.255 (а не 192.168.1.255, как в моей сети).

Джеймс

Обновление: Я только что нашел решение, размещенное здесь:

     http://forums.sun.com/thread.jspa?threadID=5277744

Вам нужно запретить Java использовать IPv6, чтобы он не попадал в IPv4 через IPv6. Добавление -Djava.net.preferIPv4Stack = true в командную строку исправляет результаты от InterfaceAddress.getNetworkPrefixLength () и InterfaceAddress.getBroadcast () для меня.

1
ответ дан 30 November 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: