Class DhcpPacket

java.lang.Object
ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket
All Implemented Interfaces:
Comparator<DhcpOption>

public final class DhcpPacket extends Object implements Comparator<DhcpOption>
  • 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_DISCOVER
      Code for DHCPDISCOVER Message
      See Also:
    • DHCP_OFFER

      public static final int DHCP_OFFER
      Code for DHCPOFFER Message
      See Also:
    • DHCP_REQUEST

      public static final int DHCP_REQUEST
      Code for DHCPREQUEST Message
      See Also:
    • DHCP_DECLINE

      public static final int DHCP_DECLINE
      Code for DHCPDECLINE Message
      See Also:
    • DHCP_ACK

      public static final int DHCP_ACK
      Code for DHCPACK Message
      See Also:
    • DHCP_NAK

      public static final int DHCP_NAK
      Code for DHCPNAK Message
      See Also:
    • DHCP_RELEASE

      public static final int DHCP_RELEASE
      Code for DHCPRELEASE Message
      See Also:
    • DHCP_INFORM

      public static final int DHCP_INFORM
      Code for DHCPINFORM Message
      See Also:
    • OPTION_SUBNET_MASK

      public static final byte OPTION_SUBNET_MASK
      DHCP-опция 1. Маска подсети, из которой получен адрес. IP-адрес в десятичном формате с точками
      See Also:
    • OPTION_TIME_OFFSET

      public static final byte OPTION_TIME_OFFSET
      DHCP-опция 2. Задает разницу во времени (в секундах) в подсети клиента по сравнению с Универсальным скоординированным временем (UTC). 32-разрядное целое число
      See Also:
    • OPTION_ROUTER

      public static final byte OPTION_ROUTER
      DHCP-опция 3. Список IP-адресов шлюзов по умолчанию. Один или несколько IP-адресов в десятичном формате с точками
      See Also:
    • OPTION_TIME_SERVER

      public static final byte OPTION_TIME_SERVER
      DHCP-опция 4. Список IP-адресов серверов времени. Один или несколько IP-адресов в десятичном формате с точками
      See Also:
    • OPTION_NAME_SERVER

      public static final byte OPTION_NAME_SERVER
      DHCP-опция 5. Список IP-адресов серверов имен. Один или несколько IP-адресов в десятичном формате с точками
      See Also:
    • OPTION_DOMAIN_NAME_SERVER

      public static final byte OPTION_DOMAIN_NAME_SERVER
      DHCP-опция 6. Список IP-адресов серверов DNS. Один или несколько IP-адресов в десятичном формате с точками
      See Also:
    • OPTION_LOG_SERVER

      public static final byte OPTION_LOG_SERVER
      DHCP-опция 7. Список IP-адресов серверов протоколов. Один или несколько IP-адресов в десятичном формате с точками
      See Also:
    • OPTION_LPR_SERVER

      public static final byte OPTION_LPR_SERVER
      DHCP-опция 9. Список IP-адресов серверов LPR. Один или несколько IP-адресов в десятичном формате с точками
      See Also:
    • OPTION_HOST_NAME

      public static final byte OPTION_HOST_NAME
      DHCP-опция 12. Имя хоста клиента. Строка ASCII
      See Also:
    • OPTION_DOMAIN_NAME

      public static final byte OPTION_DOMAIN_NAME
      DHCP-опция 15. Имя домена DNS по умолчанию. Строка ASCII
      See Also:
    • OPTION_REQUESTED_IP_ADDRESS

      public static final byte OPTION_REQUESTED_IP_ADDRESS
      DHCP-опция 50. IP-адрес, запрашиваемый клиентом
      See Also:
    • OPTION_IP_ADDRESS_LEASE_TIME

      public static final byte OPTION_IP_ADDRESS_LEASE_TIME
      DHCP-опция 51. Время выделения для возвращаемого адреса. По умолчанию сервер DHCP использует ключевое слово leasetimedefault, однако непосредственное задание опции 51 переопределяет его. 32-разрядное целое число без знака
      See Also:
    • OPTION_SERVER_IDENTIFIER

      public static final byte OPTION_SERVER_IDENTIFIER
      DHCP-опция 54. Используются сервером DHCP или клиентом для указания адреса сервера или сервера, на который направляется сообщение.
      See Also:
    • OPTION_DHCP_MAX_MSG_SIZE

      public static final byte OPTION_DHCP_MAX_MSG_SIZE
      DHCP-опция 57. DHCP Maximum Message Size (длина 2)
      See Also:
    • OPTION_RENEWAL_TIME_VALUE

      public static final byte OPTION_RENEWAL_TIME_VALUE
      DHCP-опция 58. Интервал времени (в секундах), в течение которого клиент должен отправить запрос на обновление. 32-разрядное целое число без знака
      See Also:
    • OPTION_REBINDING_TIME_VALUE

      public static final byte OPTION_REBINDING_TIME_VALUE
      DHCP-опция 59. Интервал времени (в секундах), в течение которого клиент должен отправить запрос на повторное связывание. 32-разрядное целое число без знака
      See Also:
    • OPTION_PARAMETER_REQUEST_LIST

      public static final byte OPTION_PARAMETER_REQUEST_LIST
      DHCP-опция 55. Используется клиентом DHCP для указания требуемых параметров, которые бы он хотел получить от сервера. Сервер может не поддерживать все требуемые клиентом поля и будет возвращать только те, которые ему доступны. В опции фигурирует N байтов, каждый из которых является ссылкой на соответствующую DHCP-опцию. При формировании DHCP-ответа значение опции OPTION_PARAMETER_REQUEST_LIST из DHCP-запроса используется для упорядочивания опций при сериализации.
      See Also:
    • OPTION_VENDOR_CLASS_IDENTIDIER

      public static final byte OPTION_VENDOR_CLASS_IDENTIDIER
      Option 60 (Vendor class identifier) https://tools.ietf.org/html/rfc2132#section-9.13
      See Also:
    • OPTION_CLIENT_IDENTIDIER

      public static final byte OPTION_CLIENT_IDENTIDIER
      DHCP-опция 61. Используется для однозначной идентификации клиента DHCP
      See Also:
    • OPTION_AGENT_INFORMATION

      public static final byte OPTION_AGENT_INFORMATION
      DHCP-опция 82. Используется для того чтобы проинформировать DHCP-сервер о том, от какого DHCP-ретранслятора (DHCP-relay) и через какой его порт был получен запрос
      See Also:
    • OPTION_NAME

      public static String[] OPTION_NAME
    • op

      public byte op
      Op code. Тип сообщения. Может принимать значения: BOOTREQUEST (0x01, запрос от клиента к серверу) и BOOTREPLY (0x02, ответ от сервера к клиенту). Размер поля - 1 байт.
    • htype

      public byte htype
      HW address Type. Тип аппаратного адреса. Допустимые значения этого поля определены в RFC 1700 «Assigned Numbers». Например, для MAC-адреса Ethernet это поле принимает значение 0x01. Размер поля - 1 байт.
    • hlen

      public byte hlen
      Hardware address length. Длина аппаратного адреса в байтах. Для MAC-адреса Ethernet — 0x06. Размер поля - 1 байт
    • hops

      public byte hops
      Hw options. Количество промежуточных маршрутизаторов (так называемых агентов ретрансляции DHCP), через которые прошло сообщение. Клиент устанавливает это поле в 0x00. Размер поля - 1 байт
    • xid

      public int xid
      Transaction id. Уникальный идентификатор транзакции, генерируемый клиентом в начале процесса получения адреса. Размер поля - 4 байта
    • secs

      public short secs
      Elapsed time from trying to boot. Время в секундах с момента начала процесса получения адреса. Может не использоваться (в этом случае оно устанавливается в 0x0000). Размер поля - 2 байта
    • flags

      public short flags
      Flags. Поле для флагов — специальных параметров протокола DHCP. Размер поля - 2 байта.
    • ciaddr

      public byte[] ciaddr
      Client IP. IP-адрес клиента. Заполняется только в том случае, если клиент уже имеет собственный IP-адрес и способен отвечать на запросы ARP (это возможно, если клиент выполняет процедуру обновления адреса по истечении срока аренды). Размер поля - 4 байта.
    • yiaddr

      public byte[] yiaddr
      Your client IP. Новый IP-адрес клиента, предложенный сервером. Размер поля - 4 байта.
    • siaddr

      public byte[] siaddr
      Server IP. IP-адрес сервера. Возвращается в предложении DHCP (DHCP-OFFER). Размер поля - 4 байта
    • giaddr

      public byte[] giaddr
      Relay agent IP. IP-адрес агента ретрансляции, если таковой участвовал в процессе доставки сообщения DHCP до сервера. Размер поля - 4 байта.
    • chaddr

      public byte[] chaddr
      Client HW address. Аппаратный адрес (обычно MAC-адрес) клиента. Размер поля - 16 байт.
    • sname

      public byte[] sname
      Optional server host name. Необязательное имя сервера в виде нуль-терминированной строки. Размер поля - 64 байта
    • file

      public byte[] file
      Boot file name. Необязательное имя файла на сервере, используемое бездисковыми рабочими станциями при удалённой загрузке. Как и sname, представлено в виде нуль-терминированной строки. Размер поля - 128 байт.
    • messageType

      public byte messageType
      Тип DHCP-пакета. Размер поля - 1 байт. Возможные значения:
  • Constructor Details

    • DhcpPacket

      public DhcpPacket()
      Конструктор пустого пакета.
    • DhcpPacket

      public DhcpPacket(ByteBuffer request)
      Конструктор пакета - запроса.
      Parameters:
      request - содержимое запроса в виде набора байтов
  • Method Details

    • createResponse

      public final DhcpPacket 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

      public void serialize(ByteBuffer bb)
      Сериализация 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

      public final int compare(DhcpOption o1, DhcpOption o2)
      Сравнение опций в зависимости от их "веса"
      Specified by:
      compare in interface Comparator<DhcpOption>
      Parameters:
      o1 -
      o2 -
      Returns:
    • setOption

      public final void setOption(DhcpOption option)
      Установка значения опции в dhcp-пакет.
      Parameters:
      option - устанавливаемая опция
    • setOption

      public final void setOption(byte code, byte[] value)
      Установка значения dhcp-опции. Опция задается кодом
      Parameters:
      code -
      value -
    • setOption

      public final void setOption(byte code, String stringValue)
    • getOption

      public final DhcpOption getOption(byte code)
    • setSubOption

      public final void setSubOption(DhcpOption option)
    • setSubOption

      public final void setSubOption(byte code, byte[] value)
    • setSubOption

      public final void setSubOption(byte code, String stringValue)
    • getSubOption

      public final DhcpOption getSubOption(byte code)
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getOption

      public <O> O getOption(DhcpPacket.DhcpPacketOption<O> option)
      Получение опции(атрибута) из пакета. Если такая опция не была установлена - метод вернет null.
      Parameters:
      option - идентификатор опции, которая была установлена в обработчике протокола
      Returns:
      значение опции.
    • getOption

      public <O> O getOption(DhcpPacket.DhcpPacketOption<O> option, O value)
      Получение опции(атрибута) из пакета. Если такая опция не была установлена - метод вернет value.
      Parameters:
      option - идентификатор опции, значение которой нужно получить.
      value - - значение по умолчанию
      Returns:
      значение опции
    • setOption

      public <O> void setOption(DhcpPacket.DhcpPacketOption<O> option, O value)
      Установка опции в пакет.
      Parameters:
      option - идентификатор устанавливаемой опции
      value - устанавливаемое значение.
    • isNil

      public static final boolean isNil(byte[] b)
      Проверка на незаполненность dhcp-поля, представленного массивом байтов. Если хотя бы один байт массива не нулевой, то это значит, что поле имеет значение.
      Parameters:
      b - поле в виде массива байтов
      Returns:
      true - поле не имеет значение и заполнено нулями, false - в поле записано какое-то ненулевое значение.
    • isRenewRequest

      public static boolean isRenewRequest(DhcpPacket request)
      Првоеряет, является ли данный dhcp-запрос renew-запросом. Запрос является RENEW, если пакет REQUEST, ciaddr!=0.0.0.0, а опции Server-Identifier и Requested-IP-Address отсутствуют.
      Parameters:
      request - проверяемый dhcp-запрос
      Returns:
      true - запрос является renew-запросом, false - не renew-запрос.