DHCP+Mysql сСрвСр Π½Π° Python

DHCP+Mysql сСрвСр Π½Π° Python

ЦСлью Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΎ:

  • Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° DHCP ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² сСти IPv4
  • Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Python (Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ с нуля πŸ˜‰ )
  • Π·Π°ΠΌΠ΅Π½Π° сСрвСру DB2DHCP (ΠΌΠΎΠΉ Ρ„ΠΎΡ€ΠΊ), ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» здСсь, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡƒΡŽ ОБ всё Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅. Π”Π° ΠΈ Π½Π΅ нравится, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅Ρ‚ возмоТности Β«ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ прям щас»
  • ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ работоспособного сСрвСра DHCP с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ IP адрСса Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° ΠΏΠΎ mac Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ связкС mac свича+ΠΏΠΎΡ€Ρ‚ (Option 82)
  • написаниС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ вСлосипСда (О! это ΠΌΠΎΡ‘ любимоС занятиС)
  • ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ люлСй ΠΏΡ€ΠΎ свою ΠΊΠΎΡΠΎΡ€ΡƒΠΊΠΎΡΡ‚ΡŒ Π½Π° Π₯Π°Π±Ρ€Π°Ρ…Π°Π±Ρ€ (Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ½Π²Π°ΠΉΡ‚Π°) πŸ˜‰

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:  Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ πŸ˜‰ ΠžΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π½ΠΎ Π½Π° ОБ FreeBSD ΠΈ Ubuntu. ВСорСтичСски ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ любой ОБ, Ρ‚.ΠΊ. спСцифичСских привязок Π² ΠΊΠΎΠ΄Π΅ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π½Π΅Ρ‚.
ΠžΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎ! Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ.

Бсылка Π½Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ для Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ Β«ΠΏΠΎΡ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ ТивьСм».

ΠŸΡ€ΠΎΡ†Π΅ΡΡ установки, настройки ΠΈ использования Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° «изучСния матчасти» ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅, Π°  Π΄Π°Π»Π΅Π΅ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ DHCP. Для сСбя. И для истории πŸ˜‰

НСмноТко Ρ‚Π΅ΠΎΡ€ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ DHCP

Π­Ρ‚ΠΎ сСтСвой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт устройству ΡƒΠ·Π½Π°Ρ‚ΡŒ свой IP адрСс (Π½Ρƒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ шлюза, DNS ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ), Ρƒ сСрвСра DHCP. ОбмСн ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UDP. ΠžΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ устройства ΠΏΡ€ΠΈ запросС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² сСти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

  1. Устройство (ΠΊΠ»ΠΈΠ΅Π½Ρ‚) рассылаСт ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ UDP запрос (DHCPDISCOVER) ΠΏΠΎ всСй сСти с запросом Β«Π½Ρƒ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ IP адрСс». ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ (Π½ΠΎ Π½Π΅ всСгда) запрос происходит с 68 ΠΏΠΎΡ€Ρ‚Π° (источник), Π° Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” 67 ΠΏΠΎΡ€Ρ‚ (Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). НСкоторыС устройства ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ с 67 ΠΏΠΎΡ€Ρ‚Π°. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCPDISCOVER Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ MAC адрСс устройства ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.
  2. ВсС сСрвСра DHCP, находящиСся Π² сСти (Π° ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько), Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ для устройства ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ²ΡˆΠ΅Π³ΠΎ DHCPDISCOVER, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ DHCPOFFER с сСтСвыми настройками, ΠΈ Ρ‚Π°ΠΊ-ΠΆΠ΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ отсылаСт Π΅Π³ΠΎ ΠΏΠΎ сСти. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΊΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ этот ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ MAC адрСсу ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, прСдоставлСнного Ρ€Π°Π½Π΅Π΅ Π² запросС DHCPDISCOVER.
  3. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с прСдлоТСниями сСтСвых настроСк, Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ (ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Ρ‚.Ρ‡. ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ доставки ΠΏΠ°ΠΊΠ΅Ρ‚Π°, количСствС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ²), ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Ρƒ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ сСрвСра DHCP Β«ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ запрос» DHCPREQUEST с сСтСвыми настройками. Π’ этом случаС ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ сСрвСру DHCP.
  4. Π‘Π΅Ρ€Π²Π΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ DHCPREQUEST, отправляСт ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° DHCPACK, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· пСрСчисляСт сСтСвыС настройки ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

DHCP+Mysql сСрвСр Π½Π° Python

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ DHCPINFORM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ходят ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈ Ρ†Π΅Π»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ DHCP сСрвСр ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Β«ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΆΠΈΠ²Β» ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Ρ‹Π΄Π°Π½Π½Ρ‹ΠΌΠΈ сСтСвыми настройками. Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ сСрвСра эти ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Π’ Ρ†Π΅Π»ΠΎΠΌ Ρ„Ρ€Π΅ΠΉΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ethernet выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

DHCP+Mysql сСрвСр Π½Π° Python

Π’ нашСм случаСм ΠΌΡ‹ рассмотрим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ нСпосрСдствСнно содСрТимого ΠΏΠ°ΠΊΠ΅Ρ‚Π° UDP, Π±Π΅Π· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ OSI, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ структуру DHCP:

DHCPDISCOVER

Π˜Ρ‚Π°ΠΊ, процСсс получСния IP адрСса для устройства начинаСтся с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ DHCP рассылаСт ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос с ΠΏΠΎΡ€Ρ‚Π° 68 Π½Π° 255.255.255.255:67. Π’ этом ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ свой MAC адрСс, Π° Ρ‚Π°ΠΊ-ΠΆΠ΅ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ DHCP сСрвСра. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° описана Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½ΠΈΠΆΠ΅.

Π’Π°Π±Π»ΠΈΡ†Π° структуры ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCPDISCOVER

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅
НазваниС значСния
ΠŸΡ€ΠΈΠΌΠ΅Ρ€
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅
Π‘Π°ΠΉΡ‚
ПояснСниС

1
Boot Request
1
Hex
1
Π’ΠΈΠΏ сообщСния. 1 β€” запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру, 2 β€” ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ сСрвСра ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ

2
Hardware type
1
Hex
1
Π’ΠΈΠΏ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ адрСса, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ 1 β€” MAC

3
Hardware adrees length
6
Hex
1
Π”Π»ΠΈΠ½Π° MAC адрСса устройства

4
Hops
1
Hex
1
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ²

5
Transaction ID
23:cf:de:1d
Hex
4
Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ запроса

7
Second elapsed
0
Hex
4
ВрСмя Π² сСкундах с Π½Π°Ρ‡Π°Π»Π° процСсса получСния адрСса

9
Bootp flags
0
Hex
2
НСкиС Ρ„Π»Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π² качСствС указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°

11
Client IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Ссли Π΅ΡΡ‚ΡŒ)

15
Your client IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ сСрвСром (Ссли Π΅ΡΡ‚ΡŒ)

19
Next server IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс сСрвСра (Ссли извСстСн)

23
Relay agent IP address
172.16.114.41
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс Π°Π³Π΅Π½Ρ‚Π° рСтрансляции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ свича)

27
Client MAC address
14:d6:4d:a7:c9:55
Hex
6
MAC адрСс отправитСля ΠΏΠ°ΠΊΠ΅Ρ‚Π° (ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°)

31
Client hardware address padding
 
Hex
10
Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ мСсто. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π±ΠΈΡ‚ΠΎ нулями

41
Server host name
 
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
64
Имя сСрвСра DHCP. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ пСрСдаСтся

105
Boot file name
 
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
128
Имя Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСрС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ бСздисковыми станциями ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅

235
Magic cookie
63:82:53:63
Hex
4
Β«ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅Β» число, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² Ρ‚.Ρ‡. ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΏΠ°ΠΊΠ΅Ρ‚ β€” ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ DHCP

ΠžΠΏΡ†ΠΈΠΈ DHCP. ΠœΠΎΠ³ΡƒΡ‚ ΠΈΠ΄Ρ‚ΠΈ Π² любом порядкС

236
НомСр ΠΎΠΏΡ†ΠΈΠΈ
53
Dec
1
ΠžΠΏΡ†ΠΈΡ 53, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ Ρ‚ΠΈΠΏ ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCP

1 β€” DHCPDISCOVER
3 β€” DHCPREQUEST
2 β€” DHCPOFFER
5 β€” DHCPACK
8 β€” DHCPINFORM

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
1
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
1
Dec
1

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
50
Dec
1
Какой IP адрСс Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
172.16.134.61
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
55
 
1
Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ сСтСвыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Бостав ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ

01 β€” Маска сСти
03 β€” Шлюз
06 β€” DNS
oc β€” Имя хоста
0f β€” имя Π΄ΠΎΠΌΠ΅Π½Π° сСти
1c β€” адрСс ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ запроса (бродкаста)
42 β€” имя сСрвСра TFTP
79 β€” Classless Static Route

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
8
 
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
01:03:06:0c:0f:1c:42:79
 
8

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
82
Dec
 
ΠžΠΏΡ†ΠΈΡ 82, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ пСрСдаСтся MAC адрСс устройства β€” рСтранслятора ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния.

Π§Π°Ρ‰Π΅ всСго β€” ΠΏΠΎΡ€Ρ‚ свича Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ DHCPΠ’ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ Β«Π²Π»ΠΎΠΆΠ΅Π½Ρ‹Β» Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ β€” Π½ΠΎΠΌΠ΅Ρ€ Β«ΠΏΠΎΠ΄ΠΎΠΏΡ†ΠΈΠΈΒ», Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΅Ρ‘ Π΄Π»ΠΈΠ½Π°, Π΄Π°Π»Π΅Π΅ Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π² ΠΎΠΏΡ†ΠΈΠΈ 82, Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ ΠΏΠΎΠ΄ΠΎΠΏΡ†ΠΈΠΈ:
Agent Circuit ID = 00:04:00:01:00:04, Π³Π΄Π΅ послСдниС Π΄Π²Π° Π±Π°ΠΉΡ‚Π° β€” ΠΏΠΎΡ€Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° DHCP с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡˆΠ΅Π» запрос

Agent Remote ID = 00:06:c8:be:19:93:11:48 β€” MAC адрСс устройства рСтранслятора DHCP

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
18
Dec
 

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
Hex
 

 
ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
255
Dec
1
255 символизируСт ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°

DHCPOFFER

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСрвСр ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ DHCPDISCOVER ΠΈ Ссли ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ· Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ, Ρ‚ΠΎ ΠΎΠ½ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ для Π½Π΅Π³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ β€” DHCPDISCOVER. ΠžΡ‚Π²Π΅Ρ‚ высылаСтся Π½Π° ΠΏΠΎΡ€Ρ‚ Β«ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΡˆΠ΅Π»Β», бродкастом, Ρ‚.ΠΊ. Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΅Ρ‰Π΅ Π½Π΅Ρ‚ IP адрСса, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ отослан ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ распознаСт Ρ‡Ρ‚ΠΎ это ΠΏΠ°ΠΊΠ΅Ρ‚ для Π½Π΅Π³ΠΎ ΠΏΠΎ MAC своСму адрСсу Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π° Ρ‚Π°ΠΊ-ΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Π’Π°Π±Π»ΠΈΡ†Π° структуры ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCPOFFER

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅
НазваниС значСния (общСпринятоС)
ΠŸΡ€ΠΈΠΌΠ΅Ρ€
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅
Π‘Π°ΠΉΡ‚
ПояснСниС

1
Boot Request
1
Hex
1
Π’ΠΈΠΏ сообщСния. 1 β€” запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру, 2 β€” ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ сСрвСра ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ

2
Hardware type
1
Hex
1
Π’ΠΈΠΏ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ адрСса, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ 1 β€” MAC

3
Hardware adrees length
6
Hex
1
Π”Π»ΠΈΠ½Π° MAC адрСса устройства

4
Hops
1
Hex
1
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ²

5
Transaction ID
23:cf:de:1d
Hex
4
Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ запроса

7
Second elapsed
0
Hex
4
ВрСмя Π² сСкундах с Π½Π°Ρ‡Π°Π»Π° процСсса получСния адрСса

9
Bootp flags
0
Hex
2
НСкиС Ρ„Π»Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π² качСствС указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, 0 β€” ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ запроса Unicast

11
Client IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Ссли Π΅ΡΡ‚ΡŒ)

15
Your client IP address
172.16.134.61
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ сСрвСром (Ссли Π΅ΡΡ‚ΡŒ)

19
Next server IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс сСрвСра (Ссли извСстСн)

23
Relay agent IP address
172.16.114.41
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс Π°Π³Π΅Π½Ρ‚Π° рСтрансляции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ свича)

27
Client MAC address
14:d6:4d:a7:c9:55
Hex
6
MAC адрСс отправитСля ΠΏΠ°ΠΊΠ΅Ρ‚Π° (ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°)

31
Client hardware address padding
 
Hex
10
Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ мСсто. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π±ΠΈΡ‚ΠΎ нулями

41
Server host name
 
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
64
Имя сСрвСра DHCP. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ пСрСдаСтся

105
Boot file name
 
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
128
Имя Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСрС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ бСздисковыми станциями ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅

235
Magic cookie
63:82:53:63
Hex
4
Β«ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅Β» число, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² Ρ‚.Ρ‡. ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΏΠ°ΠΊΠ΅Ρ‚ β€” ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ DHCP

ΠžΠΏΡ†ΠΈΠΈ DHCP. ΠœΠΎΠ³ΡƒΡ‚ ΠΈΠ΄Ρ‚ΠΈ Π² любом порядкС

236
НомСр ΠΎΠΏΡ†ΠΈΠΈ
53
Dec
1
ΠžΠΏΡ†ΠΈΡ 53, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ Ρ‚ΠΈΠΏ ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCP 2 β€” DHCPOFFER

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
1
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
2
Dec
1

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
1
Dec
1
ΠžΠΏΡ†ΠΈΡ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π°Ρ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ маску сСти

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
255.255.224.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
3
Dec
1
ΠžΠΏΡ†ΠΈΡ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π°Ρ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ шлюз ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
172.16.12.1
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
6
Dec
1
ΠžΠΏΡ†ΠΈΡ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π°Ρ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ DNS

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
8.8.8.8
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
51
Dec
1
ВрСмя ΠΆΠΈΠ·Π½ΠΈ Π²Ρ‹Π΄Π°Π½Π½Ρ‹Ρ… сСтСвых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² сСкундах, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡ… снова

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
86400
Dec
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
82
Dec
1
ΠžΠΏΡ†ΠΈΡ 82, повторяСт Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π² DHCPDISCOVER

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
18
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18

 
ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
255
Dec
1
255 символизируСт ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°

