Сеть на Java - IP-адреса

У каждой машины есть IP-адрес не имеет аналогов в сети. Он используется для идентификации машины, чтобы она могла получать пакеты, маршрутизируемые с помощью маршрутизаторов, отправленных другими машинами.
IP-адрес типа IPV4 на 32 бита(4 байта) имеет следующий вид: xxx.xxx.xxx.xxx, например: 192.168.0.3. Он состоит из двух частей: 
Правая часть указывает на сеть под названием  Идентификатор сети   : 192.168.0 и это static.
Во второй части слева показана машина в этой сети под названием  Идентификатор хоста   : 192.168.0.3.
IP-адрес по умолчанию 0.0.0.0/8. Используется только для подключения к DHCP-сервер, последний предоставляет IP-адрес.

Существует три класса адресации:
  1. класс AИдентификатор сети: xxx (126 сетей) и Идентификатор хоста: xxx.xxx.xxx (16777214 компьютеров).
  2. класс BИдентификатор сети : xxx.xxx (16384 сетей )  et l'Идентификатор хоста: xxx.xxx (65534 компьютеров).
  3. класс CИдентификатор сети : xxx.xxx.xxx (2097152 сетях )  et l'Идентификатор хоста: xxx (компьютер 254).

Маска:

Интерес  маски - это позволить  для идентификации  Сеть, связанная с IP-адресом. Он состоит из 4 байтов, таких как IP-адрес, например, маска IP-адреса 192.168.0.1 255.255.255.0 и мы пишем 192.168.0.1/24. Для новичков советую прочитать это резюме в Википедии: IP-адрес.

Проверьте правильность IP-адреса

public class VerifierAddress {

static boolean isCorrect(String adr){
String[] parts = adr.split("\\.");
//Диапазон числа от 0 до 255
for(int i = 0 ; i < 4; i++){
//Преобразуем в целое число и проверяем
if(new Integer(parts[i])< 0 || new Integer(parts[i])> 255)
//retroune false
return false;
}
//возвращает true по умолчанию
возвращает true;
}

public static void main(String[] args) {
String adr= "192.168.1.3";
System.out.println("adr+" равно "+isCorrect(adr));
}
}
Пакет, который позволяет нам манипулировать IP-адресами: java.net и предоставляет класс InetAdress, который содержит методы, с которыми мы будем работать:

getLocalHost: возвращает локальный IP-адрес машины.
getByName(String nom_de_la_machine): возвращает IP-адрес, соответствующий имени, переданному в качестве параметра.
getAllByName(Строка nom_de_la_machine): Возвращает все IP-адреса. которые соответствуют имени, переданному в качестве параметра.

Методы, применимые к этому объекту, возвращаемые любым из описанных методов:
getHostName: возвращает имя машины.
getAddress: возвращает IP-адрес в виде массива.
toString: вернуться туда  Канал  содержащий имя и адрес.

Следующая программа вычисляет префикс, адрес, маску сети, подстановочный знак Cisco, сетевой адрес и широковещательный адрес.

import java.math.BigInteger; 
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

/*************************************
* @author www.codeurjava.com
* Все права защищены
*/

public class Addressing {

public static void main(String[] zero) выбрасывает SocketException {

String address = "192.168.1.199/10";
String[] parts = address.split("/");
Строка ip = parts[0];
префикс int;
if (parts.length < 2) {
префикс = 0;
} else {
prefix = Integer.parseInt(parts[1]);
}
System.out.println("Address =\t" + ip+"\nPrefix =\t" + prefix);

//преобразуем всю маску в 32-битный массив
int mask = 0xffffffff < < (32 - префикс);
int значение = маска;
byte[] bytes_masque = new byte[]{
(byte)(значение > > > 24), (байт)(значение > > 16 & 0xff), (байт)(значение > > 8 & 0xff), (байт)(значение & 0xff) };

try {
//masque
InetAddress, netAddr = InetAddress.getByAddress(bytes_masque);
System.out.println("Маска =\t" + netAddr.getHostAddress());

/*************************
* сетевой адрес
*/
//Преобразуем IP-адрес в long
long ipl = ipToLong(ip);

//Преобразуем IP в массив 32bits
byte[] bytes_ip = new byte[]{
(byte) ((ipl > > 24) & 0xFF),
(байт) ((ipl > > 16) и 0xFF),
(байт) ((ipl > > 8 ) и 0xFF),
(байт) (ipl & 0xFF)};

//Логический ET между IP-адресом и маской
byte[] bytes_reseau = new byte[]{
(byte) (bytes_ip[0] & bytes_masque[0]),
(byte) (bytes_ip[1] & bytes_masque[1]),
(byte) (bytes_ip[2] & bytes_masque[2]),
(байт) (bytes_ip[3] & bytes_masque[3]),
};
//получен сетевой адрес
InetAddress adr_reseau = InetAddress.getByAddress(bytes_reseau);
System.out.println("Сетевой адрес =\t"+adr_reseau.getHostAddress());

/********************************
*Широковещательный адрес
*/
//сетевой адрес - инвертированная маска ~val & 0xff
//инвертировать маску
bytes_masque = new byte[]{
(byte) (~bytes_masque[0] & 0xff),
(byte) (~bytes_masque[1] & 0xff),
(byte) (~bytes_masque[2] & 0xff),
(byte) (~bytes_masque[3] & 0xff),
};
System.out.println("Маска с подстановочными знаками) =\t"+InetAddress.getByAddress(bytes_masque).getHostAddress());

byte[] bytes_broadcast = new byte[]{
(byte) (bytes_reseau[0] | bytes_masque[0]),
(byte) (bytes_reseau[1] | bytes_masque[1]),
(byte) (bytes_reseau[2] | bytes_masque[2]),
(byte) (bytes_reseau[3] | bytes_masque[3]),
};
//Получен широковещательный адрес
InetAddress adrbroadcast = InetAddress.getByAddress(bytes_broadcast);
System.out.println("Широковещательный адрес =\t"+adrbroadcast.getHostAddress());

} catch (UnknownHostException e) {
e.printStackTrace();
}
}

public static long ipToLong(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\\.");

for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
результат |= ip < < (i*8);
}
возвращаем результат;
}
}
Runtime:
Address= 35.204.121.13
Prefix= 10
Mask= 255.192.0.0
Wildcard= 0.63.255.255
Сетевой адрес= 35.192.0.0
Широковещательный адрес = 35.255.255.255
Узнать IP-адрес сервера в webТакже можно узнать локальный адрес компьютера и сервера по веб-адресу.

import java.net.InetAddress; 
import java.net.SocketException;
import java.net.UnknownHostException;

public class ServerAddress {

public static void main(String[] zero) выбрасывает SocketException {

String LocaleAddress;
InetAddress ServerAddress;

try{
//local address
localeAdresse = (string) InetAddress.getLocalHost().getHostAddress();
System.out.println("Локальный адрес = "+LocaleAddress);

//Адрес сервера google
ServerAddress= InetAddress.getByName("www.google.net");
System.out.println("адрес сервера Google = "+ServerAddress);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
Runtime:
Локальный адрес = 192.168.1.2
Адрес сервера Google = www.google.net/41.201.128.40