Class DhcpPacket
java.lang.Object
ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket
- All Implemented Interfaces:
Comparator<DhcpOption>
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Опция, которой оперирует биллинг для поиска агентского устройства, сервиса. -
Field Summary
Modifier and TypeFieldDescriptionbyte[]
Client HW address.byte[]
Client IP.static final int
Code for DHCPACK Messagestatic final int
Code for DHCPDECLINE Messagestatic final int
Code for DHCPDISCOVER Messagestatic final int
Code for DHCPINFORM Messagestatic final int
Code for DHCPNAK Messagestatic final int
Code for DHCPOFFER Messagestatic final int
Code for DHCPRELEASE Messagestatic final int
Code for DHCPREQUEST Messagebyte[]
Boot file name.static short
Маска для поля flags, устанавливающего способ отправки dhcp-пакета как broadcast (всем).short
Flags.byte[]
Relay agent IP.byte
Hardware address length.byte
Hw options.byte
HW address Type.byte
Тип DHCP-пакета.byte
Op code.static final byte
Тип DHCP-сообщения - от клиента к серверуstatic final byte
Тип DHCP-сообщения - от сервера к клиентуstatic final byte
DHCP-опция 82.static final byte
DHCP-опция 61.static final byte
DHCP-опция 8.static final byte
DHCP-опция 57.static final byte
DHCP-опция 15.static final byte
DHCP-опция 6.static final byte
DHCP-опция 12.static final byte
DHCP-опция 51.static final byte
DHCP-опция 7.static final byte
DHCP-опция 9.static String[]
static final byte
DHCP-опция 5.static final byte
DHCP-опция 55.static final byte
DHCP-опция 59.static final byte
DHCP-опция 58.static final byte
DHCP-опция 50.static final byte
DHCP-опция 3.static final byte
DHCP-опция 54.static final byte
DHCP-опция 1.static final byte
DHCP-опция 2.static final byte
DHCP-опция 4.static final byte
Option 60 (Vendor class identifier) https://tools.ietf.org/html/rfc2132#section-9.13short
Elapsed time from trying to boot.byte[]
Server IP.byte[]
Optional server host name.int
Transaction id.byte[]
Your client IP.static final byte
Константа для нулевого значения байта -
Constructor Summary
ConstructorDescriptionКонструктор пустого пакета.DhcpPacket
(ByteBuffer request) Конструктор пакета - запроса. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Очистка подопций 82й опции.final int
compare
(DhcpOption o1, DhcpOption o2) Сравнение опций в зависимости от их "веса"final DhcpPacket
Создание ответного dhcp-пакета на dhcp-запрос на основании данных запроса.final DhcpOption
getOption
(byte code) <O> O
getOption
(DhcpPacket.DhcpPacketOption<O> option) Получение опции(атрибута) из пакета.<O> O
getOption
(DhcpPacket.DhcpPacketOption<O> option, O value) Получение опции(атрибута) из пакета.final DhcpOption
getSubOption
(byte code) boolean
Возвращает наличие Options.82 в запросе.final boolean
Проверка на заполненность поляciaddr
final boolean
Проверка, пришел ли dhcp-запрос от dhcp-relay агента, ретранслировавшего dhcp-запрос от абонента.static final boolean
isNil
(byte[] b) Проверка на незаполненность dhcp-поля, представленного массивом байтов.static boolean
isRenewRequest
(DhcpPacket request) Првоеряет, является ли данный dhcp-запрос renew-запросом.void
serialize
(ByteBuffer bb) Сериализация dhcp-пакета в последовательность байт.final void
setOption
(byte code, byte[] value) Установка значения dhcp-опции.final void
final void
setOption
(DhcpOption option) Установка значения опции в dhcp-пакет.<O> void
setOption
(DhcpPacket.DhcpPacketOption<O> option, O value) Установка опции в пакет.final void
setSubOption
(byte code, byte[] value) final void
setSubOption
(byte code, String stringValue) final void
setSubOption
(DhcpOption option) toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.util.Comparator
equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
ZERO
public static final byte ZEROКонстанта для нулевого значения байта- See Also:
-
FLAG_BROADCAST
public static short FLAG_BROADCASTМаска для поля flags, устанавливающего способ отправки dhcp-пакета как broadcast (всем). В противовес unicast - одному. -
OP_BOOT_REQUEST
public static final byte OP_BOOT_REQUESTТип DHCP-сообщения - от клиента к серверу- See Also:
-
OP_BOOT_RESPONSE
public static final byte OP_BOOT_RESPONSEТип DHCP-сообщения - от сервера к клиенту- See Also:
-
DHCP_DISCOVER
public static final int DHCP_DISCOVERCode for DHCPDISCOVER Message- See Also:
-
DHCP_OFFER
public static final int DHCP_OFFERCode for DHCPOFFER Message- See Also:
-
DHCP_REQUEST
public static final int DHCP_REQUESTCode for DHCPREQUEST Message- See Also:
-
DHCP_DECLINE
public static final int DHCP_DECLINECode for DHCPDECLINE Message- See Also:
-
DHCP_ACK
public static final int DHCP_ACKCode for DHCPACK Message- See Also:
-
DHCP_NAK
public static final int DHCP_NAKCode for DHCPNAK Message- See Also:
-
DHCP_RELEASE
public static final int DHCP_RELEASECode for DHCPRELEASE Message- See Also:
-
DHCP_INFORM
public static final int DHCP_INFORMCode for DHCPINFORM Message- See Also:
-
OPTION_SUBNET_MASK
public static final byte OPTION_SUBNET_MASKDHCP-опция 1. Маска подсети, из которой получен адрес. IP-адрес в десятичном формате с точками- See Also:
-
OPTION_TIME_OFFSET
public static final byte OPTION_TIME_OFFSETDHCP-опция 2. Задает разницу во времени (в секундах) в подсети клиента по сравнению с Универсальным скоординированным временем (UTC). 32-разрядное целое число- See Also:
-
OPTION_ROUTER
public static final byte OPTION_ROUTERDHCP-опция 3. Список IP-адресов шлюзов по умолчанию. Один или несколько IP-адресов в десятичном формате с точками- See Also:
-
OPTION_TIME_SERVER
public static final byte OPTION_TIME_SERVERDHCP-опция 4. Список IP-адресов серверов времени. Один или несколько IP-адресов в десятичном формате с точками- See Also:
-
OPTION_NAME_SERVER
public static final byte OPTION_NAME_SERVERDHCP-опция 5. Список IP-адресов серверов имен. Один или несколько IP-адресов в десятичном формате с точками- See Also:
-
OPTION_DOMAIN_NAME_SERVER
public static final byte OPTION_DOMAIN_NAME_SERVERDHCP-опция 6. Список IP-адресов серверов DNS. Один или несколько IP-адресов в десятичном формате с точками- See Also:
-
OPTION_LOG_SERVER
public static final byte OPTION_LOG_SERVERDHCP-опция 7. Список IP-адресов серверов протоколов. Один или несколько IP-адресов в десятичном формате с точками- See Also:
-
OPTION_COOKIE_SERVER
public static final byte OPTION_COOKIE_SERVERDHCP-опция 8. Список IP-адресов серверов cookie. Один или несколько IP-адресов в десятичном формате с точками- See Also:
-
OPTION_LPR_SERVER
public static final byte OPTION_LPR_SERVERDHCP-опция 9. Список IP-адресов серверов LPR. Один или несколько IP-адресов в десятичном формате с точками- See Also:
-
OPTION_HOST_NAME
public static final byte OPTION_HOST_NAMEDHCP-опция 12. Имя хоста клиента. Строка ASCII- See Also:
-
OPTION_DOMAIN_NAME
public static final byte OPTION_DOMAIN_NAMEDHCP-опция 15. Имя домена DNS по умолчанию. Строка ASCII- See Also:
-
OPTION_REQUESTED_IP_ADDRESS
public static final byte OPTION_REQUESTED_IP_ADDRESSDHCP-опция 50. IP-адрес, запрашиваемый клиентом- See Also:
-
OPTION_IP_ADDRESS_LEASE_TIME
public static final byte OPTION_IP_ADDRESS_LEASE_TIMEDHCP-опция 51. Время выделения для возвращаемого адреса. По умолчанию сервер DHCP использует ключевое слово leasetimedefault, однако непосредственное задание опции 51 переопределяет его. 32-разрядное целое число без знака- See Also:
-
OPTION_SERVER_IDENTIFIER
public static final byte OPTION_SERVER_IDENTIFIERDHCP-опция 54. Используются сервером DHCP или клиентом для указания адреса сервера или сервера, на который направляется сообщение.- See Also:
-
OPTION_DHCP_MAX_MSG_SIZE
public static final byte OPTION_DHCP_MAX_MSG_SIZEDHCP-опция 57. DHCP Maximum Message Size (длина 2)- See Also:
-
OPTION_RENEWAL_TIME_VALUE
public static final byte OPTION_RENEWAL_TIME_VALUEDHCP-опция 58. Интервал времени (в секундах), в течение которого клиент должен отправить запрос на обновление. 32-разрядное целое число без знака- See Also:
-
OPTION_REBINDING_TIME_VALUE
public static final byte OPTION_REBINDING_TIME_VALUEDHCP-опция 59. Интервал времени (в секундах), в течение которого клиент должен отправить запрос на повторное связывание. 32-разрядное целое число без знака- See Also:
-
OPTION_PARAMETER_REQUEST_LIST
public static final byte OPTION_PARAMETER_REQUEST_LISTDHCP-опция 55. Используется клиентом DHCP для указания требуемых параметров, которые бы он хотел получить от сервера. Сервер может не поддерживать все требуемые клиентом поля и будет возвращать только те, которые ему доступны. В опции фигурирует N байтов, каждый из которых является ссылкой на соответствующую DHCP-опцию. При формировании DHCP-ответа значение опции OPTION_PARAMETER_REQUEST_LIST из DHCP-запроса используется для упорядочивания опций при сериализации.- See Also:
-
OPTION_VENDOR_CLASS_IDENTIDIER
public static final byte OPTION_VENDOR_CLASS_IDENTIDIEROption 60 (Vendor class identifier) https://tools.ietf.org/html/rfc2132#section-9.13- See Also:
-
OPTION_CLIENT_IDENTIDIER
public static final byte OPTION_CLIENT_IDENTIDIERDHCP-опция 61. Используется для однозначной идентификации клиента DHCP- See Also:
-
OPTION_AGENT_INFORMATION
public static final byte OPTION_AGENT_INFORMATIONDHCP-опция 82. Используется для того чтобы проинформировать DHCP-сервер о том, от какого DHCP-ретранслятора (DHCP-relay) и через какой его порт был получен запрос- See Also:
-
OPTION_NAME
-
op
public byte opOp code. Тип сообщения. Может принимать значения: BOOTREQUEST (0x01, запрос от клиента к серверу) и BOOTREPLY (0x02, ответ от сервера к клиенту). Размер поля - 1 байт. -
htype
public byte htypeHW address Type. Тип аппаратного адреса. Допустимые значения этого поля определены в RFC 1700 «Assigned Numbers». Например, для MAC-адреса Ethernet это поле принимает значение 0x01. Размер поля - 1 байт. -
hlen
public byte hlenHardware address length. Длина аппаратного адреса в байтах. Для MAC-адреса Ethernet — 0x06. Размер поля - 1 байт -
hops
public byte hopsHw options. Количество промежуточных маршрутизаторов (так называемых агентов ретрансляции DHCP), через которые прошло сообщение. Клиент устанавливает это поле в 0x00. Размер поля - 1 байт -
xid
public int xidTransaction id. Уникальный идентификатор транзакции, генерируемый клиентом в начале процесса получения адреса. Размер поля - 4 байта -
secs
public short secsElapsed time from trying to boot. Время в секундах с момента начала процесса получения адреса. Может не использоваться (в этом случае оно устанавливается в 0x0000). Размер поля - 2 байта -
flags
public short flagsFlags. Поле для флагов — специальных параметров протокола DHCP. Размер поля - 2 байта. -
ciaddr
public byte[] ciaddrClient IP. IP-адрес клиента. Заполняется только в том случае, если клиент уже имеет собственный IP-адрес и способен отвечать на запросы ARP (это возможно, если клиент выполняет процедуру обновления адреса по истечении срока аренды). Размер поля - 4 байта. -
yiaddr
public byte[] yiaddrYour client IP. Новый IP-адрес клиента, предложенный сервером. Размер поля - 4 байта. -
siaddr
public byte[] siaddrServer IP. IP-адрес сервера. Возвращается в предложении DHCP (DHCP-OFFER). Размер поля - 4 байта -
giaddr
public byte[] giaddrRelay agent IP. IP-адрес агента ретрансляции, если таковой участвовал в процессе доставки сообщения DHCP до сервера. Размер поля - 4 байта. -
chaddr
public byte[] chaddrClient HW address. Аппаратный адрес (обычно MAC-адрес) клиента. Размер поля - 16 байт. -
sname
public byte[] snameOptional server host name. Необязательное имя сервера в виде нуль-терминированной строки. Размер поля - 64 байта -
file
public byte[] fileBoot file name. Необязательное имя файла на сервере, используемое бездисковыми рабочими станциями при удалённой загрузке. Как иsname
, представлено в виде нуль-терминированной строки. Размер поля - 128 байт. -
messageType
public byte messageTypeТип DHCP-пакета. Размер поля - 1 байт. Возможные значения:
-
-
Constructor Details
-
DhcpPacket
public DhcpPacket()Конструктор пустого пакета. -
DhcpPacket
Конструктор пакета - запроса.- Parameters:
request
- содержимое запроса в виде набора байтов
-
-
Method Details
-
createResponse
Создание ответного dhcp-пакета на dhcp-запрос на основании данных запроса.- Returns:
- dhcp-ответ с установленным полем op=
OP_BOOT_RESPONSE
-
haveSubOptions
public boolean haveSubOptions()Возвращает наличие Options.82 в запросе.- Returns:
- true - в dhcp-запросе присутствует 82я опция.
-
clearSubOptions
public void clearSubOptions()Очистка подопций 82й опции. -
serialize
Сериализация dhcp-пакета в последовательность байт.- Parameters:
bb
- набор байтов, куда сериализуется пакет
-
isFromRelayAgent
public final boolean isFromRelayAgent()Проверка, пришел ли dhcp-запрос от dhcp-relay агента, ретранслировавшего dhcp-запрос от абонента. Анализируется заполненность поляgiaddr
- Returns:
- true - запрос пришел от dhcp-relay, false - не от dhcp-relay.
-
isClientAddressSet
public final boolean isClientAddressSet()Проверка на заполненность поляciaddr
- Returns:
-
compare
Сравнение опций в зависимости от их "веса"- Specified by:
compare
in interfaceComparator<DhcpOption>
- Parameters:
o1
-o2
-- Returns:
-
setOption
Установка значения опции в dhcp-пакет.- Parameters:
option
- устанавливаемая опция
-
setOption
public final void setOption(byte code, byte[] value) Установка значения dhcp-опции. Опция задается кодом- Parameters:
code
-value
-
-
setOption
-
getOption
-
setSubOption
-
setSubOption
public final void setSubOption(byte code, byte[] value) -
setSubOption
-
getSubOption
-
toString
-
getOption
Получение опции(атрибута) из пакета. Если такая опция не была установлена - метод вернет null.- Parameters:
option
- идентификатор опции, которая была установлена в обработчике протокола- Returns:
- значение опции.
-
getOption
Получение опции(атрибута) из пакета. Если такая опция не была установлена - метод вернет value.- Parameters:
option
- идентификатор опции, значение которой нужно получить.value
- - значение по умолчанию- Returns:
- значение опции
-
setOption
Установка опции в пакет.- Parameters:
option
- идентификатор устанавливаемой опцииvalue
- устанавливаемое значение.
-
isNil
public static final boolean isNil(byte[] b) Проверка на незаполненность dhcp-поля, представленного массивом байтов. Если хотя бы один байт массива не нулевой, то это значит, что поле имеет значение.- Parameters:
b
- поле в виде массива байтов- Returns:
- true - поле не имеет значение и заполнено нулями, false - в поле записано какое-то ненулевое значение.
-
isRenewRequest
Првоеряет, является ли данный dhcp-запрос renew-запросом. Запрос является RENEW, если пакет REQUEST, ciaddr!=0.0.0.0, а опции Server-Identifier и Requested-IP-Address отсутствуют.- Parameters:
request
- проверяемый dhcp-запрос- Returns:
- true - запрос является renew-запросом, false - не renew-запрос.
-