DHCPREQUEST

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ DHCPOFFER, ΠΎΠ½ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ с запросом сСтСвых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡƒΠΆΠ΅ Π½Π΅ ΠΊΠΎ всСм сСрвСрам DHCP Π² сСти, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ DHCPOFFER ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, Π΅ΠΌΡƒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Β«ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒΒ». ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Β«ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒΒ» ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΈ зависят ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ запроса указываСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ MAC адрСса сСрвСра DHCP. Π’Π°ΠΊ-ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ DHCPREQUEST ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ выслан ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ Π±Π΅Π· формирования Ρ€Π°Π½Π΅Π΅ DHCPDISCOVER, Ссли IP адрСс Ρƒ сСрвСра ΡƒΠΆΠ΅ Ρ€Π°Π½Π΅Π΅ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½.

Π’Π°Π±Π»ΠΈΡ†Π° структуры ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCPREQUEST

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅
НазваниС значСния (общСпринятоС)
ΠŸΡ€ΠΈΠΌΠ΅Ρ€
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅
Π‘Π°ΠΉΡ‚
ПояснСниС

1
Boot Request
1
Hex
1
Π’ΠΈΠΏ сообщСния. 1 β€” запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру, 2 β€” ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ сСрвСра ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ

2
Hardware type
1
Hex
1
Π’ΠΈΠΏ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ адрСса, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ 1 β€” MAC

3
Hardware adrees length
6
Hex
1
Π”Π»ΠΈΠ½Π° MAC адрСса устройства

4
Hops
1
Hex
1
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ²

5
Transaction ID
23:cf:de:1d
Hex
4
Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ запроса

7
Second elapsed
0
Hex
4
ВрСмя Π² сСкундах с Π½Π°Ρ‡Π°Π»Π° процСсса получСния адрСса

9
Bootp flags
8000
Hex
2
НСкиС Ρ„Π»Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π² качСствС указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС выставлСно «бродкаст»

11
Client IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Ссли Π΅ΡΡ‚ΡŒ)

15
Your client IP address
172.16.134.61
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ сСрвСром (Ссли Π΅ΡΡ‚ΡŒ)

19
Next server IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс сСрвСра (Ссли извСстСн)

23
Relay agent IP address
172.16.114.41
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс Π°Π³Π΅Π½Ρ‚Π° рСтрансляции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ свича)

27
Client MAC address
14:d6:4d:a7:c9:55
Hex
6
MAC адрСс отправитСля ΠΏΠ°ΠΊΠ΅Ρ‚Π° (ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°)

31
Client hardware address padding
 
Hex
10
Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ мСсто. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π±ΠΈΡ‚ΠΎ нулями

41
Server host name
 
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
64
Имя сСрвСра DHCP. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ пСрСдаСтся

105
Boot file name
 
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
128
Имя Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСрС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ бСздисковыми станциями ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅

235
Magic cookie
63:82:53:63
Hex
4
Β«ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅Β» число, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² Ρ‚.Ρ‡. ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΏΠ°ΠΊΠ΅Ρ‚ β€” ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ DHCP

ΠžΠΏΡ†ΠΈΠΈ DHCP. ΠœΠΎΠ³ΡƒΡ‚ ΠΈΠ΄Ρ‚ΠΈ Π² любом порядкС

236
НомСр ΠΎΠΏΡ†ΠΈΠΈ
53
Dec
3
ΠžΠΏΡ†ΠΈΡ 53, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ Ρ‚ΠΈΠΏ ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCP 3 β€” DHCPREQUEST

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
1
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
3
Dec
1

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
61
Dec
1
Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°: 01 (для Ehernet) + MAC адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
7
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
01:2c:ab:25:ff:72:a6
Hex
7

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
60
Dec
 
Β«Vendor class identifierΒ». Π’ ΠΌΠΎΠ΅ΠΌ случаС сообаСт Π²Π΅Ρ€ΡΠΈΡŽ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ устройства, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Windows Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сообщаСт MSFT 5.0

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
11
Dec
 

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
udhcp 0.9.8
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
 

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
55
 
1
Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ сСтСвыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Бостав ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ

01 β€” Маска сСти
03 β€” Шлюз
06 β€” DNS
oc β€” Имя хоста
0f β€” имя Π΄ΠΎΠΌΠ΅Π½Π° сСти
1c β€” адрСс ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ запроса (бродкаста)
42 β€” имя сСрвСра TFTP
79 β€” Classless Static Route

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
8
 
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
01:03:06:0c:0f:1c:42:79
 
8

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
82
Dec
1
ΠžΠΏΡ†ΠΈΡ 82, повторяСт Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π² DHCPDISCOVER

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
18
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18

 
ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
255
Dec
1
255 символизируСт ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°

DHCPACK

