Программный доступ к сетевым параметрам

Java SE 6.0, кодовое название Mustang, быстро приближается к бета-2-досрочном освобождении доступа. Одним из дополнительных функций в Java SE 6 позволяет получить доступ к информации больше, чем вы могли получить доступ ранее о сетевых интерфейсах. Она не является редкостью иметь системы, работающие с несколькими активных сетевых соединений, таких, как проводная, 802.11 / B / G Wireless, и Bluetooth. Предыдущие версии J2SE была ограниченная поддержка для обеспечения доступа к открытой информации, связанной с несколькими соединениями. Java SE 6 расширяет эту возможность.

Представлен в J2SE 1.4, класс NetworkInterface предоставляет доступ к некоторой информации о сетевых интерфейсах. Вы можете использовать getNetworkInterfaces () в NetworkInterface информацию о множестве установленных сетей, или поиска конкретной сети с getByName () или getByInetAddress () методы. Затем можно отобразить информацию о сетевых интерфейсов, таких как имя или его InetAddress. Чтобы увидеть, какого рода информацию вы могли бы доступ с помощью NetworkInterface, запустите следующую программу, ListNets, в J2SE 5.0:


   import java.io.*;

   import java.net.*;

   import java.util.*;



   public class ListNets {

  

     public static void main(String args[])

         throws SocketException {

       Enumeration<NetworkInterface> nets =

         NetworkInterface.getNetworkInterfaces();

       for (NetworkInterface netint : Collections.list(nets)) {

         displayInterfaceInformation(netint);

       }

     }



     private static void displayInterfaceInformation(

         NetworkInterface netintthrows SocketException {

       System.out.printf(

           "Display name: %s%n", netint.getDisplayName());

       System.out.printf("Name: %s%n", netint.getName());

       Enumeration<InetAddress> inetAddresses = 

           netint.getInetAddresses();

       for (InetAddress inetAddress : Collections.list(

           inetAddresses)) {

       System.out.printf("InetAddress: %s%n", inetAddress);

       }

      System.out.printf("%n");

     }

   }  

Если вы запустите программу ListNets на типичной машине Microsoft Windows, ваш результат должен выглядеть следующим — отображение наименования и адреса могут быть разными на основе текущей оборудования и установки:

Display name: MS TCP Loopback interface
Name: lo
InetAddress: /127.0.0.1
Display name: Intel(R) PRO/100 VE Network Connection -
Packet Scheduler Miniport
Name: eth0
Display name: RCA USB Cable Modem - Packet Scheduler Miniport
Name: eth1
InetAddress: /11.22.33.44

Linux машины будет иметь аналогичный вывод для имен, но имеют разные названия и, возможно отображение различных адресов.

В таких методов, как isMCGlobal () и isMCSiteLocal (), информация, которую можно получить о каждом InetAddress в большей степени связано с групповой и адрес типа, то о сетевом интерфейсе себя. Это сетевая информация, связанная теперь доступна с классом NetworkInterface в Java SE 6.0.

Сетевые интерфейсы могут быть иерархически организованным. Класс NetworkInterface в Java SE 6.0 включает два метода, GetParent () и getSubInterfaces (), которые имеют отношение к иерархии сетевого интерфейса. GetParent () возвращает родителя NetworkInterface из интерфейса. Иными словами, если что-то подинтерфейсом, GetParent () возвращает ненулевое значение. GetSubInterfaces () возвращает все подинтерфейсов по сетевому интерфейсу.

Вы можете обнаружить, если сетевой интерфейс "вверх" (то есть, бег) с ISUP () метод. Существуют также методы, которые говорят вам тип сетевого интерфейса: isLoopback () сообщает вам, если сетевой интерфейс, интерфейс обратной связи, isPointToPoint () сообщает вам, если это "точка-точка", а isVirtual () сообщает вам, если свой виртуальный интерфейс.

Помимо основной информации о состоянии, вы можете получить доступ к другим параметрам сети о сетевом интерфейсе такие, как свой физический адрес оборудования (как с массивом байтов) и максимальный (MTU) (максимальный размер пакета).

Последний пункт информации, доступной для каждого NetworkInterface приводится перечень новых интерфейс, который называется InterfaceAddress. Это дает вам InetAddress для этого адреса, широковещательного адреса и маски подсети.

Вот обновленная версия программы ListNets которая использует NetworkInterface усовершенствования:


   import java.io.*;

   import java.net.*;

   import java.util.*;

   

   public class ListNets {

     private static final Console console = System.console();

   

     public static void main(String args[]) throws 

         SocketException {

       Enumeration<NetworkInterface> nets =

         NetworkInterface.getNetworkInterfaces();

       for (NetworkInterface netint : Collections.list(nets)) {

         displayInterfaceInformation(netint);

       }

     }

   

     private static void displayInterfaceInformation(

         NetworkInterface netintthrows SocketException {

       console.printf("Display name: %s%n"

           netint.getDisplayName());

       console.printf("Name: %s%n", netint.getName());

       Enumeration<InetAddress> inetAddresses = 

           netint.getInetAddresses();

       for (InetAddress inetAddress : Collections.list(

           inetAddresses)) {

         console.printf("InetAddress: %s%n", inetAddress);

       }

   

       console.printf("Parent: %s%n", netint.getParent());

       console.printf("Up? %s%n", netint.isUp());

       console.printf("Loopback? %s%n", netint.isLoopback());

       console.printf(

           "PointToPoint? %s%n", netint.isPointToPoint());

       console.printf(

           "Supports multicast? %s%n", netint.isVirtual());

       console.printf("Virtual? %s%n", netint.isVirtual());

       console.printf("Hardware address: %s%n",

         Arrays.toString(netint.getHardwareAddress()));

       console.printf("MTU: %s%n", netint.getMTU());

   

       List<InterfaceAddress> interfaceAddresses = 

           netint.getInterfaceAddresses();

       for (InterfaceAddress addr : interfaceAddresses) {

         console.printf(

             "InterfaceAddress: %s%n", addr.getAddress());

       }

       console.printf("%n");

       Enumeration<NetworkInterface> subInterfaces = 

           netint.getSubInterfaces();

       for (NetworkInterface networkInterface : Collections.list(

           subInterfaces)) {

         console.printf("%nSubInterface%n");

         displayInterfaceInformation(networkInterface);

       }

       console.printf("%n");

     }

   

Запуск обновленного ListNets в Java SE 6.0. Опять же, результат зависит от конфигурации системы. Обратите внимание, что некоторая информация может быть доступна по соображениям безопасности.

> java ListNets
Display name: MS TCP Loopback interface
Name: lo
InetAddress: /127.0.0.1
Parent: null
Up? true
Loopback? true
PointToPoint? false
Supports multicast? false
Virtual? false
Hardware address: null
MTU: 1520
InterfaceAddress: /127.0.0.1
Broadcast Address: /127.255.255.255
Network Prefix Length: 8
Display name: Intel(R) PRO/100 VE Network Connection -
Packet Scheduler Miniport
Name: eth0
Parent: null
Up? false
Loopback? false
PointToPoint? false
Supports multicast? false
Virtual? false
Hardware address: [0, 1, 2, 3, 4, 5]
MTU: 1500
Display name: RCA USB Cable Modem - Packet Scheduler Miniport
Name: eth1
InetAddress: /11.22.33.44
Parent: null
Up? true
Loopback? false
PointToPoint? false
Supports multicast? false
Virtual? false
Hardware address: [0, 2, 3, 4, 5, 6]
MTU: 1500
InterfaceAddress: /11.22.33.44
Broadcast Address: /11.22.33.255
Network Prefix Length: 22

Вывод показывает, что соединение с сетью eth1 истекло, и подключены к сети Интернет с IP-адресом 11.22.33.44. Она также показывает, что сетевое соединение eth0 вниз. Loopback Интерфейс Up (и всегда должны быть выше).

Сравните результаты программы на то, что вы получите от чего-то, как команда Ipconfig (с / все опции). Вы увидите, очень похожие результаты.

Для получения дополнительной информации о сетевых программ с платформой Java, см. в The Java Tutorial.

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>