Injongo yale projekthi yayikuku:
- Ukufunda nge-DHCP kwinethiwekhi ye-IPv4
- Ukufunda iPython (ngaphezulu kancinci kunokuqala 😉)
- indawo yomncedisi
DB2DHCP (ifolokhwe yam), yoqoboapha , esiba nzima ngakumbi nangakumbi ukuhlanganisela i-OS entsha. Kwaye andithandi ukuba yinto yokubini ukuba akukho ndlela "yokutshintsha ngoku" - ukufumana iseva ye-DHCP esebenzayo ngokukwazi ukukhetha idilesi ye-IP yomrhumeli usebenzisa i-mac yombhalisi okanye utshintshe i-mac + port ukudibanisa (Ukhetho 82)
- ukubhala enye ibhayisekile (Oh! lo ngumsebenzi endiwuthandayo)
- ukufumana izimvo malunga nokubamba kwakho iklabhu kuHabrahabr (okanye ngcono, isimemo) 😉
Isiphumo: iyasebenza 😉 Ivavanywe kwiFreeBSD kunye no-Ubuntu OS. Ngokwethiyori, ikhowudi inokucelwa ukuba isebenze phantsi kwayo nayiphi na i-OS, kuba Kubonakala ngathi akukho zibophelelo ezithile kwikhowudi.
Ngononophelo! Kuninzi okusezayo.
Ikhonkco kwindawo yokugcina abantu abangafundanga
Inkqubo yokufaka, ukuqwalasela kunye nokusebenzisa umphumo "wokufunda i-hardware" iphantsi kakhulu, kwaye ke ithiyori encinci malunga neprotocol yeDHCP. Ngokwam. Kwaye kwimbali 😉
Ithiyori encinci
Yintoni iDHCP
Le yinkqubo yenethiwekhi evumela isixhobo ukuba sifumane idilesi ye-IP (kunye nezinye iiparameters ezifana nesango, i-DNS, njl.) kwiseva ye-DHCP. Iipakethi zitshintshwa kusetyenziswa iprotocol ye-UDP. Umgaqo jikelele wokusebenza kwesixhobo xa ucela iiparamitha zenethiwekhi ngolu hlobo lulandelayo:
- Isixhobo (umxhasi) sithumela isicelo sosasazo lwe-UDP (DHCPDISCOVER) kuyo yonke inethiwekhi ngesicelo "kaloku, umntu undinike idilesi ye-IP." Ngaphezu koko, ngokuqhelekileyo (kodwa akusoloko) isicelo senzeka kwi-port 68 (umthombo), kwaye indawo ekuyiwa kuyo yi-port 67 (indawo yokuya kuyo). Ezinye izixhobo zikwathumela iipakethi ukusuka kwizibuko 67. Idilesi ye-MAC yesixhobo somthengi ibandakanyiwe ngaphakathi kwipakethi ye-DHCPDISCOVER.
- Zonke iiseva ze-DHCP ezikuthungelwano (kwaye zisenokuba zininzi kuzo) zenza umnikelo we-DHCPOFFER ngoseto lwenethiwekhi yesixhobo esithumele i-DHCPDISCOVER, kwaye sisasaze kwinethiwekhi. Ukuchongwa ukuba le pakethi ilungiselelwe ukuba bani kusekelwe kwidilesi ye-MAC yomthengi enikwe ngaphambili kwisicelo se-DHCPDISCOVER.
- Umxhasi wamkela iipakethi kunye neziphakamiso zezicwangciso zenethiwekhi, ukhetha eyona nto inomdla kakhulu (imilinganiselo ingahluka, umzekelo, ixesha lokuhanjiswa kwepakethi, inani leendlela eziphakathi), kwaye yenza "isicelo esisemthethweni" i-DHCPREQUEST kunye nezicwangciso zenethiwekhi. ukusuka kwiseva yeDHCP ithanda. Kule meko, ipakethi iya kwiseva ethile yeDHCP.
- Umncedisi ofumene i DHCPREQUEST ithumela i DHCPACK ifomathi yepakethe, apho iphinda idwelise izicwangciso zenethiwekhi ezijoliswe kulo mxhasi.
Ukongezelela, kukho iipakethi ze-DHCPINFORM ezivela kumxhasi, kunye nenjongo yokwazisa umncedisi we-DHCP ukuba "umxhasi uyaphila" kwaye usebenzisa izicwangciso zenethiwekhi ezikhutshiweyo. Ekuphunyezweni komncedisi, ezi pakethi azihoywa.
Ubume bepakethi
Ngokubanzi, isakhelo sepakethe ye-Ethernet ijongeka ngolu hlobo:
Kwimeko yethu, siya kuqwalasela kuphela idatha ngokuthe ngqo kwimixholo yepakethe ye-UDP, ngaphandle kweentloko zeprotocol ze-OSI, ezizezi: isakhiwo seDHCP:
I-DHCPDISCOVER
Ngoko, inkqubo yokufumana idilesi ye-IP yesixhobo iqala ngomthengi we-DHCP ukuthumela isicelo sokusasazwa kwi-port 68 ukuya kwi-255.255.255.255:67. Kule phakheji, umxhasi uquka idilesi yakhe ye-MAC, kunye nokuba yintoni kanye afuna ukuyifumana kwiseva ye-DHCP. Ulwakhiwo lwephakheji luchazwe kwitheyibhile engezantsi.
Itheyibhile yeSakhiwo sePakethe yeDHCPDISCOVER
Isikhundla kwiphakheji
Igama lexabiso
Umzekelo:
Intshayelelo
Byte
Inkcazo
1
Isicelo sokuQalisa
1
hex
1
Uhlobo lomyalezo. I-1 - isicelo esivela kumxhasi ukuya kumncedisi, i-2 - impendulo evela kumncedisi ukuya kumxhasi
2
Uhlobo lwe-Hardware
1
hex
1
Uhlobo lwedilesi ye-hardware, kule protocol 1 - MAC
3
Ubude beedilesi zehardware
6
hex
1
Ubude bedilesi ye-MAC yesixhobo
4
Hops
1
hex
1
Inani leendlela eziphakathi
5
Intengiselwano ID
23:cf:de:1d
hex
4
Isichongi sentengiselwano esisodwa. Iveliswe ngumxhasi ekuqaleni komsebenzi wesicelo
7
Okwesibini kuphelile
0
hex
4
Ixesha kwimizuzwana ukusuka ekuqaleni kwenkqubo yokufumana idilesi
9
Iiflegi zeBoot
0
hex
2
Iiflegi ezithile ezinokusetwa ukubonisa iiparamitha zeprotocol
11
Idilesi ye-IP yomxhasi
0.0.0.0
Umgca
4
Idilesi ye-IP yomxhasi (ukuba ikhona)
15
Idilesi ye-IP yomxhasi wakho
0.0.0.0
Umgca
4
Idilesi ye-IP enikezelwa ngumncedisi (ukuba ikhona)
19
Idilesi ye-IP elandelayo yeseva
0.0.0.0
Umgca
4
Idilesi ye-IP yomncedisi (ukuba iyaziwa)
23
Idilesi ye-IP yearhente yokudlulisa
172.16.114.41
Umgca
4
Idilesi ye-IP ye-arhente yokudlulisela (umzekelo, iswitshi)
27
Idilesi yeMAC yomthengi
14:d6:4d:a7:c9:55
hex
6
Idilesi ye-MAC yomthumeli wepakethi (umxhasi)
31
Idilesi yezixhobo zentsimbi yomxhasi
hex
10
Isihlalo esigciniweyo. Ngokuqhelekileyo izaliswe ngo-zero
41
Igama lomncedisi
Umgca
64
Igama leseva yeDHCP. Ngokuqhelekileyo ayidluliselwa
105
Qalisa igama lefayile
Umgca
128
Igama lefayile kumncedisi osetyenziswa zizitishi ezingenadiski xa uqala
235
Ikhukhi zomlingo
63: 82: 53: 63
hex
4
"Umlingo" inombolo, njengoko, kubandakanywa. ungamisela ukuba le pakethi yeyeprotocol yeDHCP
Iinketho zeDHCP. Ingaya ngayo nayiphi na iodolo
236
Inombolo yokhetho
53
Dec
1
Inketho ye-53, echaza uhlobo lwepakethe yeDHCP
1 - I-DHCPDISCOVER
3 - DHCPREQUEST
2 - DHCPOFFER
5 - I-DHCPACK
8 - DHCPINFORM
Ubude bokukhetha
1
Dec
1
Ixabiso lokukhetha
1
Dec
1
Inombolo yokhetho
50
Dec
1
Yeyiphi idilesi ye-IP umxhasi afuna ukuyifumana?
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
172.16.134.61
Umgca
4
Inombolo yokhetho
55
1
Iiparamitha zothungelwano ezicelwe ngumxhasi. Ukuqamba kunokwahluka
01 — Imaski yenethiwekhi
03 - Isango
06-DNS
oc - Igama lomamkeli
0f - igama lesizinda senethiwekhi
1c - idilesi yesicelo sosasazo (usasazo)
42 - Igama leseva ye-TFTP
79 - Indlela engatshintshiyo yeClassless
Ubude bokukhetha
8
1
Ixabiso lokukhetha
01:03:06:0c:0f:1c:42:79
8
Inombolo yokhetho
82
Dec
Inketho ye-82, ehambisa idilesi ye-MAC yesixhobo esiphindayo kunye namanye amaxabiso ongezelelweyo.
Ngokuqhelekileyo, eli lizibuko lokutshintsha apho isiphelo se-DHCP client sisebenza.Olu khetho luqulethe iiparamitha ezongezelelweyo.I-byte yokuqala linani le "suboption", okwesibini ubude bayo, ngoko ixabiso layo.
Kule meko, kukhetho lwama-82, ukhetho olusezantsi lubekwe:
I-Agent Circuit ID = 00:04:00:01:00:04, apho iibytes ezimbini zokugqibela ziyi-DHCP client port apho isicelo savela khona.
I-Agent Remote ID = 00:06:c8:be:19:93:11:48 - Idilesi ye-MAC yesixhobo sokuphinda i-DHCP
Ubude bokukhetha
18
Dec
Ixabiso lokukhetha
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
hex
Ukuphela kwephakheji
255
Dec
1
I-255 ibonisa ukuphela kwepakethi
I-DHCPOFFER
Ngokukhawuleza ukuba umncedisi ufumana ipakethi ye-DHCPDISCOVER kwaye ukuba ibona ukuba inokunika umxhasi into ethile ukusuka kulowo uceliweyo, ngoko ivelisa impendulo kuyo - i-DHCPDISCOVER. Impendulo ithunyelwa kwi-port "ukusuka apho ivela khona", ngokusasazwa, kuba ngalo mzuzu, umxhasi akakabi nayo idilesi ye-IP, ngoko ke unokwamkela ipakethi kuphela ukuba ithunyelwe ngosasazo. Umxhasi uyaqonda ukuba le yiphakheji yakhe ngedilesi yakhe ye-MAC ngaphakathi kwiphakheji, kunye nenombolo yentengiselwano ayivelisayo ngexesha lokudalwa kwephakheji yokuqala.
Itheyibhile yeSakhiwo sePakethe yeDHCPOFFER
Isikhundla kwiphakheji
Igama lexabiso (eliqhelekileyo)
Umzekelo:
Intshayelelo
Byte
Inkcazo
1
Isicelo sokuQalisa
1
hex
1
Uhlobo lomyalezo. I-1 - isicelo esivela kumxhasi ukuya kumncedisi, i-2 - impendulo evela kumncedisi ukuya kumxhasi
2
Uhlobo lwe-Hardware
1
hex
1
Uhlobo lwedilesi ye-hardware, kule protocol 1 - MAC
3
Ubude beedilesi zehardware
6
hex
1
Ubude bedilesi ye-MAC yesixhobo
4
Hops
1
hex
1
Inani leendlela eziphakathi
5
Intengiselwano ID
23:cf:de:1d
hex
4
Isichongi sentengiselwano esisodwa. Iveliswe ngumxhasi ekuqaleni komsebenzi wesicelo
7
Okwesibini kuphelile
0
hex
4
Ixesha kwimizuzwana ukusuka ekuqaleni kwenkqubo yokufumana idilesi
9
Iiflegi zeBoot
0
hex
2
Iiflegi ezithile ezinokusetwa ukubonisa iiparamitha zeprotocol. Kule meko, u-0 uthetha uhlobo lwesicelo se-Unicast
11
Idilesi ye-IP yomxhasi
0.0.0.0
Umgca
4
Idilesi ye-IP yomxhasi (ukuba ikhona)
15
Idilesi ye-IP yomxhasi wakho
172.16.134.61
Umgca
4
Idilesi ye-IP enikezelwa ngumncedisi (ukuba ikhona)
19
Idilesi ye-IP elandelayo yeseva
0.0.0.0
Umgca
4
Idilesi ye-IP yomncedisi (ukuba iyaziwa)
23
Idilesi ye-IP yearhente yokudlulisa
172.16.114.41
Umgca
4
Idilesi ye-IP ye-arhente yokudlulisela (umzekelo, iswitshi)
27
Idilesi yeMAC yomthengi
14:d6:4d:a7:c9:55
hex
6
Idilesi ye-MAC yomthumeli wepakethi (umxhasi)
31
Idilesi yezixhobo zentsimbi yomxhasi
hex
10
Isihlalo esigciniweyo. Ngokuqhelekileyo izaliswe ngo-zero
41
Igama lomncedisi
Umgca
64
Igama leseva yeDHCP. Ngokuqhelekileyo ayidluliselwa
105
Qalisa igama lefayile
Umgca
128
Igama lefayile kumncedisi osetyenziswa zizitishi ezingenadiski xa uqala
235
Ikhukhi zomlingo
63: 82: 53: 63
hex
4
"Umlingo" inombolo, njengoko, kubandakanywa. ungamisela ukuba le pakethi yeyeprotocol yeDHCP
Iinketho zeDHCP. Ingaya ngayo nayiphi na iodolo
236
Inombolo yokhetho
53
Dec
1
Inketho ye-53, echaza uhlobo lwepakethe ye-DHCP 2 - DHCPOFFER
Ubude bokukhetha
1
Dec
1
Ixabiso lokukhetha
2
Dec
1
Inombolo yokhetho
1
Dec
1
Inketho yokubonelela umxhasi weDHCP imaski yenethiwekhi
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
255.255.224.0
Umgca
4
Inombolo yokhetho
3
Dec
1
Ukhetho lokubonelela umxhasi weDHCP isango elimiselweyo
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
172.16.12.1
Umgca
4
Inombolo yokhetho
6
Dec
1
Inketho yokunikezela nge-DHCP kumthengi we-DNS
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
8.8.8.8
Umgca
4
Inombolo yokhetho
51
Dec
1
Ubomi beeparamitha zenethiwekhi ezikhutshiweyo ngemizuzwana, emva koko umthengi weDHCP kufuneka azicele kwakhona
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
86400
Dec
4
Inombolo yokhetho
82
Dec
1
UKhetho lwama-82, luphinda okuze ku-DHCPDISCOVER
Ubude bokukhetha
18
Dec
1
Ixabiso lokukhetha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d: mz
Dec
18
Ukuphela kwephakheji
255
Dec
1
I-255 ibonisa ukuphela kwepakethi
ISICELO
Emva kokuba umxhasi efumene i-DHCPOFFER, wenza ipakethi ecela iiparameters zenethiwekhi kungekhona kuzo zonke iiseva ze-DHCP kwinethiwekhi, kodwa kuphela kwenye enye, i-DHCPOFFER yakhe inikezela "ithande" kakhulu. Iikhrayitheriya "ezifanayo" zinokwahluka kwaye zixhomekeke ekuphunyezweni kwe-DHCP yomxhasi. Umamkeli wesicelo uchazwe kusetyenziswa idilesi ye-MAC yomncedisi we-DHCP. Kwakhona, ipakethe ye-DHCPREQUEST ingathunyelwa ngumxhasi ngaphandle kokuqala ukuvelisa i-DHCPDISCOVER, ukuba idilesi ye-IP yomncedisi sele ifunyenwe ngaphambili.
Itheyibhile yeSakhiwo sePakethe yeDHCPREQUEST
Isikhundla kwiphakheji
Igama lexabiso (eliqhelekileyo)
Umzekelo:
Intshayelelo
Byte
Inkcazo
1
Isicelo sokuQalisa
1
hex
1
Uhlobo lomyalezo. I-1 - isicelo esivela kumxhasi ukuya kumncedisi, i-2 - impendulo evela kumncedisi ukuya kumxhasi
2
Uhlobo lwe-Hardware
1
hex
1
Uhlobo lwedilesi ye-hardware, kule protocol 1 - MAC
3
Ubude beedilesi zehardware
6
hex
1
Ubude bedilesi ye-MAC yesixhobo
4
Hops
1
hex
1
Inani leendlela eziphakathi
5
Intengiselwano ID
23:cf:de:1d
hex
4
Isichongi sentengiselwano esisodwa. Iveliswe ngumxhasi ekuqaleni komsebenzi wesicelo
7
Okwesibini kuphelile
0
hex
4
Ixesha kwimizuzwana ukusuka ekuqaleni kwenkqubo yokufumana idilesi
9
Iiflegi zeBoot
8000
hex
2
Iiflegi ezithile ezinokusetwa ukubonisa iiparamitha zeprotocol. Kule meko, "usasazo" lusetiwe
11
Idilesi ye-IP yomxhasi
0.0.0.0
Umgca
4
Idilesi ye-IP yomxhasi (ukuba ikhona)
15
Idilesi ye-IP yomxhasi wakho
172.16.134.61
Umgca
4
Idilesi ye-IP enikezelwa ngumncedisi (ukuba ikhona)
19
Idilesi ye-IP elandelayo yeseva
0.0.0.0
Umgca
4
Idilesi ye-IP yomncedisi (ukuba iyaziwa)
23
Idilesi ye-IP yearhente yokudlulisa
172.16.114.41
Umgca
4
Idilesi ye-IP ye-arhente yokudlulisela (umzekelo, iswitshi)
27
Idilesi yeMAC yomthengi
14:d6:4d:a7:c9:55
hex
6
Idilesi ye-MAC yomthumeli wepakethi (umxhasi)
31
Idilesi yezixhobo zentsimbi yomxhasi
hex
10
Isihlalo esigciniweyo. Ngokuqhelekileyo izaliswe ngo-zero
41
Igama lomncedisi
Umgca
64
Igama leseva yeDHCP. Ngokuqhelekileyo ayidluliselwa
105
Qalisa igama lefayile
Umgca
128
Igama lefayile kumncedisi osetyenziswa zizitishi ezingenadiski xa uqala
235
Ikhukhi zomlingo
63: 82: 53: 63
hex
4
"Umlingo" inombolo, njengoko, kubandakanywa. ungamisela ukuba le pakethi yeyeprotocol yeDHCP
Iinketho zeDHCP. Ingaya ngayo nayiphi na iodolo
236
Inombolo yokhetho
53
Dec
3
Inketho ye-53, echaza uhlobo lwepakethe ye-DHCP 3 - DHCPREQUEST
Ubude bokukhetha
1
Dec
1
Ixabiso lokukhetha
3
Dec
1
Inombolo yokhetho
61
Dec
1
I-ID yoMthengi: 01 (ye-Ehernet) + idilesi yomxhasi we-MAC
Ubude bokukhetha
7
Dec
1
Ixabiso lokukhetha
01:2c:ab:25:ff:72:a6
hex
7
Inombolo yokhetho
60
Dec
"Isichongi seklasi yomthengisi". Kwimeko yam, ibika i-DHCP client version. Mhlawumbi ezinye izixhobo zibuyisela into eyahlukileyo. IiWindows umzekelo ingxelo MSFT 5.0
Ubude bokukhetha
11
Dec
Ixabiso lokukhetha
udhcp 0.9.8
Umgca
Inombolo yokhetho
55
1
Iiparamitha zothungelwano ezicelwe ngumxhasi. Ukuqamba kunokwahluka
01 — Imaski yenethiwekhi
03 - Isango
06-DNS
oc - Igama lomamkeli
0f - igama lesizinda senethiwekhi
1c - idilesi yesicelo sosasazo (usasazo)
42 - Igama leseva ye-TFTP
79 - Indlela engatshintshiyo yeClassless
Ubude bokukhetha
8
1
Ixabiso lokukhetha
01:03:06:0c:0f:1c:42:79
8
Inombolo yokhetho
82
Dec
1
UKhetho lwama-82, luphinda okuze ku-DHCPDISCOVER
Ubude bokukhetha
18
Dec
1
Ixabiso lokukhetha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d: mz
Dec
18
Ukuphela kwephakheji
255
Dec
1
I-255 ibonisa ukuphela kwepakethi
I-DHCPACK
Njengobungqina bokuba "ewe, kunjalo, le yidilesi yakho ye-IP, kwaye andiyi kunika nabani na ongomnye" kwiseva ye-DHCP, ipakethe kwifomathi ye-DHCPACK esuka kumncedisi ukuya kumxhasi okhonzayo. Ithunyelwa kusasazo njengezinye iipakethi. Nangona, kwikhowudi engezantsi yomncedisi we-DHCP ophunyezwe kwi-Python, nje ukuba, ndiphinda ndiphindaphinda nayiphi na isicelo sokusasazwa ngokuthumela ipakethe kwi-IP yomxhasi othile, ukuba sele iyaziwa. Ngaphezu koko, umncedisi we-DHCP akakhathali konke konke ukuba ipakethi yeDHCPACK ifikelele kumxhasi. Ukuba umxhasi akayifumani i-DHCPACK, emva kwexesha iphinda i-DHCPREQUEST
Itheyibhile yeSakhiwo sePakethe yeDHCPACK
Isikhundla kwiphakheji
Igama lexabiso (eliqhelekileyo)
Umzekelo:
Intshayelelo
Byte
Inkcazo
1
Isicelo sokuQalisa
2
hex
1
Uhlobo lomyalezo. I-1 - isicelo esivela kumxhasi ukuya kumncedisi, i-2 - impendulo evela kumncedisi ukuya kumxhasi
2
Uhlobo lwe-Hardware
1
hex
1
Uhlobo lwedilesi ye-hardware, kule protocol 1 - MAC
3
Ubude beedilesi zehardware
6
hex
1
Ubude bedilesi ye-MAC yesixhobo
4
Hops
1
hex
1
Inani leendlela eziphakathi
5
Intengiselwano ID
23:cf:de:1d
hex
4
Isichongi sentengiselwano esisodwa. Iveliswe ngumxhasi ekuqaleni komsebenzi wesicelo
7
Okwesibini kuphelile
0
hex
4
Ixesha kwimizuzwana ukusuka ekuqaleni kwenkqubo yokufumana idilesi
9
Iiflegi zeBoot
8000
hex
2
Iiflegi ezithile ezinokusetwa ukubonisa iiparamitha zeprotocol. Kule meko, "usasazo" lusetiwe
11
Idilesi ye-IP yomxhasi
0.0.0.0
Umgca
4
Idilesi ye-IP yomxhasi (ukuba ikhona)
15
Idilesi ye-IP yomxhasi wakho
172.16.134.61
Umgca
4
Idilesi ye-IP enikezelwa ngumncedisi (ukuba ikhona)
19
Idilesi ye-IP elandelayo yeseva
0.0.0.0
Umgca
4
Idilesi ye-IP yomncedisi (ukuba iyaziwa)
23
Idilesi ye-IP yearhente yokudlulisa
172.16.114.41
Umgca
4
Idilesi ye-IP ye-arhente yokudlulisela (umzekelo, iswitshi)
27
Idilesi yeMAC yomthengi
14:d6:4d:a7:c9:55
hex
6
Idilesi ye-MAC yomthumeli wepakethi (umxhasi)
31
Idilesi yezixhobo zentsimbi yomxhasi
hex
10
Isihlalo esigciniweyo. Ngokuqhelekileyo izaliswe ngo-zero
41
Igama lomncedisi
Umgca
64
Igama leseva yeDHCP. Ngokuqhelekileyo ayidluliselwa
105
Qalisa igama lefayile
Umgca
128
Igama lefayile kumncedisi osetyenziswa zizitishi ezingenadiski xa uqala
235
Ikhukhi zomlingo
63: 82: 53: 63
hex
4
"Umlingo" inombolo, njengoko, kubandakanywa. ungamisela ukuba le pakethi yeyeprotocol yeDHCP
Iinketho zeDHCP. Ingaya ngayo nayiphi na iodolo
236
Inombolo yokhetho
53
Dec
3
Inketho ye-53, echaza uhlobo lwepakethe ye-DHCP 5 - DHCPACK
Ubude bokukhetha
1
Dec
1
Ixabiso lokukhetha
5
Dec
1
Inombolo yokhetho
1
Dec
1
Inketho yokubonelela umxhasi weDHCP imaski yenethiwekhi
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
255.255.224.0
Umgca
4
Inombolo yokhetho
3
Dec
1
Ukhetho lokubonelela umxhasi weDHCP isango elimiselweyo
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
172.16.12.1
Umgca
4
Inombolo yokhetho
6
Dec
1
Inketho yokunikezela nge-DHCP kumthengi we-DNS
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
8.8.8.8
Umgca
4
Inombolo yokhetho
51
Dec
1
Ubomi beeparamitha zenethiwekhi ezikhutshiweyo ngemizuzwana, emva koko umthengi weDHCP kufuneka azicele kwakhona
Ubude bokukhetha
4
Dec
1
Ixabiso lokukhetha
86400
Dec
4
Inombolo yokhetho
82
Dec
1
UKhetho lwama-82, luphinda okuze ku-DHCPDISCOVER
Ubude bokukhetha
18
Dec
1
Ixabiso lokukhetha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d: mz
Dec
18
Ukuphela kwephakheji
255
Dec
1
I-255 ibonisa ukuphela kwepakethi
isicwangciso
Ufakelo lubandakanya ukufaka iimodyuli zepython eziyimfuneko emsebenzini. Kucingelwa ukuba i-MySQL sele ifakiwe kwaye iqwalaselwe.
FreeBSD
pkg faka ipython3 python3 -m surepip pip3 faka i-mysql-connector
Ubuntu
sudo apt-fumana ukufaka ipython3 sudo apt-fumana ukufaka ipip3 sudo pip3 faka i-mysql-isidibanisi
Senza i-database ye-MySQL, layisha i-pydhcp.sql yokulahla kuyo, kwaye ulungise ifayile yokucwangcisa.
Isimo
Zonke iisetingi zeseva zikwifayile ye-xml. Ifayile yeReferensi:
1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 yasekhaya uvavanyo 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 apho upper(mac)=upper('{option_3_AgentRemoteId_hex}') kunye upper(port)=upper('{option_1_AgentCircuitId_port_hex}') khetha ip,imask,router,dns kubasebenzisi apho upper(mac)=upper('{sw_mac}') kunye upper(port)=upper('{sw_port82}') khetha ip,mask,router,dns kubasebenzisi apho upper(mac)=upper('{ClientMacAddress}') faka kwimbali (id,dt,mac,ip,comment) amaxabiso (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')
Ngoku kwiinkcukacha ezithe vetshe kwiithegi:
Icandelo le-dhcpserver lichaza izicwangciso ezisisiseko zokuqalisa umncedisi, ezizezi:
- umamkeli - yeyiphi idilesi ye-IP umncedisi ayimameleyo kwizibuko 67
- usasazo - apho i-ip lusasazo lwe-DHCPOFFER kunye ne-DHCPACK
- Iseva ye-DHCPS - yintoni i-ip yomncedisi we-DHCP
- Ixesha lokuqeshwa kwe-LeaseTime ledilesi ye-IP ekhutshiweyo
- I-ThreadLimit - zingaphi iintambo ezisebenza ngaxeshanye ukucubungula iipakethi ze-UDP ezingenayo kwi-port 67. Ifanele ukunceda kwiiprojekthi zomthwalo ophezulu 😉
- defaultMask,defaultRouter,defaultDNS - yintoni enikezelwa kubabhalisi ngokungagqibekanga ukuba iIP ifunyenwe kwisiseko sedatha, kodwa iiparameters ezongezelelweyo azikhankanywanga kuyo.
icandelo le-mysql:
umamkeli, igama lomsebenzisi, igama lokugqitha, igama lesiseko - yonke into iyathetha ngokwayo. Ulwakhiwo oluqikelelweyo lwesiseko sedatha lufakwe kwi
Icandelo lombuzo: izicelo zokufumana i-OFFER/ACK zichazwe apha:
- offer_count - inani lemigca enezicelo ezibuyisela iziphumo njenge ip,mask,router,dns
- offer_n - umtya wombuzo. Ukuba imbuyekezo ayinanto, yenza esi sicelo silandelayo
- history_sql - umbuzo obhalayo, umzekelo, "kwimbali yogunyaziso" kumbhalisi
Izicelo zinokubandakanya naziphi na izinto eziguquguqukayo ezivela kwicandelo lokukhetha okanye ukhetho oluvela kwiprotocol yeDHCP.
icandelo leenketho. Apha kulapho ifumana umdla ngakumbi. Apha singenza izinto eziguquguqukayo esinokuzisebenzisa kamva kwicandelo lombuzo.
Umzekelo:
option_82_hex:sw_port1:20:22
, lo mgca womyalelo uthatha umgca opheleleyo oze kwisicelo se-DHCP ukhetho 82, kwifomathi ye-hex, kuluhlu olusuka kwi-20 ukuya kwi-22 bytes equkiweyo kwaye ibeka kwi-sw_port1 entsha (tshintsha izibuko ukusuka apho isicelo sivela khona)
option_82_hex:sw_mac:26:40
, chaza i-sw_mac variable, ithatha i-hex kuluhlu lwe-26:40
Ungabona zonke iinketho ezinokuthi zisetyenziswe kwimibuzo ngokuqala umncedisi nge- -d switch. Siza kubona into efana nale log:
--ipakethi ye-DHCPINFORM ifike kwi-port 67, ukusuka ku-0025224ad764, b'x91xa5xe0xa3xa5xa9-x8fx8a', ('172.30.114.25', 68) {'ClientMacAddress': '0025224ad764', 'ClientMacAddressByte': b'x00%"Jxd7d', 'Uhlobo': 'Ethernet', 'Igama Lomamkeli': b'x91xa5xe0xa3xa5xa9-x8fx8a', 'ReqListDNS': Yinyani, 'ReqListDomainName': Yinyani, 'ReqListPerfowmRouterDiscover': Yinyani, 'ReqListRouter': Yinyani, 'ReqListStaticRoute': Yinyani, 'ReqListSubnetMask': Yinyani, 'ReqListVendorSpecInfo': 43, 'Idilesi ye-Ip eceliweyo': '0.0.0.0', 'Umthengisi': b'MSFT 5.0', 'chaddr': '0025224ad764', 'ciaddr': '172.30.128.13', 'iiflegi': b'x00x00', 'giaddr': '172.30.114.25', 'gpoz': 308, 'ntle': 6, 'ihops': 1, 'htype': 'MAC', 'icookie_yomlingo': b'cx82Sc', 'op': 'DHCPINFORM', 'Ukhetho12': 12, 'Ukhetho53': 53, 'Ukhetho55': 55, 'Ukhetho60': 60, 'Ukhetho61': 61, 'Ukhetho82': 82, 'option_82_byte': b'x12x01x06x00x04x00x01x00x06x02x08x00' b'x06x00x1eXx9exb2xad', 'option_82_hex': '12010600040001000602080006001e589eb2ad', 'option_82_len': 18, 'option_82_str': "b'x12x01x06x00x04x00x01x00x06x02x08x00x06x00x1eXx9exb2xad'", 'isiphumo': Bubuxoki, 'imizuzwana': 768, 'siaddr': '0.0.0.0', 'sw_mac': '001e589eb2ad', 'sw_port1': '06', 'xidbyte': b'<x89}x8c', 'xidhex': '3c897d8c', 'yiaddr': '0.0.0.0'}
Ngokufanelekileyo, sinokusonga nayiphi na into eguquguqukayo kwi- {} kwaye iya kusetyenziswa kumbuzo we-SQL.
Masirekhode kwimbali ukuba umxhasi ufumene idilesi ye-IP:
Ukuqala kweseva
./pydhcpdb.py -d -c config.xml
— d console imo yokuphuma DEBUG
- c ifayile yoqwalaselo
Ukuxubusha
Kwaye ngoku iinkcukacha ezingakumbi malunga nokuphumeza iseva kwiPython. Yintlungu. I-Python yafundwa kwimpukane. Amaxesha amaninzi enziwa ngendlela ethi "wow, ngandlela thile ndiyenze yasebenza." Ayilungiswanga kwaphela, kwaye ishiywe kule fomu ikakhulu ngenxa yamava amancinci kuphuhliso lwepython. Ndiya kuhlala kwimiba enomdla kakhulu yokuphunyezwa komncedisi kwi "code".
XML isahluli sefayile yoqwalaselo
Imodyuli eqhelekileyo yePython xml.dom iyasetyenziswa. Kubonakala kulula, kodwa ngexesha lokuphunyezwa bekukho ukunqongophala okucacileyo kwamaxwebhu acacileyo kunye nemizekelo kuthungelwano usebenzisa le modyuli.
umthi = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") yeelem kwi-mconfig: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["mysql_igama lomsebenzisi"]=elem.getElementsByTagName("igama lomsebenzisi")[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") yeelem kwi-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") yeelem kwi qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.data ngenani kuluhlu (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("iinketho") yeelem kwiinketho: node=elem.getElementsByTagName("ukhetho") kwiinketho kwinowudi: iinkethoMod.append(options.firstChild.data)
Multithreading
Okungaqhelekanga ngokwaneleyo, ukuphindaphinda okuninzi kwiPython kuphunyezwa ngokucacileyo kwaye ngokulula.
def PacketWork(data,addr): ... # ukuphunyezwa kokwahlulahlula ipakethi engenayo kunye nokuphendula kuyo ... ngelixa Yinyani: data, addr = udp_socket.recvfrom(1024) # elinde ipakethi ye-UDP umsonto = ukuthunga.Umsonto(thagethi=PacketWork, args=(data,addr,)).start() # njengoko yavelayo - siqalisa umsebenzi wePacketWork ochazwe ngaphambili ngeeparamitha ngasemva. ngelixa uthungela.active_count() >gconfig["dhcp_ThreadLimit"]: ixesha.yolala(1) # ukuba inani lemisonto esele libaleka likhulu kuneseto, linda de zibe mbalwa.
Fumana / thumela ipakethe yeDHCP
Ukuze uthintele iipakethi ze-UDP eziza ngekhadi lenethiwekhi, kufuneka "unyuse" isokhethi:
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP) udp_socket.bind((gconfig["dhcp_host"],67))
, apho zikhoyo iiflegi:
- AF_INET - ithetha ukuba ifomathi yedilesi iya kuba yi-IP: port. Kusenokubakho AF_UNIX - apho idilesi inikwe igama lefayile.
- I-SOCK_DGRAM - ithetha ukuba asamkeli "ipakethi eluhlaza", kodwa esele idlulile kwi-firewall, kunye nepakethi elungiswe kancinci. Ezo. sifumana kuphela ipakethe ye-UDP ngaphandle kwecandelo "lomzimba" le-UDP wrapper yepakethi. Ukuba usebenzisa i-SOCK_RAW iflegi, kuya kufuneka kwakhona ucazulule le "wrapper".
Ukuthumela ipakethi kunokufana nosasazo:
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #tshintsha isiseko kwimowudi yosasazo rz=udp_socket.sendto(packetack, (gconfig["broadcast"],68))
, nakwidilesi “apho iphakheji ivela khona”:
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # tshintshela kwimowudi "abaphulaphuli abaninzi" rz=udp_socket.sendto(packetack, addr)
, apho iSOL_SOCKET ithetha “inqanaba leprotocol” yokuseta iinketho,
, SO_BROADCAST inketho yokuba iphakheji yesigcina-ntloko "isasazwe"
,SO_REUSEADDR inketho itshintshela kwimowudi "abaphulaphuli abaninzi". Ngokwethiyori, akuyomfuneko kule meko, kodwa kwenye yeeseva zeFreeBSD endivavanye kuyo, ikhowudi ayizange isebenze ngaphandle kolu khetho.
Ukuhlaziya ipakethi yeDHCP
Kulapho ndandiyithanda kakhulu iPython. Kuyavela ukuba ngaphandle kwebhokisi kukuvumela ukuba ube bhetyebhetye kunye ne-bytecode. Ukuvumela ukuba iguqulelwe ngokulula kakhulu kumaxabiso edesimali, imitya kunye nehex - i.e. le yeyona nto siyidinga ngokwenene ukuqonda ubume bephakheji. Ke, umzekelo, ungafumana uluhlu lwee-bytes kwi-HEX kunye nee-bytes nje:
res["xidhex"]=data[4:8].hex() res["xidbyte"]=data[4:8]
, pakisha ii-bytes kwisakhiwo:
res["iiflegi"]=ipack('BB',data[10],data[11])
Fumana i-IP kwisakhiwo:
res["ciaddr"]=socket.inet_ntoa(ipack('BBBB',data[12],data[13],data[14],data[15]));
Kwaye ngokuchaseneyo:
res=res+socket.inet_pton(socket.AF_INET, gconfig["dhcp_Server"])
Kuphelele apho ngoku 😉
umthombo: www.habr.com