Π’ качСствС подтвСрТдСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Β«Π΄Π° Ρ‚ΠΎΡ‡Π½ΠΎ, это Ρ‚Π²ΠΎΠΉ IP адрСс, ΠΈ большС я Π΅Π³ΠΎ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π²Ρ‹Π΄Π°ΠΌΒ» ΠΎΡ‚ DHCP сСрвСра, слуТит ΠΏΠ°ΠΊΠ΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ DHCPACK ΠΎΡ‚ сСрвСра ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Он Ρ‚Π°ΠΊ-ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ высылаСтся ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π₯отя, Π² Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ DHCP сСрвСра Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° Python, я Π½Π° всякий случай Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽ любой ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ IP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ссли ΠΎΠ½ ΡƒΠΆΠ΅ извСстСн. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ DHCP сСрвСр ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚, дошСл Π»ΠΈ Π΄ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠ°ΠΊΠ΅Ρ‚ DHCPACK. Если ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ DHCPACK, Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя ΠΎΠ½ просто повторяСт DHCPREQUEST

Π’Π°Π±Π»ΠΈΡ†Π° структуры ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCPACK

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅
НазваниС значСния (общСпринятоС)
ΠŸΡ€ΠΈΠΌΠ΅Ρ€
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅
Π‘Π°ΠΉΡ‚
ПояснСниС

1
Boot Request
2
Hex
1
Π’ΠΈΠΏ сообщСния. 1 β€” запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру, 2 β€” ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ сСрвСра ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ

2
Hardware type
1
Hex
1
Π’ΠΈΠΏ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ адрСса, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ 1 β€” MAC

3
Hardware adrees length
6
Hex
1
Π”Π»ΠΈΠ½Π° MAC адрСса устройства

4
Hops
1
Hex
1
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ²

5
Transaction ID
23:cf:de:1d
Hex
4
Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ запроса

7
Second elapsed
0
Hex
4
ВрСмя Π² сСкундах с Π½Π°Ρ‡Π°Π»Π° процСсса получСния адрСса

9
Bootp flags
8000
Hex
2
НСкиС Ρ„Π»Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π² качСствС указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС выставлСно «бродкаст»

11
Client IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Ссли Π΅ΡΡ‚ΡŒ)

15
Your client IP address
172.16.134.61
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ сСрвСром (Ссли Π΅ΡΡ‚ΡŒ)

19
Next server IP address
0.0.0.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс сСрвСра (Ссли извСстСн)

23
Relay agent IP address
172.16.114.41
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4
IP адрСс Π°Π³Π΅Π½Ρ‚Π° рСтрансляции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ свича)

27
Client MAC address
14:d6:4d:a7:c9:55
Hex
6
MAC адрСс отправитСля ΠΏΠ°ΠΊΠ΅Ρ‚Π° (ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°)

31
Client hardware address padding
 
Hex
10
Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ мСсто. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π±ΠΈΡ‚ΠΎ нулями

41
Server host name
 
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
64
Имя сСрвСра DHCP. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ пСрСдаСтся

105
Boot file name
 
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
128
Имя Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвСрС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ бСздисковыми станциями ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅

235
Magic cookie
63:82:53:63
Hex
4
Β«ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅Β» число, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² Ρ‚.Ρ‡. ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΏΠ°ΠΊΠ΅Ρ‚ β€” ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ DHCP

ΠžΠΏΡ†ΠΈΠΈ DHCP. ΠœΠΎΠ³ΡƒΡ‚ ΠΈΠ΄Ρ‚ΠΈ Π² любом порядкС

236
НомСр ΠΎΠΏΡ†ΠΈΠΈ
53
Dec
3
ΠžΠΏΡ†ΠΈΡ 53, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ Ρ‚ΠΈΠΏ ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCP 5 β€” DHCPACK

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
1
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
5
Dec
1

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
1
Dec
1
ΠžΠΏΡ†ΠΈΡ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π°Ρ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ маску сСти

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
255.255.224.0
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
3
Dec
1
ΠžΠΏΡ†ΠΈΡ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π°Ρ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ шлюз ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
172.16.12.1
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
6
Dec
1
ΠžΠΏΡ†ΠΈΡ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π°Ρ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ DNS

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
8.8.8.8
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
51
Dec
1
ВрСмя ΠΆΠΈΠ·Π½ΠΈ Π²Ρ‹Π΄Π°Π½Π½Ρ‹Ρ… сСтСвых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² сСкундах, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡ… снова

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
4
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
86400
Dec
4

 
НомСр ΠΎΠΏΡ†ΠΈΠΈ
82
Dec
1
ΠžΠΏΡ†ΠΈΡ 82, повторяСт Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π² DHCPDISCOVER

 
Π”Π»ΠΈΠ½Π° ΠΎΠΏΡ†ΠΈΠΈ
18
Dec
1

 
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18

 
ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
255
Dec
1
255 символизируСт ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°

Установка

