Python apgÅ«Å”ana (nedaudz vairÄk nekÄ no nulles š)
servera nomaiÅa DB2DHCP (mana dakÅ”a), oriÄ£inÄls Å”eit, kuru jaunajai OS samontÄt kļūst arvien grÅ«tÄk. Un man nepatÄ«k, ka tas ir binÄrs, ko nevar āÅ”obrÄ«d mainÄ«tā
strÄdÄjoÅ”a DHCP servera iegÅ«Å”ana ar iespÄju izvÄlÄties abonenta IP adresi, izmantojot abonenta mac vai slÄdža mac+porta kombinÄciju (82. iespÄja)
cita velosipÄda rakstÄ«Å”ana (Ak, Ŕī ir mana mīļÄkÄ nodarbe)
saÅemt komentÄrus par jÅ«su izturÄÅ”anos pret klubu vietnÄ Habrahabr (vai vÄl labÄk, uzaicinÄjumu) š
RezultÄts: tas darbojas š PÄrbaudÄ«ts uz FreeBSD un Ubuntu OS. TeorÄtiski kodam var lÅ«gt darboties jebkurÄ OS, jo Å Ä·iet, ka kodÄ nav Ä«paÅ”u saiÅ”u.
UzmanÄ«gi! Ir vÄl daudz kas priekÅ”Ä.
Saite uz amatieru repozitoriju "pieskarieties dzīvam".
InstalÄÅ”anas, konfigurÄÅ”anas un āaparatÅ«ras izpÄtesā rezultÄta izmantoÅ”anas process ir daudz zemÄks, un tad nedaudz teorijas par DHCP protokolu. PriekÅ” manis. Un vÄsturei š
Nedaudz teorijas
Kas ir DHCP
Å is ir tÄ«kla protokols, kas ļauj ierÄ«cei uzzinÄt savu IP adresi (un citus parametrus, piemÄram, vÄrteju, DNS utt.) no DHCP servera. PakeÅ”u apmaiÅa notiek, izmantojot UDP protokolu. IerÄ«ces vispÄrÄjais darbÄ«bas princips, pieprasot tÄ«kla parametrus, ir Å”Äds:
IerÄ«ce (klients) nosÅ«ta UDP apraides pieprasÄ«jumu (DHCPDISCOVER) visÄ tÄ«klÄ ar pieprasÄ«jumu "kÄds, dodiet man IP adresi". TurklÄt parasti (bet ne vienmÄr) pieprasÄ«jums tiek saÅemts no 68. porta (avota), un galamÄrÄ·is ir 67. ports (galamÄrÄ·is). Dažas ierÄ«ces arÄ« sÅ«ta paketes no 67. porta. Klienta ierÄ«ces MAC adrese ir iekļauta DHCPDISCOVER pakotnÄ.
Visi tÄ«klÄ esoÅ”ie DHCP serveri (un tie var bÅ«t vairÄki) veido DHCPOFFER piedÄvÄjumu ar tÄ«kla iestatÄ«jumiem ierÄ«cei, kas nosÅ«tÄ«ja DHCPDISCOVER, un arÄ« pÄrraida to tÄ«klÄ. IdentifikÄcija, kam Ŕī pakete ir paredzÄta, ir balstÄ«ta uz klienta MAC adresi, kas norÄdÄ«ta iepriekÅ” DHCPDISCOVER pieprasÄ«jumÄ.
Klients pieÅem paketes ar priekÅ”likumiem tÄ«kla iestatÄ«jumiem, izvÄlas pievilcÄ«gÄko (kritÄriji var atŔķirties, piemÄram, pakeÅ”u piegÄdes laiks, starpceļu skaits) un veic āoficiÄlu pieprasÄ«jumuā DHCPREQUEST ar tÄ«kla iestatÄ«jumiem. no DHCP servera, kas tai patÄ«k. Å ajÄ gadÄ«jumÄ pakete tiek nosÅ«tÄ«ta uz noteiktu DHCP serveri.
TurklÄt ir DHCPINFORM paketes, kas nÄk no klienta un kuru mÄrÄ·is ir informÄt DHCP serveri, ka āklients ir dzÄ«vsā un izmanto izsniegtos tÄ«kla iestatÄ«jumus. Å Ä« servera ievieÅ”anÄ Å”Ä«s paketes tiek ignorÄtas.
MÅ«su gadÄ«jumÄ mÄs Åemsim vÄrÄ tikai datus tieÅ”i no UDP paketes satura bez OSI slÄÅa protokola galvenÄm, proti, DHCP struktÅ«ras:
DHCPDISCOVER
TÄtad ierÄ«ces IP adreses iegÅ«Å”anas process sÄkas ar to, ka DHCP klients nosÅ«ta apraides pieprasÄ«jumu no 68. porta uz 255.255.255.255:67. Å ajÄ pakotnÄ klients iekļauj savu MAC adresi, kÄ arÄ« to, ko tieÅ”i tas vÄlas saÅemt no DHCP servera. Iepakojuma struktÅ«ra ir aprakstÄ«ta tabulÄ zemÄk.
DHCPDISCOVER pakeŔu struktūras tabula
PozÄ«cija iepakojumÄ
VÄrtÄ«bas nosaukums
PiemÄrs
Ievads
Baits
NoskaidroŔana
1
SÄknÄÅ”anas pieprasÄ«jums
1
Hex
1
ZiÅojuma veids. 1 - pieprasÄ«jums no klienta uz serveri, 2 - atbilde no servera uz klientu
2
Aparatūras veids
1
Hex
1
AparatÅ«ras adreses veids, Å”ajÄ protokolÄ 1 - MAC
3
Aparatūras adreses garums
6
Hex
1
Ierīces MAC adreses garums
4
ApiÅi
1
Hex
1
StarpmarŔrutu skaits
5
Darījuma ID
23:cf:de:1d
Hex
4
UnikÄls darÄ«juma identifikators. To Ä£enerÄ klients pieprasÄ«juma darbÄ«bas sÄkumÄ
7
Otrais pagÄjis
0
Hex
4
Laiks sekundÄs no adreses iegÅ«Å”anas procesa sÄkuma
9
ZÄbaku karodziÅi
0
Hex
2
AtseviŔķi karodziÅi, kurus var iestatÄ«t, lai norÄdÄ«tu protokola parametrus
11
Klienta IP adrese
0.0.0.0
String
4
Klienta IP adrese (ja tÄda ir)
15
JÅ«su klienta IP adrese
0.0.0.0
String
4
Servera piedÄvÄtÄ IP adrese (ja pieejama)
19
NÄkamÄ servera IP adrese
0.0.0.0
String
4
Servera IP adrese (ja zinÄma)
23
Releja aģenta IP adrese
172.16.114.41
String
4
Releja aÄ£enta (piemÄram, slÄdža) IP adrese
27
Klienta MAC adrese
14:d6:4d:a7:c9:55
Hex
6
PakeÅ”u sÅ«tÄ«tÄja (klienta) MAC adrese
31
Klienta aparatūras adreses aizpildīŔana
Hex
10
RezervÄta vieta. Parasti aizpilda ar nullÄm
41
Servera saimniekdatora nosaukums
String
64
DHCP servera nosaukums. Parasti netiek pÄrraidÄ«ts
105
SÄknÄÅ”anas faila nosaukums
String
128
Faila nosaukums serverÄ«, ko sÄknÄÅ”anas laikÄ izmanto bezdiska stacijas
235
Burvju cepumi
63: 82: 53: 63
Hex
4
āMaÄ£iskaisā numurs, saskaÅÄ ar kuru, t.sk. varat noteikt, ka Ŕī pakete pieder DHCP protokolam
DHCP opcijas. Var iet jebkurÄ secÄ«bÄ
236
Opcijas numurs
53
Decembris
1
Opcija 53, kas norÄda DHCP paketes veidu
Opcijas numurs
50
Decembris
1
KÄdu IP adresi klients vÄlas saÅemt?
Opcijas garums
4
Decembris
1
Opcijas vÄrtÄ«ba
172.16.134.61
String
4
Opcijas numurs
55
1
Klienta pieprasÄ«tie tÄ«kla parametri. SastÄvs var atŔķirties
01 ā tÄ«kla maska
03 ā vÄrteja
06 - DNS
oc ā resursdatora nosaukums
0f - tÄ«kla domÄna nosaukums
1c ā apraides pieprasÄ«juma adrese (apraide)
42 ā TFTP servera nosaukums
79 - Statiskais marÅ”ruts bez klasÄm
Opcijas garums
8
1
Opcijas vÄrtÄ«ba
01:03:06:0c:0f:1c:42:79
8
Opcijas numurs
82
Decembris
82. iespÄja, kas pÄrraida atkÄrtotÄja ierÄ«ces MAC adresi un dažas papildu vÄrtÄ«bas.
VisbiežÄk tas ir slÄdža ports, uz kura darbojas gala DHCP klients.Å Ä« opcija satur papildu parametrus.Pirmais baits ir āapakÅ”opcijasā numurs, otrais ir tÄ garums, tad tÄ vÄrtÄ«ba.
Å ajÄ gadÄ«jumÄ 82. opcijÄ apakÅ”opcijas ir ligzdotas:
AÄ£enta shÄmas ID = 00:04:00:01:00:04, kur pÄdÄjie divi baiti ir DHCP klienta ports, no kura tika saÅemts pieprasÄ«jums
AÄ£enta attÄlais ID = 00:06:c8:be:19:93:11:48 ā DHCP atkÄrtotÄja ierÄ«ces MAC adrese
Pakas beigas
255
Decembris
1
255 simbolizÄ paciÅas beigas
DHCPPIEDÄVÄJUMS
TiklÄ«dz serveris saÅem DHCPDISCOVER paketi un redz, ka var piedÄvÄt klientam kaut ko no pieprasÄ«tÄs, tad Ä£enerÄ tai atbildi - DHCPDISCOVER. Atbilde tiek nosÅ«tÄ«ta uz ostu āno kurienes tÄ nÄcaā, ar apraidi, jo uz doto brÄ«di klientam vÄl nav IP adreses, tÄpÄc tas var pieÅemt paketi tikai tad, ja tÄ tiek nosÅ«tÄ«ta ar apraidi. Klients atpazÄ«st, ka Ŕī ir viÅam paredzÄta pakotne, pÄc viÅa MAC adreses paketÄ, kÄ arÄ« darÄ«juma numura, ko viÅÅ” Ä£enerÄ pirmÄs pakotnes izveides laikÄ.
DHCPOFFER pakeŔu struktūras tabula
PozÄ«cija iepakojumÄ
VÄrtÄ«bas nosaukums (parasti)
PiemÄrs
Ievads
Baits
NoskaidroŔana
1
SÄknÄÅ”anas pieprasÄ«jums
1
Hex
1
ZiÅojuma veids. 1 - pieprasÄ«jums no klienta uz serveri, 2 - atbilde no servera uz klientu
2
Aparatūras veids
1
Hex
1
AparatÅ«ras adreses veids, Å”ajÄ protokolÄ 1 - MAC
3
Aparatūras adreses garums
6
Hex
1
Ierīces MAC adreses garums
4
ApiÅi
1
Hex
1
StarpmarŔrutu skaits
5
Darījuma ID
23:cf:de:1d
Hex
4
UnikÄls darÄ«juma identifikators. To Ä£enerÄ klients pieprasÄ«juma darbÄ«bas sÄkumÄ
7
Otrais pagÄjis
0
Hex
4
Laiks sekundÄs no adreses iegÅ«Å”anas procesa sÄkuma
9
ZÄbaku karodziÅi
0
Hex
2
AtseviŔķi karodziÅi, kurus var iestatÄ«t, lai norÄdÄ«tu protokola parametrus. Å ajÄ gadÄ«jumÄ 0 nozÄ«mÄ Unicast pieprasÄ«juma veidu
11
Klienta IP adrese
0.0.0.0
String
4
Klienta IP adrese (ja tÄda ir)
15
JÅ«su klienta IP adrese
172.16.134.61
String
4
Servera piedÄvÄtÄ IP adrese (ja pieejama)
19
NÄkamÄ servera IP adrese
0.0.0.0
String
4
Servera IP adrese (ja zinÄma)
23
Releja aģenta IP adrese
172.16.114.41
String
4
Releja aÄ£enta (piemÄram, slÄdža) IP adrese
27
Klienta MAC adrese
14:d6:4d:a7:c9:55
Hex
6
PakeÅ”u sÅ«tÄ«tÄja (klienta) MAC adrese
31
Klienta aparatūras adreses aizpildīŔana
Hex
10
RezervÄta vieta. Parasti aizpilda ar nullÄm
41
Servera saimniekdatora nosaukums
String
64
DHCP servera nosaukums. Parasti netiek pÄrraidÄ«ts
105
SÄknÄÅ”anas faila nosaukums
String
128
Faila nosaukums serverÄ«, ko sÄknÄÅ”anas laikÄ izmanto bezdiska stacijas
235
Burvju cepumi
63: 82: 53: 63
Hex
4
āMaÄ£iskaisā numurs, saskaÅÄ ar kuru, t.sk. varat noteikt, ka Ŕī pakete pieder DHCP protokolam
DHCP opcijas. Var iet jebkurÄ secÄ«bÄ
236
Opcijas numurs
53
Decembris
1
53. opcija, kas nosaka DHCP 2 pakeŔu veidu - DHCPOFFER
Opcijas numurs
6
Decembris
1
IespÄja piedÄvÄt DHCP DNS klientam
Opcijas garums
4
Decembris
1
Opcijas vÄrtÄ«ba
8.8.8.8
String
4
Opcijas numurs
51
Decembris
1
Izdoto tÄ«kla parametru kalpoÅ”anas laiks sekundÄs, pÄc kura DHCP klientam tie jÄpieprasa vÄlreiz
Opcijas garums
4
Decembris
1
Opcijas vÄrtÄ«ba
86400
Decembris
4
Opcijas numurs
82
Decembris
1
82. iespÄja, atkÄrto to, kas bija programmÄ DHCPDISCOVER
Opcijas garums
18
Decembris
1
Opcijas vÄrtÄ«ba
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Decembris
18
Pakas beigas
255
Decembris
1
255 simbolizÄ paciÅas beigas
DHCPREQUEST
PÄc tam, kad klients ir saÅÄmis DHCPOFFER, viÅÅ” veido paketi, pieprasot tÄ«kla parametrus nevis visiem tÄ«klÄ esoÅ”ajiem DHCP serveriem, bet tikai vienam konkrÄtam, kura DHCPOFFER piedÄvÄjums viÅam āpatikaā visvairÄk. "PatÄ«k" kritÄriji var bÅ«t dažÄdi un atkarÄ«gi no klienta DHCP ievieÅ”anas. PieprasÄ«juma adresÄts tiek norÄdÄ«ts, izmantojot DHCP servera MAC adresi. TÄpat klients var nosÅ«tÄ«t DHCPREQUEST paketi, iepriekÅ” neÄ£enerÄjot DHCPDISCOVER, ja servera IP adrese jau ir iegÅ«ta iepriekÅ”.
DHCPREQUEST pakeŔu struktūras tabula
PozÄ«cija iepakojumÄ
VÄrtÄ«bas nosaukums (parasti)
PiemÄrs
Ievads
Baits
NoskaidroŔana
1
SÄknÄÅ”anas pieprasÄ«jums
1
Hex
1
ZiÅojuma veids. 1 - pieprasÄ«jums no klienta uz serveri, 2 - atbilde no servera uz klientu
2
Aparatūras veids
1
Hex
1
AparatÅ«ras adreses veids, Å”ajÄ protokolÄ 1 - MAC
3
Aparatūras adreses garums
6
Hex
1
Ierīces MAC adreses garums
4
ApiÅi
1
Hex
1
StarpmarŔrutu skaits
5
Darījuma ID
23:cf:de:1d
Hex
4
UnikÄls darÄ«juma identifikators. To Ä£enerÄ klients pieprasÄ«juma darbÄ«bas sÄkumÄ
7
Otrais pagÄjis
0
Hex
4
Laiks sekundÄs no adreses iegÅ«Å”anas procesa sÄkuma
9
ZÄbaku karodziÅi
8000
Hex
2
AtseviŔķi karodziÅi, kurus var iestatÄ«t, lai norÄdÄ«tu protokola parametrus. Å ajÄ gadÄ«jumÄ ir iestatÄ«ta āapraideā.
11
Klienta IP adrese
0.0.0.0
String
4
Klienta IP adrese (ja tÄda ir)
15
JÅ«su klienta IP adrese
172.16.134.61
String
4
Servera piedÄvÄtÄ IP adrese (ja pieejama)
19
NÄkamÄ servera IP adrese
0.0.0.0
String
4
Servera IP adrese (ja zinÄma)
23
Releja aģenta IP adrese
172.16.114.41
String
4
Releja aÄ£enta (piemÄram, slÄdža) IP adrese
27
Klienta MAC adrese
14:d6:4d:a7:c9:55
Hex
6
PakeÅ”u sÅ«tÄ«tÄja (klienta) MAC adrese
31
Klienta aparatūras adreses aizpildīŔana
Hex
10
RezervÄta vieta. Parasti aizpilda ar nullÄm
41
Servera saimniekdatora nosaukums
String
64
DHCP servera nosaukums. Parasti netiek pÄrraidÄ«ts
105
SÄknÄÅ”anas faila nosaukums
String
128
Faila nosaukums serverÄ«, ko sÄknÄÅ”anas laikÄ izmanto bezdiska stacijas
235
Burvju cepumi
63: 82: 53: 63
Hex
4
āMaÄ£iskaisā numurs, saskaÅÄ ar kuru, t.sk. varat noteikt, ka Ŕī pakete pieder DHCP protokolam
DHCP opcijas. Var iet jebkurÄ secÄ«bÄ
236
Opcijas numurs
53
Decembris
3
53. opcija, kas definÄ DHCP pakeÅ”u tipu 3 ā DHCPREQUEST
Opcijas garums
1
Decembris
1
Opcijas vÄrtÄ«ba
3
Decembris
1
Opcijas numurs
61
Decembris
1
Klienta ID: 01 (Ehernet) + klienta MAC adrese
Opcijas garums
7
Decembris
1
Opcijas vÄrtÄ«ba
01:2c:ab:25:ff:72:a6
Hex
7
Opcijas numurs
60
Decembris
"PÄrdevÄja klases identifikators". ManÄ gadÄ«jumÄ tas ziÅo par DHCP klienta versiju. VarbÅ«t citas ierÄ«ces atgriež kaut ko citu. PiemÄram, Windows ziÅo par MSFT 5.0
Opcijas garums
11
Decembris
Opcijas vÄrtÄ«ba
udhcp 0.9.8
String
Opcijas numurs
55
1
Klienta pieprasÄ«tie tÄ«kla parametri. SastÄvs var atŔķirties
01 ā tÄ«kla maska
03 ā vÄrteja
06 - DNS
oc ā resursdatora nosaukums
0f - tÄ«kla domÄna nosaukums
1c ā apraides pieprasÄ«juma adrese (apraide)
42 ā TFTP servera nosaukums
79 - Statiskais marÅ”ruts bez klasÄm
Opcijas garums
8
1
Opcijas vÄrtÄ«ba
01:03:06:0c:0f:1c:42:79
8
Opcijas numurs
82
Decembris
1
82. iespÄja, atkÄrto to, kas bija programmÄ DHCPDISCOVER
Opcijas garums
18
Decembris
1
Opcijas vÄrtÄ«ba
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Decembris
18
Pakas beigas
255
Decembris
1
255 simbolizÄ paciÅas beigas
DHCPACK
KÄ apstiprinÄjumu, ka ājÄ, tÄ ir, Ŕī ir jÅ«su IP adrese, un es to nevienam citam neizdoÅ”uā no DHCP servera, tiek apkalpota pakete DHCPACK formÄtÄ no servera uz klientu. To pÄrraida tÄpat kÄ citas paketes. Lai gan tÄlÄk esoÅ”ajÄ kodÄ Python ieviestajam DHCP serverim katram gadÄ«jumam es dublÄju jebkuru apraides pieprasÄ«jumu, nosÅ«tot paketi uz konkrÄtu klienta IP, ja tas jau ir zinÄms. TurklÄt DHCP serverim ir pilnÄ«gi vienalga, vai DHCPACK pakete ir sasniegusi klientu. Ja klients nesaÅem DHCPACK, tad pÄc kÄda laika tas vienkÄrÅ”i atkÄrto DHCPREQUEST
DHCPACK pakeŔu struktūras tabula
PozÄ«cija iepakojumÄ
VÄrtÄ«bas nosaukums (parasti)
PiemÄrs
Ievads
Baits
NoskaidroŔana
1
SÄknÄÅ”anas pieprasÄ«jums
2
Hex
1
ZiÅojuma veids. 1 - pieprasÄ«jums no klienta uz serveri, 2 - atbilde no servera uz klientu
2
Aparatūras veids
1
Hex
1
AparatÅ«ras adreses veids, Å”ajÄ protokolÄ 1 - MAC
3
Aparatūras adreses garums
6
Hex
1
Ierīces MAC adreses garums
4
ApiÅi
1
Hex
1
StarpmarŔrutu skaits
5
Darījuma ID
23:cf:de:1d
Hex
4
UnikÄls darÄ«juma identifikators. To Ä£enerÄ klients pieprasÄ«juma darbÄ«bas sÄkumÄ
7
Otrais pagÄjis
0
Hex
4
Laiks sekundÄs no adreses iegÅ«Å”anas procesa sÄkuma
9
ZÄbaku karodziÅi
8000
Hex
2
AtseviŔķi karodziÅi, kurus var iestatÄ«t, lai norÄdÄ«tu protokola parametrus. Å ajÄ gadÄ«jumÄ ir iestatÄ«ta āapraideā.
11
Klienta IP adrese
0.0.0.0
String
4
Klienta IP adrese (ja tÄda ir)
15
JÅ«su klienta IP adrese
172.16.134.61
String
4
Servera piedÄvÄtÄ IP adrese (ja pieejama)
19
NÄkamÄ servera IP adrese
0.0.0.0
String
4
Servera IP adrese (ja zinÄma)
23
Releja aģenta IP adrese
172.16.114.41
String
4
Releja aÄ£enta (piemÄram, slÄdža) IP adrese
27
Klienta MAC adrese
14:d6:4d:a7:c9:55
Hex
6
PakeÅ”u sÅ«tÄ«tÄja (klienta) MAC adrese
31
Klienta aparatūras adreses aizpildīŔana
Hex
10
RezervÄta vieta. Parasti aizpilda ar nullÄm
41
Servera saimniekdatora nosaukums
String
64
DHCP servera nosaukums. Parasti netiek pÄrraidÄ«ts
105
SÄknÄÅ”anas faila nosaukums
String
128
Faila nosaukums serverÄ«, ko sÄknÄÅ”anas laikÄ izmanto bezdiska stacijas
235
Burvju cepumi
63: 82: 53: 63
Hex
4
āMaÄ£iskaisā numurs, saskaÅÄ ar kuru, t.sk. varat noteikt, ka Ŕī pakete pieder DHCP protokolam
DHCP opcijas. Var iet jebkurÄ secÄ«bÄ
236
Opcijas numurs
53
Decembris
3
53. opcija, kas nosaka DHCP pakeÅ”u veidu 5 ā DHCPACK
MÄs izveidojam MySQL datu bÄzi, augÅ”upielÄdÄjam tajÄ pydhcp.sql dump un konfigurÄjam konfigurÄcijas failu.
KonfigurÄcija
Visi servera iestatÄ«jumi ir xml failÄ. Atsauces fails:
1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 vietÄjais saimnieks pÄrbaude pÄrbaude pydhcp option_8.8.8.8_hex:sw_port82:1:20 option_22_hex:sw_port82:2:16 option_18_hex:sw_mac:82:26 40 atlasiet ip,mask,router,dns no lietotÄjiem, kur augÅ”Äjais(mac)=augÅ”Äjais('{option_3_AgentRemoteId_hex}') un augÅ”Äjais(ports)=upper('{option_1_AgentCircuitId_port_hex}') atlasiet ip,mask,router,dns no lietotÄjiem, kur augÅ”Äjais(mac)=augÅ”Äjais('{sw_mac}') un augÅ”Äjais(ports)=augÅ”Äjais('{sw_port82}') atlasiet ip,mask,router,dns no lietotÄjiem, kur augÅ”Äjais(mac)=upper('{ClientMacAddress}') ievietot vÄsturÄ (id,dt,mac,ip,comment) vÄrtÄ«bas (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')
Tagad sÄ«kÄk par tagiem:
SadaÄ¼Ä dhcpserver ir aprakstÄ«ti pamata iestatÄ«jumi servera palaiÅ”anai, proti:
resursdators ā kÄdu IP adresi serveris klausÄs 67. portÄ
apraide ā kura IP ir pÄrraide DHCPOFFER un DHCPACK
DHCPServer - kÄds ir DHCP servera IP
IzsniegtÄs IP adreses LeaseTime nomas laiks
ThreadLimit ā cik pavedienu vienlaikus darbojas, lai apstrÄdÄtu ienÄkoÅ”Äs UDP paketes portÄ 67. Tam vajadzÄtu palÄ«dzÄt lielas slodzes projektos š
defaultMask,defaultRouter,defaultDNS - kas pÄc noklusÄjuma tiek piedÄvÄts abonentam, ja datu bÄzÄ tiek atrasts IP, bet tam nav norÄdÄ«ti papildu parametri
mysql sadaļa:
resursdators, lietotÄjvÄrds, parole, bÄzes nosaukums - viss runÄ pats par sevi. AptuvenÄ datu bÄzes struktÅ«ra ir publicÄta GitHub
VaicÄjumu sadaļa: pieprasÄ«jumi PIEDÄVÄJUMA/ATKRIEÅ ANAS saÅemÅ”anai ir aprakstÄ«ti Å”eit:
offer_count ā rindu skaits ar pieprasÄ«jumiem, kas atgriež rezultÄtu, piemÄram, ip, mask, router, dns
offer_n ā vaicÄjuma virkne. Ja atgrieÅ”ana ir tukÅ”a, izpilda Å”Ädu piedÄvÄjuma pieprasÄ«jumu
history_sql - vaicÄjums, kas raksta, piemÄram, abonenta āautorizÄcijas vÄsturÄā
Pieprasījumos var iekļaut jebkurus mainīgos lielumus no opciju sadaļas vai opcijas no DHCP protokola.
Opciju sadaļa. Å eit tas kļūst interesantÄk. Å eit mÄs varam izveidot mainÄ«gos, ko varam izmantot vÄlÄk vaicÄjumu sadaļÄ.
PiemÄram:
option_82_hex:sw_port1:20:22
, Ŕī komandrinda aizÅem visu rindu, kas tika iekļauta DHCP pieprasÄ«juma opcijÄ 82, heksadecimÄlÄ formÄtÄ diapazonÄ no 20 lÄ«dz 22 baitiem (ieskaitot), un ievieto to jaunajÄ mainÄ«gajÄ sw_port1 (slÄgt portu, no kurienes tika saÅemts pieprasÄ«jums)
option_82_hex:sw_mac:26:40
, definÄjiet sw_mac mainÄ«go, Åemot hex no diapazona 26:40
JÅ«s varat redzÄt visas iespÄjamÄs opcijas, kuras var izmantot vaicÄjumos, startÄjot serveri ar slÄdzi -d. MÄs redzÄsim kaut ko lÄ«dzÄ«gu Å”im žurnÄlam:
AttiecÄ«gi mÄs varam ietÄ«t jebkuru mainÄ«go {}, un tas tiks izmantots SQL vaicÄjumÄ.
ReÄ£istrÄsim vÄsturei, ka klients saÅÄma IP adresi:
Servera palaiŔana
./pydhcpdb.py -d -c config.xml
ā d konsoles izvades režīms DEBUG
- c <faila nosaukums> konfigurÄcijas fails
PÄrskats
Un tagad sÄ«kÄka informÄcija par servera ievieÅ”anu Python. TÄs ir sÄpes. Python tika apgÅ«ts lidojumÄ. Daudzi mirkļi ir veidoti stilÄ "wow, man kaut kÄ izdevÄs." Nemaz nav optimizÄts un atstÄts Å”ÄdÄ formÄ galvenokÄrt tÄpÄc, ka ir maz pieredzes Python izstrÄdÄ. Es pakavÄÅ”os pie interesantÄkajiem servera ievieÅ”anas aspektiem ākodÄā.
XML konfigurÄcijas failu parsÄtÄjs
Tiek izmantots standarta Python modulis xml.dom. Å Ä·iet vienkÄrÅ”i, taÄu ievieÅ”anas laikÄ bija manÄms skaidras dokumentÄcijas un piemÄru trÅ«kums tÄ«klÄ, izmantojot Å”o moduli.
AF_INET - nozÄ«mÄ, ka adreses formÄts bÅ«s IP: ports. Var bÅ«t arÄ« AF_UNIX ā kur adrese tiek norÄdÄ«ta ar faila nosaukumu.
SOCK_DGRAM - nozÄ«mÄ, ka mÄs nepieÅemam āneapstrÄdÄtu paketiā, bet gan tÄdu, kas jau ir izgÄjusi cauri ugunsmÅ«rim un ar daļÄji apgrieztu paketi. Tie. mÄs saÅemam tikai UDP paketi bez UDP pakeÅ”u iesaiÅojuma āfiziskÄā komponenta. Ja izmantojat karodziÅu SOCK_RAW, jums bÅ«s arÄ« jÄparsÄ Å”is āiesaiÅojumsā.
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # pÄrslÄdziet ligzdu uz vairÄku klausÄ«tÄju režīmu rz=udp_socket.sendto(packetack, addr)
, kur SOL_SOCKET nozÄ«mÄ āprotokola lÄ«meniā opciju iestatÄ«Å”anai,
, SO_BROADCAST opciju, ka Ä·iveres pakete ir āpÄrraideā
Opcija ,SO_REUSEADDR pÄrslÄdz ligzdu uz ādaudzu klausÄ«tÄjuā režīmu. TeorÄtiski Å”ajÄ gadÄ«jumÄ tas ir lieki, taÄu vienÄ no FreeBSD serveriem, kurÄ testÄju, kods bez Ŕīs opcijas nedarbojÄs.
DHCP paketes parsÄÅ”ana
Å eit man ļoti patika Python. IzrÄdÄs, ka no kastes tas ļauj bÅ«t diezgan elastÄ«gam ar baitkodu. Ä»aujot to ļoti viegli pÄrtulkot decimÄlvÄrtÄ«bÄs, virknÄs un hex - t.i. tas ir tas, kas mums patiesÄ«bÄ ir nepiecieÅ”ams, lai saprastu paketes struktÅ«ru. PiemÄram, jÅ«s varat iegÅ«t virkni baitu HEX un tikai baitus: