
Future Splasher
  
Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 15.6.2005
Где: Екатеринбург
Репутация: нет Всего: 17
|
Спасиба башое, благодаря тебе вот что нашел. Цитата(java guru) | Programmatic access to network parameters http://java.sun.com/developer/JDCTechTips/2006/tt0513.html#1
Приближается релиз Beta 2 версии Java SE 6.0, носящей кодовое название Mustang. Одной из особенностей, появившихся в версии Java SE 6.0, является предоставление доступа к параметрам сетевых настроек. На сегодняшний момент достаточно распространены системы, использующие одновременно несколько сетевых подключений, таких как проводные, беспроводные (802.11 a/b/g) и bluetooth. В предыдущих версиях J2SE имелась ограниченная поддержка доступа и получения информации о нескольких сетевых подключениях. В версии Java SE 6.0 данная поддержка была расширена.
Класс NetworkInterface, появившийся в версии J2SE 1.4, предоставляет доступ к некоторой информации о сетевых адаптерах. Вы можете получить информацию о всех настроенных сетевых подключениях при помощи метода getNetworkInterfaces() класса NetworkInterface. Вы также можете получить информацию об одтельном сетевом подключении используя методы getByName() или getByInetAddress(). Затем вы можете вывести информацию о сетевом подключении, как, например его имя и адрес. Для просмотра информации, которую вы можете получить при помощи класса 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 netint) throws 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"); } }
|
В случае выполнения данной программы на типичной машине 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 у вас будут похожие параметры name, но отличные параметры Display name и возможно InetAddress. Используя методы isMCGlobal() и isMCSiteLocal() вы можете получить информацию, относящуюся к широковещательным сообщениям и типу адреса, а к типу самого сетевого интерфейса. Доступ к параметрам сетевого интерфейса теперь доступен из класса NetworkInterface в Java SE 6.0.
Сетевые интерфейсы имеют иерархическую организацию. В класс NetworkInterface в Java SE 6.0 включены два метода getParent() и getSubInterfaces(), которые относятся к иерархии сетевых интерфейсов. Метод getParent() возвращает родительский сетевой интерфейс для текущего интерфейса. Другими словами, если какой-либо интерфейс имеет родительский интерфейс, то возвращается не нулевое значение. Метод getSubInterfaces() соответственно возвращает дочерние интерфейсы.
Вы можете узнать поднят ли сетевой интерфейс (те работает ли он) при помощи метода isUp(). Также существуют методы для определения типа сетевого интерфейса: так метод isLoopback() определяет является ли данный интерфейс петлевым, метод isPointToPoint() представляет ли интерфейс соединение точка-точка, а метод isVirtual() определяет является ли он виртуальным.
Помимо основной информации вы также можете получить доступ к другим параметрам сетевого интерфейса как физический адрес устройства (в виде массива байтов) или максимальный размер пакета (MTU).
Еще одним источником информации, доступным для каждого сетевого подключения является список под названием InterfaceAddress. Он предоставляет информацию о сетевом адресе, широковещательном адресе и адресе подсети для данного интерфейса.
Ниже приводится обновленная версия программы 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 netint) throws 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"); } }
|
Запустите данную версию в 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 – включен (данный интерфейс должен быть включен всегда).
Сравните результаты вывода данной программы с результатами, получаемыми при помощи утилиты ipconfig (с ключом /all). Вы должны получить достаточно похожие результаты.
Для получения дополнительной информации по сетевому программированию на языке Java обращайтесь к разделу Custom Networking trail руководства Java Tutorial.
|
Это сообщение отредактировал(а) Maksys - 21.7.2006, 20:51
--------------------
С уважением, BiMaWa™©.  
|