Установка фактичСски Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² установкС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ python Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ Ρ‡Ρ‚ΠΎ MySQL ΡƒΠΆΠ΅ установлСна ΠΈ настроСна.

FreeBSD

pkg install python3
python3 -m ensurepip
pip3 install mysql-connector

Ubuntu

sudo apt-get install python3
sudo apt-get install pip3
sudo pip3 install mysql-connector

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π‘Π” MySQL, Π·Π°Π»ΠΈΠ²Π°Π΅ΠΌ Π² Π½Π΅Ρ‘ Π΄Π°ΠΌΠΏ pydhcp.sql, настраиваСм Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

ВсС настройки сСрвСра Π»Π΅ΠΆΠ°Ρ‚ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° xml. Π­Ρ‚Π°Π»ΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:

<?xml version="1.0" ?>
<config>
    <dhcpserver>
	<host>0.0.0.0</host>
        <broadcast>255.255.255.255</broadcast>
        <DHCPServer>192.168.0.71</DHCPServer>
	<LeaseTime>8600</LeaseTime>
	<ThreadLimit>1</ThreadLimit>
        <defaultMask>255.255.255.0</defaultMask>
        <defaultRouter>192.168.0.1</defaultRouter>
        <defaultDNS>8.8.8.8</defaultDNS>
    </dhcpserver>
    <mysql>
        <host>localhost</host>
	<username>test</username>
	<password>test</password>
	<basename>pydhcp</basename>
    </mysql>
    <options>
       <option>option_82_hex:sw_port1:20:22</option>       
       <option>option_82_hex:sw_port2:16:18</option>       
       <option>option_82_hex:sw_mac:26:40</option>
    </options>    
    <query>
        <offer_count>3</offer_count>
	<offer_1>select ip,mask,router,dns from users where upper(mac)=upper('{option_82_AgentRemoteId_hex}') and upper(port)=upper('{option_82_AgentCircuitId_port_hex}')</offer_1>
        <offer_2>select ip,mask,router,dns from users where upper(mac)=upper('{sw_mac}') and upper(port)=upper('{sw_port2}')</offer_2>
        <offer_3>select ip,mask,router,dns from users where upper(mac)=upper('{ClientMacAddress}')</offer_3>
	<history_sql>insert into history (id,dt,mac,ip,comment) values (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')</history_sql>
    </query>
</config>

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎ Ρ‚Π΅Π³Π°ΠΌ:

БСкция dhcpserver описываСт основныС настройки для запуска сСрвСра, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

  • host β€” ΠΊΠ°ΠΊΠΎΠΉ ip адрСс ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ сСрвСр Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 67
  • broadcast β€” ΠΊΠ°ΠΊΠΎΠΉ ip являСтся бродкастом для DHCPOFFER ΠΈ DHCPACK
  • DHCPServer β€” ΠΊΠ°ΠΊΠΎΠΉ ip Ρƒ DHCP сСрвСра
  • LeaseTime врСмя Π°Ρ€Π΅Π½Π΄Ρ‹ Π²Ρ‹Π΄Π°Π½Π½ΠΎΠ³ΠΎ ip адрСса
  • ThreadLimit β€” сколько ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² UDP Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 67. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° высоконагруТСнных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… πŸ˜‰
  • defaultMask,defaultRouter,defaultDNS β€” Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ прСдлагаСтся Π°Π±ΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли IP Π² Π±Π°Π·Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Π½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для Π½Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹

БСкция mysql:

host,username,password,basename  β€” всё Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ само Π·Π° сСбя. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Π°Ρ структура Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π»ΠΎΠΆΠ΅Π½Π° Π½Π° GitHub

БСкция query: здСсь ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ запросы для получСния OFFER/ACK:

  • offer_count β€” количСство строк с запросами ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²ΠΈΠ΄Π° ip,mask,router,dns
  • offer_n β€” строка запроса. Если Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ β€” пусто, Ρ‚ΠΎ выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос offer
  • history_sql β€” запрос ΠΏΠΈΡˆΡƒΡˆΠΈΠΉ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Β«ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈΒ» ΠΏΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Ρƒ

Π’ запросах ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· сСкции options ΠΈΠ»ΠΈ ΠΎΠΏΡ†ΠΈΠΈ ΠΈΠ· ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° DHCP.

БСкция options. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ интСрСснСС.  Π’ΡƒΡ‚ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² дальнСйшСм Π² сСкции query.

НапримСр:

option_82_hex:sw_port1:20:22

, эта строчка-ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Π·ΡΡ‚ΡŒ всю строку ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΡƒΡŽ Π² DHCP запросС ΠΎΠΏΡ†ΠΈΠΈ 82, Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ hex, Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ с 20 ΠΏΠΎ 22 Π±Π°ΠΉΡ‚ Ρ„ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Ρ‘ Π² Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sw_port1  (ΠΏΠΎΡ€Ρ‚ свича ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΡˆΠ΅Π» запрос)

option_82_hex:sw_mac:26:40

, опСрСдСляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sw_mac, взяв hex ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° 26:40

Π£Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² запросах, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ запуска сСрвСра с ΠΊΠ»ΡŽΡ‡Π΅ΠΌ -d. Π£Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π»ΠΎΠ³:

--ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΏΠ°ΠΊΠ΅Ρ‚  DHCPINFORM  Π½Π° 67 ΠΏΠΎΡ€Ρ‚,ΠΎΡ‚  0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68)
{'ClientMacAddress': '0025224ad764',
 'ClientMacAddressByte': b'x00%"Jxd7d',
 'HType': 'Ethernet',
 'HostName': b'x91xa5xe0xa3xa5xa9-x8fx8a',
 'ReqListDNS': True,
 'ReqListDomainName': True,
 'ReqListPerfowmRouterDiscover': True,
 'ReqListRouter': True,
 'ReqListStaticRoute': True,
 'ReqListSubnetMask': True,
 'ReqListVendorSpecInfo': 43,
 'RequestedIpAddress': '0.0.0.0',
 'Vendor': b'MSFT 5.0',
 'chaddr': '0025224ad764',
 'ciaddr': '172.30.128.13',
 'flags': b'x00x00',
 'giaddr': '172.30.114.25',
 'gpoz': 308,
 'hlen': 6,
 'hops': 1,
 'htype': 'MAC',
 'magic_cookie': b'cx82Sc',
 'op': 'DHCPINFORM',
 'option12': 12,
 'option53': 53,
 'option55': 55,
 'option60': 60,
 'option61': 61,
 'option82': 82,
 'option_82_byte': b'x12x01x06x00x04x00x01x00x06x02x08x00'
                   b'x06x00x1eXx9exb2xad',
 'option_82_hex': '12010600040001000602080006001e589eb2ad',
 'option_82_len': 18,
 'option_82_str': "b'x12x01x06x00x04x00x01x00x06x02x08x00x06x00x1eXx9exb2xad'",
 'result': False,
 'secs': 768,
 'siaddr': '0.0.0.0',
 'sw_mac': '001e589eb2ad',
 'sw_port1': '06',
 'xidbyte': b'<x89}x8c',
 'xidhex': '3c897d8c',
 'yiaddr': '0.0.0.0'}

БоотвСтствСнно ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² {} ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ использована Π² SQL запросС.

Π—Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΠΈΠΌ для истории, Ρ‡Ρ‚ΠΎ IP адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»:

DHCP+Mysql сСрвСр Π½Π° Python

DHCP+Mysql сСрвСр Π½Π° Python

Запуск сСрвСра

./pydhcpdb.py -d -c config.xml

β€” d Ρ€Π΅ΠΆΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° Π² консоль DEBUG
β€” c <имя_Ρ„Π°ΠΉΠ»Π°> ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π Π°Π·Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ²

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвСра Π½Π° Python. Π­Ρ‚ΠΎ боль. Python изучался Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ». МногиС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ сдСланы Π² стилС: Β«ΡƒΡ…Ρ‚Ρ‹, ΠΊΠ°ΠΊ-Ρ‚ΠΎ сдСлал Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Β». БовсСм Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹, ΠΈ оставлСны Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² основном  ΠΈΠ·-Π·Π° ΠΌΠ°Π»ΠΎΠ³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° python. ΠžΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡΡŒ Π½Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсных ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвСра Π² Β«ΠΊΠΎΠ΄Π΅Β».

ΠŸΠ°Ρ€ΡΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ XML

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Python xml.dom. Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΈ просто, Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² сСти с использованиСм Π΄Π°Π½Π½ΠΎΠ³ΠΎ модуля.

    tree = minidom.parse(gconfig["config_file"])
    mconfig=tree.getElementsByTagName("mysql")
    for elem in mconfig:        
        gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firstChild.data      
        gconfig["mysql_username"]=elem.getElementsByTagName("username")[0].firstChild.data      
        gconfig["mysql_password"]=elem.getElementsByTagName("password")[0].firstChild.data      
        gconfig["mysql_basename"]=elem.getElementsByTagName("basename")[0].firstChild.data      
    dconfig=tree.getElementsByTagName("dhcpserver")
    for elem in dconfig:        
        gconfig["broadcast"]=elem.getElementsByTagName("broadcast")[0].firstChild.data      
        gconfig["dhcp_host"]=elem.getElementsByTagName("host")[0].firstChild.data      
        gconfig["dhcp_LeaseTime"]=elem.getElementsByTagName("LeaseTime")[0].firstChild.data      
        gconfig["dhcp_ThreadLimit"]=int(elem.getElementsByTagName("ThreadLimit")[0].firstChild.data)              
        gconfig["dhcp_Server"]=elem.getElementsByTagName("DHCPServer")[0].firstChild.data              
        gconfig["dhcp_defaultMask"]=elem.getElementsByTagName("defaultMask")[0].firstChild.data              
        gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data              
        gconfig["dhcp_defaultDNS"]=elem.getElementsByTagName("defaultDNS")[0].firstChild.data              
    qconfig=tree.getElementsByTagName("query")
    for elem in qconfig:  
        gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.data                          
        for num in range(int(gconfig["offer_count"])):
            gconfig["offer_"+str(num+1)]=elem.getElementsByTagName("offer_"+str(num+1))[0].firstChild.data      
        gconfig["history_sql"]=elem.getElementsByTagName("history_sql")[0].firstChild.data                          
    options=tree.getElementsByTagName("options")       
    for elem in options:          
        node=elem.getElementsByTagName("option")
        for options in node:
            optionsMod.append(options.firstChild.data)

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ

Как Π½ΠΈ странно, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Python Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΎΡ‡Π΅Π½ΡŒ понятно ΠΈ просто.

def PacketWork(data,addr): 
...
# рСализация Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° Π½Π΅Π³ΠΎ
...


while True:
    data, addr = udp_socket.recvfrom(1024) # ΠΆΠ΄Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ UDP
    thread = threading.Thread(target=PacketWork, args=(data,addr,)).start()	# ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡˆΠ΅Π» - запускаСм Π² Ρ„ΠΎΠ½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ€Π°Π½Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ PacketWork с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ
    while threading.active_count() >gconfig["dhcp_ThreadLimit"]:
       time.sleep(1) # Ссли число ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² большС Ρ‡Π΅ΠΌ Π² настройках, ΠΆΠ΄Π΅ΠΌ ΠΏΠΎΠΊΠ° ΠΈΡ… станСт мСньшС

ΠŸΡ€ΠΈΠ΅ΠΌ/ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCP

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ UDP ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ, Π½ΡƒΠΆΠ½ΠΎ Β«ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒΒ» сокСт:

udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP)
udp_socket.bind((gconfig["dhcp_host"],67))

, Π³Π΄Π΅ Ρ„Π»Π°Π³ΠΈ:

  • AF_INET β€” ΠΎΠ·Π½Π°Ρ‡Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ адрСса Π±ΡƒΠ΄Π΅Ρ‚ IP: ΠΏΠΎΡ€Ρ‚. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Π΅ AF_UNIX β€” Π³Π΄Π΅ адрСс задаСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°.
  • SOCK_DGRAM β€” ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π½Π΅ «сырой ΠΏΠ°ΠΊΠ΅Ρ‚Β», Π° ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΡ€Π΅Π²ΠΎΠ», ΠΈ с ΠΎΠ±Ρ€Π΅Π·Π°Π½Π½Ρ‹ΠΌ частично ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ. Π’.Π΅. ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ UDP Π±Π΅Π· «физичСской» ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° UDP. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ SOCK_RAW, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ ΠΈ это Β«ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒΒ».

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ бродкастом:

                    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сокСт Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ бродкаста
                    rz=udp_socket.sendto(packetack, (gconfig["broadcast"],68))

, Ρ‚Π°ΠΊ ΠΈ Π½Π° адрСс, Β«ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΏΠ°ΠΊΠ΅Ρ‚Β»:

                        udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сокСт Π² Ρ€Π΅ΠΆΠΈΠΌ "ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚Π΅Π»Π΅ΠΉ"
                        rz=udp_socket.sendto(packetack, addr)

, Π³Π΄Π΅ SOL_SOCKET ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Β» для выставлСния ΠΎΠΏΡ†ΠΈΠΉ,

, SO_BROADCAST опция Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ шлСм «бродкастом»

  ,SO_REUSEADDR опция ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ сокСт Π² Ρ€Π΅ΠΆΠΈΠΌ Β«ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉΒ». По ΠΈΠ΄Π΅Π΅ ΠΎΠ½Π° Π½Π΅Π½ΡƒΠΆΠ½Π° Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, Π½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· сСрвСров FreeBSD, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ тСстировал, Π±Π΅Π· этой ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π».

Π Π°Π·Π±ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° DHCP

Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΌΠ½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ понравился Python. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΈΠ· Β«ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ» ΠΎΠ½ позволяСт довольно вольно обходится с Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ. Позволяя Π΅Π³ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² дСсятичныС значСния, строки ΠΈ hex β€” Ρ‚.Π΅. Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ собствСнно ΠΈ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ структуру ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π’Π°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±Π°ΠΉΡ‚ Π² HEX ΠΈ просто Π±Π°ΠΉΡ‚Π°Ρ…:

    res["xidhex"]=data[4:8].hex()
    res["xidbyte"]=data[4:8]

, ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹ Π² структуру:

res["flags"]=pack('BB',data[10],data[11])

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ IP ΠΈΠ· структуры:

res["ciaddr"]=socket.inet_ntoa(pack('BBBB',data[12],data[13],data[14],data[15]));

И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚:

res=res+socket.inet_pton(socket.AF_INET, gconfig["dhcp_Server"])

На этом всё πŸ˜‰

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com