Iseva ye-DHCP+Mysql ku-Python

Iseva ye-DHCP+Mysql ku-Python

Inhloso yale phrojekthi bekungu:

  • Ukufunda nge-DHCP kunethiwekhi ye-IPv4
  • I-Python yokufunda (okungaphezulu kancane kunokusuka ekuqaleni 😉)
  • esikhundleni seseva DB2DHCP (imfoloko yami), okwangempela lapha, osekuba nzima nakakhulu ukuhlanganisa i-OS entsha. Futhi angithandi ukuthi kungumbambambili ukuthi ayikho indlela "yokushintsha njengamanje"
  • ukuthola iseva esebenzayo ye-DHCP enekhono lokukhetha ikheli le-IP lobhalisile usebenzisa i-mac yobhalisile noma ushintshe inhlanganisela yembobo ye-mac+ (Inketho 82)
  • ukubhala elinye ibhayisikili (Oh! lona umsebenzi wami engiwukhonzile)
  • ukuthola amazwana mayelana nokubamba kwakho iklabhu ku-Habrahabr (noma okungcono, isimemo) 😉

Umphumela: iyasebenza 😉 Ihlolwe ku-FreeBSD naku-Ubuntu OS. Ngokwethiyori, ikhodi ingacelwa ukuthi isebenze ngaphansi kwanoma iyiphi i-OS, ngoba Kubonakala sengathi akukho ukubophezela okuthile kukhodi.
Ngokucophelela! Kuningi okuzayo.

Xhuma endaweni yokugcina izimfundamakhwela "thinta uphila".

Inqubo yokufaka, ukulungisa nokusebenzisa umphumela "wokufunda i-hardware" iphansi kakhulu, bese kuba ithiyori encane mayelana nephrothokholi ye-DHCP. Ngokwami. Nomlando 😉

Ithiyori encane

Yini i-DHCP

Lena iphrothokholi yenethiwekhi evumela idivayisi ukuthi ithole ikheli layo le-IP (kanye namanye amapharamitha njengesango, i-DNS, njll.) kusuka kuseva ye-DHCP. Amaphakethe ashintshwa kusetshenziswa iphrothokholi ye-UDP. Umgomo ojwayelekile wokusebenza kwedivayisi lapho ucela imingcele yenethiwekhi imi kanje:

  1. Idivayisi (iklayenti) ithumela isicelo sokusakaza se-UDP (DHCPDISCOVER) kuyo yonke inethiwekhi ngesicelo "kahle, othile unginikeze ikheli le-IP." Ngaphezu kwalokho, ngokuvamile (kodwa hhayi njalo) isicelo sivela ku-port 68 (umthombo), futhi indawo okuyiwa kuyo yi-port 67 (indawo). Amanye amadivaysi aphinde athumele amaphakethe esuka ku-port 67. Ikheli le-MAC ledivayisi yeklayenti lifakwe ngaphakathi kwephakheji ye-DHCPDISCOVER.
  2. Wonke amaseva e-DHCP atholakala kunethiwekhi (futhi kungase kube ambalwa kuwo) enza umnikelo we-DHCPOFFER ngezilungiselelo zenethiwekhi zedivayisi ethumele i-DHCPDISCOVER, aphinde ayisakaze ngenethiwekhi. Ukuhlonza ukuthi leli phakethe lihloselwe bani kusekelwe ekhelini le-MAC leklayenti elinikezwe ngaphambili esicelweni se-DHCPDISCOVER.
  3. Iklayenti lamukela amaphakethe aneziphakamiso zezilungiselelo zenethiwekhi, likhetha elikhanga kakhulu (imibandela ingase ihluke, isibonelo, isikhathi sokulethwa kwephakethe, inani lemizila ephakathi), futhi yenza "isicelo esisemthethweni" i-DHCPREQUEST ngezilungiselelo zenethiwekhi. kusuka kuseva ye-DHCP eyithandayo. Kulokhu, iphakethe liya kuseva ethile ye-DHCP.
  4. Iseva ethole i-DHCPREQUEST ithumela iphakethe lefomethi ye-DHCPACK, lapho iphinda ifaka kuhlu izilungiselelo zenethiwekhi ezihloselwe leli klayenti.

Iseva ye-DHCP+Mysql ku-Python

Ngaphezu kwalokho, kunamaphakethe e-DHCPINFORM avela kuklayenti, futhi inhloso yawo ukwazisa iseva ye-DHCP ukuthi “iklayenti liyaphila” futhi lisebenzisa izilungiselelo zenethiwekhi ezikhishiwe. Ekusetshenzisweni kwalesi siphakeli, lawa maphakethe akazitshwa.

Ifomethi yephakheji

Ngokuvamile, uhlaka lwephakethe le-Ethernet lubukeka kanjena:

Iseva ye-DHCP+Mysql ku-Python

Esimweni sethu, sizocubungula kuphela idatha ngokuqondile kusukela kokuqukethwe kwephakethe le-UDP, ngaphandle kwezihloko zephrothokholi yesendlalelo se-OSI, okuyisakhiwo se-DHCP:

I-DHCPDISCOVER

Ngakho, inqubo yokuthola ikheli le-IP ledivayisi iqala ngokuthi iklayenti le-DHCP lithumele isicelo sokusakaza kusuka ku-port 68 kuya ku-255.255.255.255:67. Kule phakheji, iklayenti lihlanganisa ikheli lalo le-MAC, kanye nokuthi yini ngempela elifuna ukuyithola kuseva ye-DHCP. Isakhiwo sephakeji sichazwe kuthebula elingezansi.

Ithebula Lesakhiwo Sephakethe le-DHCPDISCOVER

Isikhundla ephaketheni
Igama lenani
Isibonelo:
Isingeniso
Byte
Ukuchazwa

1
Isicelo sokuqalisa
1
hex
1
Uhlobo lomlayezo. 1 - isicelo esisuka kuklayenti siye kuseva, 2 - impendulo esuka kuseva ukuya kuklayenti

2
Uhlobo lwehadiwe
1
hex
1
Uhlobo lwekheli lehadiwe, kule protocol 1 - MAC

3
Ubude bamakheli ezingxenyekazi zekhompuyutha
6
hex
1
Ubude bekheli ledivayisi ye-MAC

4
Hops
1
hex
1
Inombolo yemizila ephakathi

5
I-ID yomsebenzi
23:cf:de:1d
hex
4
Isihlonzi sokwenziwe esiyingqayizivele. Kwenziwe iklayenti ekuqaleni komsebenzi wesicelo

7
Kwedlule okwesibili
0
hex
4
Isikhathi ngemizuzwana kusukela ekuqaleni kwenqubo yokuthola ikheli

9
Boot amafulegi
0
hex
2
Amafulegi athile angasethwa ukuze abonise amapharamitha ephrothokholi

11
Ikheli le-IP leklayenti
0.0.0.0
Ulayini
4
Ikheli le-IP leklayenti (uma likhona)

15
Ikheli le-IP leklayenti lakho
0.0.0.0
Ulayini
4
Ikheli le-IP elinikezwa iseva (uma likhona)

19
Ikheli le-IP elilandelayo leseva
0.0.0.0
Ulayini
4
Ikheli le-IP leseva (uma laziwa)

23
Ikheli le-IP le-ejenti yokudlulisa
172.16.114.41
Ulayini
4
Ikheli lasesizindeni se-inthanethi le-ejenti yokudlulisela (isibonelo, iswishi)

27
Ikheli le-MAC leklayenti
14:d6:4d:a7:c9:55
hex
6
Ikheli le-MAC lomthumeli wephakethe (iklayenti)

31
I-padding yekheli lezingxenyekazi zekhompyutha zeklayenti
 
hex
10
Isihlalo esigodliwe. Ivamise ukugcwaliswa ngoziro

41
Igama lomsingathi weseva
 
Ulayini
64
Igama leseva ye-DHCP. Ngokuvamile ayidluliswanga

105
Qalisa igama lefayela
 
Ulayini
128
Igama lefayela kuseva elisetshenziswa iziteshi ezingenadiski lapho iqalisa

235
Amakhukhi omlingo
63: 82: 53: 63
hex
4
Inombolo "yomlingo", ngokusho kwayo, kuhlanganisa. unganquma ukuthi leli phakethe lingelephrothokholi ye-DHCP

Izinketho ze-DHCP. Ingahamba nganoma iyiphi i-oda

236
Inombolo yenketho
53
Dec
1
Inketho 53, ecacisa uhlobo lwephakethe le-DHCP

1 - I-DHCPDISCOVER
3 - DHCPREQUEST
2 - I-DHCPOFFER
5 - I-DHCPACK
8 - DHCPINFORM

 
Ubude benketho
1
Dec
1

 
Inani lenketho
1
Dec
1

 
Inombolo yenketho
50
Dec
1
Iliphi ikheli le-IP iklayenti elifuna ukulithola?

 
Ubude benketho
4
Dec
1

 
Inani lenketho
172.16.134.61
Ulayini
4

 
Inombolo yenketho
55
 
1
Amapharamitha enethiwekhi acelwe iklayenti. Ukwakheka kungase kuhluke

01 — Imaski yenethiwekhi
03 - Isango
06 - DNS
oc - Igama lomethuleli
0f - igama lesizinda senethiwekhi
1c - ikheli lesicelo sokusakaza (ukusakaza)
42 - Igama leseva ye-TFTP
79 - Umzila Ongashintshi Ongajwayelekile

 
Ubude benketho
8
 
1

 
Inani lenketho
01:03:06:0c:0f:1c:42:79
 
8

 
Inombolo yenketho
82
Dec
 
Inketho 82, edlulisela ikheli le-MAC ledivayisi ephindayo namanye amanani engeziwe.

Ngokuvamile, leli yimbobo yeswishi lapho kuqalisa khona iklayenti le-DHCP. Le nketho iqukethe amapharamitha angeziwe. Ibhayithi yokuqala inombolo "ye-suboption", eyesibili ubude bayo, bese kuba yinani layo.

Kulokhu, kunketho 82, izinketho ezingezansi zibekwe:
I-Agent Circuit ID = 00:04:00:01:00:04, lapho amabhayithi amabili okugcina eyimbobo yeklayenti le-DHCP lapho isicelo sivela khona.

I-ID yesilawuli kude somenzeli = 00:06:c8:be:19:93:11:48 - Ikheli le-MAC ledivayisi yokuphinda i-DHCP

 
Ubude benketho
18
Dec
 

 
Inani lenketho
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
hex
 

 
Ukuphela kwephakheji
255
Dec
1
255 ifanekisela ukuphela kwephakethe

I-DHCPOFFER

Ngokushesha nje lapho iseva ithola iphakethe le-DHCPDISCOVER futhi uma ibona ukuthi inganikeza iklayenti okuthile okuvela kule eliceliwe, bese ikhiqiza impendulo yalo - DHCPDISCOVER. Impendulo ithunyelwa echwebeni "kusukela lapho ivela khona", ngokusakazwa, ngoba okwamanje, iklayenti alikabi nalo ikheli le-IP, ngakho-ke lingamukela kuphela iphakethe uma lithunyelwa ngokusakazwa. Iklayenti liyabona ukuthi leli yiphakheji lalo ngekheli lalo le-MAC ngaphakathi kwephakeji, kanye nenombolo yokwenziwe eliyikhiqizayo ngesikhathi kwakhiwa iphakheji yokuqala.

Ithebula Lesakhiwo Sephakethe le-DHCPOFFER

Isikhundla ephaketheni
Igama lenani (elivamile)
Isibonelo:
Isingeniso
Byte
Ukuchazwa

1
Isicelo sokuqalisa
1
hex
1
Uhlobo lomlayezo. 1 - isicelo esisuka kuklayenti siye kuseva, 2 - impendulo esuka kuseva ukuya kuklayenti

2
Uhlobo lwehadiwe
1
hex
1
Uhlobo lwekheli lehadiwe, kule protocol 1 - MAC

3
Ubude bamakheli ezingxenyekazi zekhompuyutha
6
hex
1
Ubude bekheli ledivayisi ye-MAC

4
Hops
1
hex
1
Inombolo yemizila ephakathi

5
I-ID yomsebenzi
23:cf:de:1d
hex
4
Isihlonzi sokwenziwe esiyingqayizivele. Kwenziwe iklayenti ekuqaleni komsebenzi wesicelo

7
Kwedlule okwesibili
0
hex
4
Isikhathi ngemizuzwana kusukela ekuqaleni kwenqubo yokuthola ikheli

9
Boot amafulegi
0
hex
2
Amafulegi athile angasethwa ukuze abonise amapharamitha ephrothokholi. Kulokhu, u-0 usho uhlobo lwesicelo se-Unicast

11
Ikheli le-IP leklayenti
0.0.0.0
Ulayini
4
Ikheli le-IP leklayenti (uma likhona)

15
Ikheli le-IP leklayenti lakho
172.16.134.61
Ulayini
4
Ikheli le-IP elinikezwa iseva (uma likhona)

19
Ikheli le-IP elilandelayo leseva
0.0.0.0
Ulayini
4
Ikheli le-IP leseva (uma laziwa)

23
Ikheli le-IP le-ejenti yokudlulisa
172.16.114.41
Ulayini
4
Ikheli lasesizindeni se-inthanethi le-ejenti yokudlulisela (isibonelo, iswishi)

27
Ikheli le-MAC leklayenti
14:d6:4d:a7:c9:55
hex
6
Ikheli le-MAC lomthumeli wephakethe (iklayenti)

31
I-padding yekheli lezingxenyekazi zekhompyutha zeklayenti
 
hex
10
Isihlalo esigodliwe. Ivamise ukugcwaliswa ngoziro

41
Igama lomsingathi weseva
 
Ulayini
64
Igama leseva ye-DHCP. Ngokuvamile ayidluliswanga

105
Qalisa igama lefayela
 
Ulayini
128
Igama lefayela kuseva elisetshenziswa iziteshi ezingenadiski lapho iqalisa

235
Amakhukhi omlingo
63: 82: 53: 63
hex
4
Inombolo "yomlingo", ngokusho kwayo, kuhlanganisa. unganquma ukuthi leli phakethe lingelephrothokholi ye-DHCP

Izinketho ze-DHCP. Ingahamba nganoma iyiphi i-oda

236
Inombolo yenketho
53
Dec
1
Inketho 53, echaza uhlobo lwephakethe le-DHCP 2 - DHCPOFFER

 
Ubude benketho
1
Dec
1

 
Inani lenketho
2
Dec
1

 
Inombolo yenketho
1
Dec
1
Inketho yokunikeza iklayenti le-DHCP imaski yenethiwekhi

 
Ubude benketho
4
Dec
1

 
Inani lenketho
255.255.224.0
Ulayini
4

 
Inombolo yenketho
3
Dec
1
Inketho yokunikeza iklayenti le-DHCP isango elizenzakalelayo

 
Ubude benketho
4
Dec
1

 
Inani lenketho
172.16.12.1
Ulayini
4

 
Inombolo yenketho
6
Dec
1
Inketho yokunikeza i-DHCP kuklayenti le-DNS

 
Ubude benketho
4
Dec
1

 
Inani lenketho
8.8.8.8
Ulayini
4

 
Inombolo yenketho
51
Dec
1
Ukuphila kwamapharamitha enethiwekhi akhishiwe ngamasekhondi, ngemva kwalokho iklayenti le-DHCP kufanele liwacele futhi

 
Ubude benketho
4
Dec
1

 
Inani lenketho
86400
Dec
4

 
Inombolo yenketho
82
Dec
1
Inketho 82, iphinda lokho okuze kokuthi DHCPDISCOVER

 
Ubude benketho
18
Dec
1

 
Inani lenketho
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:isib
Dec
18

 
Ukuphela kwephakheji
255
Dec
1
255 ifanekisela ukuphela kwephakethe

ISICELO

Ngemva kokuba iklayenti lithole i-DHCPOFFER, lenza iphakethe elicela imingcele yenethiwekhi hhayi kuwo wonke amaseva e-DHCP kunethiwekhi, kodwa kuphela kweyodwa ethile, lapho i-DHCPOFFER yayo inikela “eyithande” kakhulu. Imibandela ethi "thanda" ingahluka futhi incike ekusebenziseni i-DHCP yeklayenti. Umamukeli wesicelo ucaciswa kusetshenziswa ikheli le-MAC leseva ye-DHCP. Futhi, iphakethe le-DHCPREQUEST lingathunyelwa iklayenti ngaphandle kokukhiqiza i-DHCPDISCOVER, uma ikheli lasesizindeni se-inthanethi seseva selitholakele ngaphambilini.

Ithebula Lesakhiwo Sephakethe le-DHCPREQUEST

Isikhundla ephaketheni
Igama lenani (elivamile)
Isibonelo:
Isingeniso
Byte
Ukuchazwa

1
Isicelo sokuqalisa
1
hex
1
Uhlobo lomlayezo. 1 - isicelo esisuka kuklayenti siye kuseva, 2 - impendulo esuka kuseva ukuya kuklayenti

2
Uhlobo lwehadiwe
1
hex
1
Uhlobo lwekheli lehadiwe, kule protocol 1 - MAC

3
Ubude bamakheli ezingxenyekazi zekhompuyutha
6
hex
1
Ubude bekheli ledivayisi ye-MAC

4
Hops
1
hex
1
Inombolo yemizila ephakathi

5
I-ID yomsebenzi
23:cf:de:1d
hex
4
Isihlonzi sokwenziwe esiyingqayizivele. Kwenziwe iklayenti ekuqaleni komsebenzi wesicelo

7
Kwedlule okwesibili
0
hex
4
Isikhathi ngemizuzwana kusukela ekuqaleni kwenqubo yokuthola ikheli

9
Boot amafulegi
8000
hex
2
Amafulegi athile angasethwa ukuze abonise amapharamitha ephrothokholi. Kulokhu, "ukusakazwa" kusethiwe

11
Ikheli le-IP leklayenti
0.0.0.0
Ulayini
4
Ikheli le-IP leklayenti (uma likhona)

15
Ikheli le-IP leklayenti lakho
172.16.134.61
Ulayini
4
Ikheli le-IP elinikezwa iseva (uma likhona)

19
Ikheli le-IP elilandelayo leseva
0.0.0.0
Ulayini
4
Ikheli le-IP leseva (uma laziwa)

23
Ikheli le-IP le-ejenti yokudlulisa
172.16.114.41
Ulayini
4
Ikheli lasesizindeni se-inthanethi le-ejenti yokudlulisela (isibonelo, iswishi)

27
Ikheli le-MAC leklayenti
14:d6:4d:a7:c9:55
hex
6
Ikheli le-MAC lomthumeli wephakethe (iklayenti)

31
I-padding yekheli lezingxenyekazi zekhompyutha zeklayenti
 
hex
10
Isihlalo esigodliwe. Ivamise ukugcwaliswa ngoziro

41
Igama lomsingathi weseva
 
Ulayini
64
Igama leseva ye-DHCP. Ngokuvamile ayidluliswanga

105
Qalisa igama lefayela
 
Ulayini
128
Igama lefayela kuseva elisetshenziswa iziteshi ezingenadiski lapho iqalisa

235
Amakhukhi omlingo
63: 82: 53: 63
hex
4
Inombolo "yomlingo", ngokusho kwayo, kuhlanganisa. unganquma ukuthi leli phakethe lingelephrothokholi ye-DHCP

Izinketho ze-DHCP. Ingahamba nganoma iyiphi i-oda

236
Inombolo yenketho
53
Dec
3
Inketho 53, echaza uhlobo lwephakethe le-DHCP 3 - DHCPREQUEST

 
Ubude benketho
1
Dec
1

 
Inani lenketho
3
Dec
1

 
Inombolo yenketho
61
Dec
1
I-ID Yeklayenti: 01 (ye-Ehernet) + ikheli le-MAC leklayenti

 
Ubude benketho
7
Dec
1

 
Inani lenketho
01:2c:ab:25:ff:72:a6
hex
7

 
Inombolo yenketho
60
Dec
 
"Isihlonzi sekilasi lomthengisi". Endabeni yami, ibika inguqulo yeklayenti le-DHCP. Mhlawumbe amanye amadivaysi abuyisela okuthile okuhlukile. IWindows ngokwesibonelo ibika i-MSFT 5.0

 
Ubude benketho
11
Dec
 

 
Inani lenketho
udhcp 0.9.8
Ulayini
 

 
Inombolo yenketho
55
 
1
Amapharamitha enethiwekhi acelwe iklayenti. Ukwakheka kungase kuhluke

01 — Imaski yenethiwekhi
03 - Isango
06 - DNS
oc - Igama lomethuleli
0f - igama lesizinda senethiwekhi
1c - ikheli lesicelo sokusakaza (ukusakaza)
42 - Igama leseva ye-TFTP
79 - Umzila Ongashintshi Ongajwayelekile

 
Ubude benketho
8
 
1

 
Inani lenketho
01:03:06:0c:0f:1c:42:79
 
8

 
Inombolo yenketho
82
Dec
1
Inketho 82, iphinda lokho okuze kokuthi DHCPDISCOVER

 
Ubude benketho
18
Dec
1

 
Inani lenketho
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:isib
Dec
18

 
Ukuphela kwephakheji
255
Dec
1
255 ifanekisela ukuphela kwephakethe

I-DHCPACK

Njengesiqiniseko sokuthi “yebo, kunjalo, leli ikheli lakho le-IP, futhi ngeke ngilinike omunye umuntu” kusuka kuseva ye-DHCP, iphakethe elikufomethi ye-DHCPACK elisuka kuseva liya kuklayenti elisebenzelayo. Ithunyelwa ngokusakazwa njengamanye amaphakethe. Nakuba, kukhodi engezansi yeseva ye-DHCP esetshenziswe ku-Python, uma kwenzeka, ngiphinda noma yisiphi isicelo sokusakaza ngokuthumela iphakethe ku-IP yeklayenti ethile, uma yaziwa kakade. Ngaphezu kwalokho, iseva ye-DHCP ayinandaba nakancane ukuthi ingabe iphakethe le-DHCPACK lifinyelele iklayenti. Uma iklayenti lingayitholi i-DHCPACK, ngemva kwesikhashana livele liphinde DHCPREQUEST

Ithebula Lesakhiwo Sephakethe le-DHCPACK

Isikhundla ephaketheni
Igama lenani (elivamile)
Isibonelo:
Isingeniso
Byte
Ukuchazwa

1
Isicelo sokuqalisa
2
hex
1
Uhlobo lomlayezo. 1 - isicelo esisuka kuklayenti siye kuseva, 2 - impendulo esuka kuseva ukuya kuklayenti

2
Uhlobo lwehadiwe
1
hex
1
Uhlobo lwekheli lehadiwe, kule protocol 1 - MAC

3
Ubude bamakheli ezingxenyekazi zekhompuyutha
6
hex
1
Ubude bekheli ledivayisi ye-MAC

4
Hops
1
hex
1
Inombolo yemizila ephakathi

5
I-ID yomsebenzi
23:cf:de:1d
hex
4
Isihlonzi sokwenziwe esiyingqayizivele. Kwenziwe iklayenti ekuqaleni komsebenzi wesicelo

7
Kwedlule okwesibili
0
hex
4
Isikhathi ngemizuzwana kusukela ekuqaleni kwenqubo yokuthola ikheli

9
Boot amafulegi
8000
hex
2
Amafulegi athile angasethwa ukuze abonise amapharamitha ephrothokholi. Kulokhu, "ukusakazwa" kusethiwe

11
Ikheli le-IP leklayenti
0.0.0.0
Ulayini
4
Ikheli le-IP leklayenti (uma likhona)

15
Ikheli le-IP leklayenti lakho
172.16.134.61
Ulayini
4
Ikheli le-IP elinikezwa iseva (uma likhona)

19
Ikheli le-IP elilandelayo leseva
0.0.0.0
Ulayini
4
Ikheli le-IP leseva (uma laziwa)

23
Ikheli le-IP le-ejenti yokudlulisa
172.16.114.41
Ulayini
4
Ikheli lasesizindeni se-inthanethi le-ejenti yokudlulisela (isibonelo, iswishi)

27
Ikheli le-MAC leklayenti
14:d6:4d:a7:c9:55
hex
6
Ikheli le-MAC lomthumeli wephakethe (iklayenti)

31
I-padding yekheli lezingxenyekazi zekhompyutha zeklayenti
 
hex
10
Isihlalo esigodliwe. Ivamise ukugcwaliswa ngoziro

41
Igama lomsingathi weseva
 
Ulayini
64
Igama leseva ye-DHCP. Ngokuvamile ayidluliswanga

105
Qalisa igama lefayela
 
Ulayini
128
Igama lefayela kuseva elisetshenziswa iziteshi ezingenadiski lapho iqalisa

235
Amakhukhi omlingo
63: 82: 53: 63
hex
4
Inombolo "yomlingo", ngokusho kwayo, kuhlanganisa. unganquma ukuthi leli phakethe lingelephrothokholi ye-DHCP

Izinketho ze-DHCP. Ingahamba nganoma iyiphi i-oda

236
Inombolo yenketho
53
Dec
3
Inketho 53, echaza uhlobo 5 lwephakethe le-DHCP - DHCPACK

 
Ubude benketho
1
Dec
1

 
Inani lenketho
5
Dec
1

 
Inombolo yenketho
1
Dec
1
Inketho yokunikeza iklayenti le-DHCP imaski yenethiwekhi

 
Ubude benketho
4
Dec
1

 
Inani lenketho
255.255.224.0
Ulayini
4

 
Inombolo yenketho
3
Dec
1
Inketho yokunikeza iklayenti le-DHCP isango elizenzakalelayo

 
Ubude benketho
4
Dec
1

 
Inani lenketho
172.16.12.1
Ulayini
4

 
Inombolo yenketho
6
Dec
1
Inketho yokunikeza i-DHCP kuklayenti le-DNS

 
Ubude benketho
4
Dec
1

 
Inani lenketho
8.8.8.8
Ulayini
4

 
Inombolo yenketho
51
Dec
1
Ukuphila kwamapharamitha enethiwekhi akhishiwe ngamasekhondi, ngemva kwalokho iklayenti le-DHCP kufanele liwacele futhi

 
Ubude benketho
4
Dec
1

 
Inani lenketho
86400
Dec
4

 
Inombolo yenketho
82
Dec
1
Inketho 82, iphinda lokho okuze kokuthi DHCPDISCOVER

 
Ubude benketho
18
Dec
1

 
Inani lenketho
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:isib
Dec
18

 
Ukuphela kwephakheji
255
Dec
1
255 ifanekisela ukuphela kwephakethe

setting

Ukufakwa empeleni kuhlanganisa ukufaka amamojula we-python adingekayo emsebenzini. Kucatshangwa ukuthi i-MySQL isivele ifakiwe futhi imisiwe.

I-FreeBSD

pkg faka i-python3 python3 -m qinisekisa ipip pip3 faka isixhumi se-mysql

Ubuntu

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

Sakha isizindalwazi se-MySQL, silayishe i-pydhcp.sql yokulahla kuyo, futhi silungise ifayela lokumisa.

Ukucushwa

Zonke izilungiselelo zeseva zikufayela le-xml. Ifayela eliyisethenjwa:

1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 i-localhost test test 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 khetha ip,mask,router,dns kubasebenzisi lapho upper(mac)=upper('{option_3_AgentRemoteId_hex}') and upper(port)=upper('{option_1_AgentCircuitId_port_hex}') khetha ip,mask,router,dns kubasebenzisi lapho upper(mac)=upper('{sw_mac}') and upper(port)=upper('{sw_port82}') khetha ip,mask,router,dns kubasebenzisi lapho upper(mac)=upper('{ClientMacAddress}') faka emlandweni (id,dt,mac,ip,comment) amanani (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')

Manje ngemininingwane eyengeziwe kumathegi:

Isigaba se-dhcpserver sichaza izilungiselelo eziyisisekelo zokuqala iseva, okungukuthi:

  • umsingathi - yiliphi ikheli le-IP iseva elilalelayo ku-port 67
  • ukusakaza - okuyi-ip esakaza i-DHCPOFFER ne-DHCPACK
  • Iseva ye-DHCPS - ithini i-ip yeseva ye-DHCP
  • Isikhathi sokuqashisa se-LeaseTime sekheli le-IP elikhishiwe
  • I-ThreadLimit - mingaki imicu esebenzayo ngesikhathi esisodwa ukucubungula amaphakethe e-UDP angenayo ku-port 67. Kufanele isize kumaphrojekthi anomthwalo omkhulu 😉
  • defaultMask,defaultRouter,defaultDNS - okunikezwayo obhalisile ngokuzenzakalela uma i-IP itholakala kusizindalwazi, kodwa imingcele eyengeziwe ayishiwongo

isigaba se-mysql:

umsingathi, igama lomsebenzisi, iphasiwedi, igama lesizinda - yonke into iyazikhulumela. Isakhiwo sesizindalwazi esilinganiselwe sithunyelwe kuso GitHub

Isigaba sombuzo: izicelo zokuthola i-OFFER/ACK zichazwe lapha:

  • offer_count - inombolo yemigqa enezicelo ezibuyisela umphumela njenge-ip,mask,router,dns
  • offer_n - iyunithi yezinhlamvu yombuzo. Uma ukubuyisela kungenalutho, bese senza isicelo esilandelayo sokunikezwayo
  • history_sql - umbuzo obhala, isibonelo, "kumlando wokugunyazwa" kobhalisile

Izicelo zingabandakanya noma yikuphi okuhlukile okuvela esigabeni sezinketho noma izinketho ezivela kuphrothokholi ye-DHCP.

Isigaba sezinketho. Kulapho kuba nentshisekelo kakhudlwana. Lapha singakha okuguquguqukayo esingakusebenzisa kamuva esigabeni sombuzo.

Isibonelo:

option_82_hex:sw_port1:20:22

, lo mugqa womyalo uthatha wonke umugqa ofike ngenketho yesicelo ye-DHCP engu-82, ngefomethi ye-hex, ebangeni elisuka ku-20 kuye kwangama-22 amabhayithi ahlanganisiwe futhi uwubeke kokushintshashintshayo okusha kwe-sw_port1 (shintsha imbobo lapho isicelo sivele khona)

option_82_hex:sw_mac:26:40

, chaza i-sw_mac variable, ithatha i-hex kububanzi 26:40

Ungabona zonke izinketho ezingasetshenziswa emibuzweni ngokuqala iseva ngokushintsha -d. Sizobona into efana nale log:

--iphakethe le-DHCPINFORM lifike ku-port 67, lisuka ku-0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': '0025224MacAddressy'%B764', '00MacAddressy':' Jxd7d' , 'HType': 'Ethernet', 'HostName': b'x91xa5xe0xa3xa5xa9-x8fx8a', 'ReqListDNS': Iqiniso, 'ReqListDomainName': Yiqiniso, 'ReqListPerfowmRouterDiscover': Iqiniso, 'ReqListRouter': TrueStatic, 'ReqListReute': True, ' 'ReqListSubnetM ask ': Iqiniso, 'ReqListVendorSpecInfo': 43, 'RequestedIpAddress': '0.0.0.0', 'Vendor': b'MSFT 5.0', 'chaddr': '0025224ad764', 'ciaddr.172.30.128.13'00.' , 'flags ': b'x00x172.30.114.25', 'giaddr': '308', 'gpoz': 6, 'hlen': 1, 'hops': 82, 'htype': 'MAC', 'magic_cookie': b'cx12Sc ', 'op': 'DHCPINFORM', 'option12': 53, 'option53': 55, 'option55': 60, 'option60': 61, 'option61': 82, 'option82': 82, ' option_12_byte': b'x01x06x00x04x00x01x00x06x02x08x00x06' b'x00x1x9eXx2exb82xad', 'option_12010600040001000602080006001_hex': '589 tion_2_len': 82 18, 'option_82_str': "b'x12x01x06x00x04x00x01x00x06x02x08x00x06x00x1eXx9exb2xad'", 'umphumela': Amanga, 'amasekhondi angu-768,': 'siaddr': '0.0.0.0', 'sw_mac': '001e589eb2ad', 'sw_port1': '06', 'xidbyte': b'

Ngokufanelekile, singakwazi ukugoqa noma yikuphi okuguquguqukayo kokuthi {} futhi kuzosetshenziswa embuzweni we-SQL.

Masiqophe umlando wokuthi iklayenti lithole ikheli le-IP:

Iseva ye-DHCP+Mysql ku-Python

Iseva ye-DHCP+Mysql ku-Python

Iqala iseva

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

— d console mode okukhipha DEBUG
- c <filename> ifayela lokumisa

Ukuqondanisa

Futhi manje imininingwane eyengeziwe ekusebenziseni iseva kuPython. Kubuhlungu. I-Python yafundwa empuneni. Izikhathi eziningi zenziwa ngesitayela sokuthi “wow, ngandlela thize ngikwenze kwasebenza.” Ayilungiswanga nhlobo, futhi ishiywe kuleli fomu ikakhulukazi ngenxa yolwazi oluncane ekuthuthukisweni kwePython. Ngizogxila ezicini ezithakazelisa kakhulu zokuqaliswa kweseva "kukhodi".

Umhlahleli wefayela lokucushwa le-XML

Kusetshenziswa imojuli yePython engu-xml.dom ejwayelekile. Kubonakala kulula, kodwa phakathi nokuqaliswa kube nokushoda okuphawulekayo kwemibhalo ecacile nezibonelo kunethiwekhi esebenzisa le moduli.

    tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") ye-elem ku-mconfig: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["mysql_username"]=elem.getElementsByTagName("igama lomsebenzisi")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("password")[0].firstChild.data gconfig["mysql_base_base =elem.getElementsByTagName("igama lesisekelo")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") ye-elem ku-dconfig: gconfig["broadcast"]=elem.getElementsByTagName("ukusakaza")[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.dataskp_configdefault["dhcp_Server) =elem.getElementsByTagName("defaultMask")[0].firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data gconfig["dhcp_defaultDNS"]=elem. defaultDNS")[0].firstChild.data qconfig=tree.getElementsByTagName("query") ye-elem ku-qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.idatha yenombolo ku- 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("izinketho") ze-elem kuzinketho: node=elem.getElementsByTagName("inketho") yezinketho ku-node : ongakhethaMod.append(options.firstChild.data)

Multithreading

Ngokudabukisayo, ukufunda okuningi kuPython kwenziwa ngokucacile nangokulula.

def PacketWork(data,addr): ... # ukuqaliswa kokuhlaziya iphakethe elingenayo nokuphendula kulo ... kuyilapho Iqiniso: idatha, addr = udp_socket.recvfrom(1024) # ilinde intambo yephakethe le-UDP = threading.Thread( target=PacketWork , args=(data,addr,)).start() # njengoba ifika - sethula umsebenzi ochazwe ngaphambilini wePacketWork ngemuva ngamapharamitha ngenkathi threading.active_count() >gconfig["dhcp_ThreadLimit"]: isikhathi. lala(1) # uma inombolo Kunemicu eminingi esebenzayo kakade kunasezilungiselelweni, silinda kuze kube mincane yazo.

Thola/thumela iphakethe le-DHCP

Ukuze ubambe amaphakethe e-UDP eza ngekhadi lenethiwekhi, udinga “ukuphakamisa” isokhethi:

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

, lapho amafulegi ekhona:

  • AF_INET - kusho ukuthi ifomethi yekheli izoba yi-IP: port. Kungase futhi kube khona AF_UNIX - lapho ikheli linikezwe igama lefayela.
  • SOCK_DGRAM - kusho ukuthi asilamukeli “iphakethe elingahluziwe”, kodwa eselivele lidlule ku-firewall, nephakethe elisikwe kancane. Labo. sithola kuphela iphakethe le-UDP ngaphandle kwengxenye “engokomzimba” yosonga lwephakethe le-UDP. Uma usebenzisa ifulegi le-SOCK_RAW, uzodinga futhi ukuncozulula le “wrapper”.

Ukuthumela iphakethe kungase kufane nokusakaza:

                    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #shintsha isokhethi kumodi yokusakaza rz=udp_socket.sendto(packetack, (gconfig["broadcast"],68))

, nasekhelini elithi “lapho iphakethe livela khona”:

                        udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # shintsha isokhethi ibe yimodi yabalaleli abaningi rz=udp_socket.sendto(packetack, addr)

, lapho i-SOL_SOCKET isho “izinga lephrothokholi” yokusetha izinketho,

, SO_BROADCAST inketho yokuthi iphakheji yesigqoko “isakazwe”

  ,SO_REUSEADDR inketho ishintsha isokhethi ibe yimodi "yabalaleli abaningi". Ngokombono, akudingekile kuleli cala, kodwa kwenye yamaseva e-FreeBSD engivivinye kuyo, ikhodi ayizange isebenze ngaphandle kwale nketho.

Ukuhlaziya iphakethe le-DHCP

Yilapho engangiyithanda khona ngempela iPython. Kuvele ukuthi ngaphandle kwebhokisi kukuvumela ukuthi uguquguquke kakhulu nge-bytecode. Ivumela ukuthi ihunyushwe kalula ibe amanani wedesimali, izintambo kanye ne-hex - i.e. yilokhu esikudingayo ngempela ukuqonda ukwakheka kwephakheji. Ngakho, ngokwesibonelo, ungathola uhla lwamabhayithi ku-HEX kanye namabhayithi nje:

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

, pakisha amabhayithi esakhiweni:

res["amafulegi"]=iphakethe('BB',idatha[10],idatha[11])

Thola i-IP esakhiweni:

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

Futhi ngokuphambene:

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

Yilokho kuphela okwamanje 😉

Source: www.habr.com

Engeza amazwana