DHCP + Mysql seva ku Python

DHCP + Mysql seva ku Python

Cholinga cha polojekitiyi chinali:

  • Kuphunzira za DHCP pa netiweki ya IPv4
  • Kuphunzira Python (zochulukirapo pang'ono kuposa poyambira 😉)
  • kusintha kwa seva Chithunzi cha DB2DHCP (mphanda wanga), choyambirira apa, zomwe zikukhala zovuta kusonkhanitsa OS yatsopano. Ndipo sindimakonda kuti ndi binary kuti palibe njira "yosinthira pompano"
  • kupeza seva yogwira ntchito ya DHCP yokhala ndi mwayi wosankha adilesi ya IP ya olembetsa pogwiritsa ntchito mac kapena kusinthana kwa ma mac + doko (Njira 82)
  • kulemba njinga ina (O! iyi ndi ntchito yomwe ndimakonda)
  • kulandira ndemanga pazamasewera anu pa Habrahabr (kapena kuposa apo, kuyitanidwa) 😉

Zotsatira: imagwira ntchito 😉 Kuyesedwa pa FreeBSD ndi Ubuntu OS. Mwachidziwitso, code ikhoza kufunsidwa kuti igwire ntchito pansi pa OS iliyonse, chifukwa Zikuwoneka kuti palibe zomangira zenizeni mu code.
Mosamala! Pali zambiri zomwe zikubwera.

Lumikizani kunkhokwe kwa amateurs "khudzani moyo".

Njira yoyika, kukonza ndi kugwiritsa ntchito zotsatira za "kuphunzira hardware" ndi yotsika kwambiri, ndiyeno lingaliro laling'ono la DHCP protocol. Kwa ine ndekha. Ndipo kwa history 😉

Chiphunzitso chaching'ono

DHCP ndi chiyani

Iyi ndi protocol ya netiweki yomwe imalola chipangizo kudziwa adilesi yake ya IP (ndi magawo ena monga gateway, DNS, etc.) kuchokera pa seva ya DHCP. Mapaketi amasinthidwa pogwiritsa ntchito protocol ya UDP. Mfundo yaikulu yogwiritsira ntchito chipangizochi popempha magawo a intaneti ndi awa:

  1. Chipangizocho (kasitomala) chimatumiza pempho la UDP pawailesi (DHCPDISCOVER) pa netiweki yonse ndi pempho "chabwino, wina andipatse adilesi ya IP." Komanso, kawirikawiri (koma osati nthawi zonse) pempho limapezeka pa doko 68 (gwero), ndipo kopita ndi doko 67 (kopita). Zida zina zimatumizanso mapaketi kuchokera ku port 67. Adilesi ya MAC ya chipangizo cha kasitomala ikuphatikizidwa mkati mwa phukusi la DHCPDISCOVER.
  2. Ma seva onse a DHCP omwe ali pa netiweki (ndipo pakhoza kukhala angapo a iwo) amapanga chopereka cha DHCPOFFER chokhala ndi zoikamo za netiweki pa chipangizo chomwe chinatumiza DHCPDISCOVER, ndikuwulutsanso pa netiweki. Kuzindikirika kwa paketiyi kutengera adilesi ya MAC ya kasitomala yomwe yaperekedwa poyambirira pa pempho la DHCPDISCOVER.
  3. Makasitomala amavomereza mapaketi okhala ndi malingaliro pazosintha zapaintaneti, amasankha chowoneka bwino kwambiri (zoyenera kukhala zosiyana, mwachitsanzo, nthawi yoperekera paketi, kuchuluka kwa njira zapakatikati), ndikupanga "pempho lovomerezeka" DHCPREQUEST ndi zosintha zapaintaneti. kuchokera pa seva ya DHCP yomwe imakonda. Pankhaniyi, paketi imapita ku seva inayake ya DHCP.
  4. Seva yomwe idalandira DHCPREQUEST imatumiza paketi yamtundu wa DHCPACK, momwe imalembanso zokonda za netiweki zomwe zimapangidwira kasitomala uyu.

DHCP + Mysql seva ku Python

Kuonjezera apo, pali mapaketi a DHCPINFORM omwe amachokera kwa kasitomala, ndipo cholinga chake ndikudziwitsa seva ya DHCP kuti "kasitomala ali moyo" ndipo akugwiritsa ntchito zoikamo zoperekedwa. Pokhazikitsa seva iyi, mapaketi awa sanyalanyazidwa.

Mtundu wa paketi

Nthawi zambiri, chimango cha paketi ya Ethernet chimawoneka motere:

DHCP + Mysql seva ku Python

Kwa ife, tidzangoganizira zokhazokha zomwe zili mu paketi ya UDP, popanda mitu ya protocol ya OSI, yomwe ndi DHCP:

ZOCHITIKA

Chifukwa chake, njira yopezera adilesi ya IP ya chipangizo imayamba ndi kasitomala wa DHCP kutumiza pempho lowulutsa kuchokera ku doko 68 kupita ku 255.255.255.255:67. Mu phukusili, kasitomala amaphatikiza adilesi yake ya MAC, komanso zomwe akufuna kulandira kuchokera ku seva ya DHCP. Mapangidwe a phukusi akufotokozedwa mu tebulo ili m'munsimu.

DHCPDISCOVER Packet Structure Table

Malo mu phukusi
Dzina la mtengo
Chitsanzo:
Mau oyamba
Byte
Kufotokozera

1
Kufunsira kwa Boot
1
Hex
1
Mtundu wa uthenga. 1 - pempho kuchokera kwa kasitomala kupita ku seva, 2 - kuyankha kuchokera ku seva kupita kwa kasitomala

2
Mtundu wa Hardware
1
Hex
1
Mtundu wa adilesi ya hardware, mu protocol iyi 1 - MAC

3
Kutalika kwa ma adilesi a Hardware
6
Hex
1
Kutalika kwa adilesi ya MAC

4
Mphuno
1
Hex
1
Chiwerengero cha njira zapakatikati

5
ID Yogulitsa
23:cf:de:1d
Hex
4
Chizindikiritso cha zochitika zapadera. Wopangidwa ndi kasitomala kumayambiriro kwa ntchito yopempha

7
Chachiwiri chinadutsa
0
Hex
4
Nthawi mumasekondi kuyambira pachiyambi cha njira yopezera adilesi

9
Nsapato mbendera
0
Hex
2
Mbendera zina zomwe zitha kukhazikitsidwa kuti ziziwonetsa magawo a protocol

11
Adilesi ya IP ya kasitomala
0.0.0.0
Mzere
4
Adilesi ya IP ya kasitomala (ngati ilipo)

15
Adilesi ya IP ya kasitomala wanu
0.0.0.0
Mzere
4
Adilesi ya IP yoperekedwa ndi seva (ngati ilipo)

19
Kenako adilesi ya IP ya seva
0.0.0.0
Mzere
4
Adilesi ya IP ya seva (ngati imadziwika)

23
Adilesi ya IP ya wothandizira
172.16.114.41
Mzere
4
Adilesi ya IP ya wothandizira wotumizira (mwachitsanzo, chosinthira)

27
Adilesi ya Client MAC
14:d6:4d:a7:c9:55
Hex
6
Adilesi ya MAC ya wotumiza paketi (kasitomala)

31
Client hardware address padding
 
Hex
10
Mpando wosungidwa. Nthawi zambiri amadzazidwa ndi ziro

41
Dzina la seva
 
Mzere
64
Dzina la seva ya DHCP. Nthawi zambiri samafalitsidwa

105
Dzina la fayilo
 
Mzere
128
Dzina lafayilo pa seva yogwiritsidwa ntchito ndi ma diskless stations poyambira

235
Ma cookies amatsenga
63: 82: 53: 63
Hex
4
Nambala ya "Magic", malinga ndi zomwe, incl. mutha kudziwa kuti paketi iyi ndi ya protocol ya DHCP

Zosankha za DHCP. Ikhoza kupita mu dongosolo lililonse

236
Nambala yosankha
53
Dis
1
Njira 53, yomwe imatchula mtundu wa paketi ya DHCP

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

 
Njira kutalika
1
Dis
1

 
Mtengo wosankha
1
Dis
1

 
Nambala yosankha
50
Dis
1
Kodi kasitomala akufuna kulandira adilesi yanji ya IP?

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
172.16.134.61
Mzere
4

 
Nambala yosankha
55
 
1
Netiweki magawo ofunsidwa ndi kasitomala. Mapangidwe angasiyane

01 - Network mask
03 - Njira
06 - DNS
oc - Dzina la alendo
0f - dzina la domain domain
1c - adilesi yofunsira kuwulutsa (kuwulutsa)
42 - Dzina la seva ya TFTP
79 - Njira Yopanda Makhalidwe

 
Njira kutalika
8
 
1

 
Mtengo wosankha
01:03:06:0c:0f:1c:42:79
 
8

 
Nambala yosankha
82
Dis
 
Njira 82, yomwe imatumiza adilesi ya MAC ya chipangizo chobwereza ndi zina zowonjezera.

Nthawi zambiri, ili ndi doko la switch pomwe kasitomala wa DHCP amathamangira. Njirayi ili ndi magawo owonjezera. Yoyamba ndi nambala ya "suboption", yachiwiri ndi kutalika kwake, ndiye mtengo wake.

Pankhaniyi, muzosankha 82, zosankha zazing'ono zimayikidwa:
Agent Circuit ID = 00:04:00:01:00:04, pomwe ma byte awiri omaliza ndi doko la kasitomala la DHCP komwe pempholo linachokera.

Agent Remote ID = 00:06:c8:be:19:93:11:48 - Adilesi ya MAC ya chipangizo chobwereza DHCP

 
Njira kutalika
18
Dis
 

 
Mtengo wosankha
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
Hex
 

 
Kutha kwa phukusi
255
Dis
1
255 ikuyimira kutha kwa paketi

CHITSANZO

Seva ikangolandira paketi ya DHCPDISCOVER ndipo ngati iwona kuti ingapatse kasitomala kena kake kuchokera pa yomwe wapemphedwa, ndiye kuti imapanga yankho - DHCPDISCOVER. Yankho limatumizidwa ku doko "kuchokera kumene linachokera", pofalitsa, chifukwa pakadali pano, kasitomala alibe adilesi ya IP, chifukwa chake amatha kungovomereza paketiyo ngati itumizidwa ndi wailesi. Wogulayo amazindikira kuti iyi ndi phukusi lake ndi adilesi yake ya MAC mkati mwa phukusi, komanso nambala yamalonda yomwe amapanga panthawi yomwe phukusi loyamba limapangidwa.

DHCPOFFER Packet Structure Table

Malo mu phukusi
Dzina la mtengo (wamba)
Chitsanzo:
Mau oyamba
Byte
Kufotokozera

1
Kufunsira kwa Boot
1
Hex
1
Mtundu wa uthenga. 1 - pempho kuchokera kwa kasitomala kupita ku seva, 2 - kuyankha kuchokera ku seva kupita kwa kasitomala

2
Mtundu wa Hardware
1
Hex
1
Mtundu wa adilesi ya hardware, mu protocol iyi 1 - MAC

3
Kutalika kwa ma adilesi a Hardware
6
Hex
1
Kutalika kwa adilesi ya MAC

4
Mphuno
1
Hex
1
Chiwerengero cha njira zapakatikati

5
ID Yogulitsa
23:cf:de:1d
Hex
4
Chizindikiritso cha zochitika zapadera. Wopangidwa ndi kasitomala kumayambiriro kwa ntchito yopempha

7
Chachiwiri chinadutsa
0
Hex
4
Nthawi mumasekondi kuyambira pachiyambi cha njira yopezera adilesi

9
Nsapato mbendera
0
Hex
2
Mbendera zina zomwe zitha kukhazikitsidwa kuti ziziwonetsa magawo a protocol. Pankhaniyi, 0 amatanthauza mtundu wa pempho la Unicast

11
Adilesi ya IP ya kasitomala
0.0.0.0
Mzere
4
Adilesi ya IP ya kasitomala (ngati ilipo)

15
Adilesi ya IP ya kasitomala wanu
172.16.134.61
Mzere
4
Adilesi ya IP yoperekedwa ndi seva (ngati ilipo)

19
Kenako adilesi ya IP ya seva
0.0.0.0
Mzere
4
Adilesi ya IP ya seva (ngati imadziwika)

23
Adilesi ya IP ya wothandizira
172.16.114.41
Mzere
4
Adilesi ya IP ya wothandizira wotumizira (mwachitsanzo, chosinthira)

27
Adilesi ya Client MAC
14:d6:4d:a7:c9:55
Hex
6
Adilesi ya MAC ya wotumiza paketi (kasitomala)

31
Client hardware address padding
 
Hex
10
Mpando wosungidwa. Nthawi zambiri amadzazidwa ndi ziro

41
Dzina la seva
 
Mzere
64
Dzina la seva ya DHCP. Nthawi zambiri samafalitsidwa

105
Dzina la fayilo
 
Mzere
128
Dzina lafayilo pa seva yogwiritsidwa ntchito ndi ma diskless stations poyambira

235
Ma cookies amatsenga
63: 82: 53: 63
Hex
4
Nambala ya "Magic", malinga ndi zomwe, incl. mutha kudziwa kuti paketi iyi ndi ya protocol ya DHCP

Zosankha za DHCP. Ikhoza kupita mu dongosolo lililonse

236
Nambala yosankha
53
Dis
1
Njira 53, yomwe imatanthawuza mtundu wa paketi ya DHCP 2 - DHCPOFFER

 
Njira kutalika
1
Dis
1

 
Mtengo wosankha
2
Dis
1

 
Nambala yosankha
1
Dis
1
Njira yoperekera kasitomala wa DHCP chigoba cha netiweki

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
255.255.224.0
Mzere
4

 
Nambala yosankha
3
Dis
1
Njira yoperekera kasitomala wa DHCP chipata chokhazikika

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
172.16.12.1
Mzere
4

 
Nambala yosankha
6
Dis
1
Njira yoperekera DHCP kwa kasitomala wa DNS

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
8.8.8.8
Mzere
4

 
Nambala yosankha
51
Dis
1
Moyo wa magawo operekedwa pa intaneti mumasekondi, pambuyo pake kasitomala wa DHCP ayenera kuwapemphanso

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
86400
Dis
4

 
Nambala yosankha
82
Dis
1
Njira 82, ikubwereza zomwe zidabwera mu DHCPDISCOVER

 
Njira kutalika
18
Dis
1

 
Mtengo wosankha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d: mt
Dis
18

 
Kutha kwa phukusi
255
Dis
1
255 ikuyimira kutha kwa paketi

KUDZIWA

Wogula akalandira DHCPOFFER, amapanga paketi yopempha magawo a netiweki osati ku ma seva onse a DHCP pa netiweki, koma kwa imodzi yokha, yomwe DHCPOFFER imamupatsa "adakonda" kwambiri. Njira za "monga" zimatha kukhala zosiyana ndipo zimadalira kukhazikitsidwa kwa DHCP kwa kasitomala. Wolandira pempho amatchulidwa pogwiritsa ntchito adilesi ya MAC ya seva ya DHCP. Komanso, paketi ya DHCPREQUEST ikhoza kutumizidwa ndi kasitomala popanda kupanga DHCPDISCOVER, ngati adilesi ya IP ya seva idapezedwa kale.

DHCPREQUEST Packet Structure Table

Malo mu phukusi
Dzina la mtengo (wamba)
Chitsanzo:
Mau oyamba
Byte
Kufotokozera

1
Kufunsira kwa Boot
1
Hex
1
Mtundu wa uthenga. 1 - pempho kuchokera kwa kasitomala kupita ku seva, 2 - kuyankha kuchokera ku seva kupita kwa kasitomala

2
Mtundu wa Hardware
1
Hex
1
Mtundu wa adilesi ya hardware, mu protocol iyi 1 - MAC

3
Kutalika kwa ma adilesi a Hardware
6
Hex
1
Kutalika kwa adilesi ya MAC

4
Mphuno
1
Hex
1
Chiwerengero cha njira zapakatikati

5
ID Yogulitsa
23:cf:de:1d
Hex
4
Chizindikiritso cha zochitika zapadera. Wopangidwa ndi kasitomala kumayambiriro kwa ntchito yopempha

7
Chachiwiri chinadutsa
0
Hex
4
Nthawi mumasekondi kuyambira pachiyambi cha njira yopezera adilesi

9
Nsapato mbendera
8000
Hex
2
Mbendera zina zomwe zitha kukhazikitsidwa kuti ziziwonetsa magawo a protocol. Pachifukwa ichi, "kuwulutsa" kumayikidwa

11
Adilesi ya IP ya kasitomala
0.0.0.0
Mzere
4
Adilesi ya IP ya kasitomala (ngati ilipo)

15
Adilesi ya IP ya kasitomala wanu
172.16.134.61
Mzere
4
Adilesi ya IP yoperekedwa ndi seva (ngati ilipo)

19
Kenako adilesi ya IP ya seva
0.0.0.0
Mzere
4
Adilesi ya IP ya seva (ngati imadziwika)

23
Adilesi ya IP ya wothandizira
172.16.114.41
Mzere
4
Adilesi ya IP ya wothandizira wotumizira (mwachitsanzo, chosinthira)

27
Adilesi ya Client MAC
14:d6:4d:a7:c9:55
Hex
6
Adilesi ya MAC ya wotumiza paketi (kasitomala)

31
Client hardware address padding
 
Hex
10
Mpando wosungidwa. Nthawi zambiri amadzazidwa ndi ziro

41
Dzina la seva
 
Mzere
64
Dzina la seva ya DHCP. Nthawi zambiri samafalitsidwa

105
Dzina la fayilo
 
Mzere
128
Dzina lafayilo pa seva yogwiritsidwa ntchito ndi ma diskless stations poyambira

235
Ma cookies amatsenga
63: 82: 53: 63
Hex
4
Nambala ya "Magic", malinga ndi zomwe, incl. mutha kudziwa kuti paketi iyi ndi ya protocol ya DHCP

Zosankha za DHCP. Ikhoza kupita mu dongosolo lililonse

236
Nambala yosankha
53
Dis
3
Njira 53, yomwe imatanthawuza mtundu wa paketi ya DHCP 3 - DHCPREQUEST

 
Njira kutalika
1
Dis
1

 
Mtengo wosankha
3
Dis
1

 
Nambala yosankha
61
Dis
1
ID ya kasitomala: 01 (ya Ehernet) + adilesi ya MAC ya kasitomala

 
Njira kutalika
7
Dis
1

 
Mtengo wosankha
01:2c:ab:25:ff:72:a6
Hex
7

 
Nambala yosankha
60
Dis
 
"Chizindikiritso cha kalasi ya Vendor". Kwa ine, imafotokoza mtundu wa kasitomala wa DHCP. Mwina zida zina zimabweretsa china chake. Windows mwachitsanzo ikuti MSFT 5.0

 
Njira kutalika
11
Dis
 

 
Mtengo wosankha
ddcp 0.9.8
Mzere
 

 
Nambala yosankha
55
 
1
Netiweki magawo ofunsidwa ndi kasitomala. Mapangidwe angasiyane

01 - Network mask
03 - Njira
06 - DNS
oc - Dzina la alendo
0f - dzina la domain domain
1c - adilesi yofunsira kuwulutsa (kuwulutsa)
42 - Dzina la seva ya TFTP
79 - Njira Yopanda Makhalidwe

 
Njira kutalika
8
 
1

 
Mtengo wosankha
01:03:06:0c:0f:1c:42:79
 
8

 
Nambala yosankha
82
Dis
1
Njira 82, ikubwereza zomwe zidabwera mu DHCPDISCOVER

 
Njira kutalika
18
Dis
1

 
Mtengo wosankha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d: mt
Dis
18

 
Kutha kwa phukusi
255
Dis
1
255 ikuyimira kutha kwa paketi

ZOCHITIKA

Monga chitsimikizo chakuti "inde, ndiko kulondola, iyi ndi adilesi yanu ya IP, ndipo sindidzapereka kwa wina aliyense" kuchokera ku seva ya DHCP, paketi mumtundu wa DHCPACK kuchokera ku seva kupita kwa kasitomala. Imatumizidwa ngati mapaketi ena. Ngakhale, mu code ili m'munsiyi ya seva ya DHCP yomwe yakhazikitsidwa ku Python, ngati ndingathe kubwereza pempho lililonse lofalitsa potumiza paketi ku IP yamakasitomala, ngati ikudziwika kale. Komanso, seva ya DHCP sisamala konse ngati paketi ya DHCPACK yafika kwa kasitomala. Ngati kasitomala salandira DHCPACK, ndiye pakapita nthawi amangobwereza DHCPREQUEST

DHCPACK Packet Structure Table

Malo mu phukusi
Dzina la mtengo (wamba)
Chitsanzo:
Mau oyamba
Byte
Kufotokozera

1
Kufunsira kwa Boot
2
Hex
1
Mtundu wa uthenga. 1 - pempho kuchokera kwa kasitomala kupita ku seva, 2 - kuyankha kuchokera ku seva kupita kwa kasitomala

2
Mtundu wa Hardware
1
Hex
1
Mtundu wa adilesi ya hardware, mu protocol iyi 1 - MAC

3
Kutalika kwa ma adilesi a Hardware
6
Hex
1
Kutalika kwa adilesi ya MAC

4
Mphuno
1
Hex
1
Chiwerengero cha njira zapakatikati

5
ID Yogulitsa
23:cf:de:1d
Hex
4
Chizindikiritso cha zochitika zapadera. Wopangidwa ndi kasitomala kumayambiriro kwa ntchito yopempha

7
Chachiwiri chinadutsa
0
Hex
4
Nthawi mumasekondi kuyambira pachiyambi cha njira yopezera adilesi

9
Nsapato mbendera
8000
Hex
2
Mbendera zina zomwe zitha kukhazikitsidwa kuti ziziwonetsa magawo a protocol. Pachifukwa ichi, "kuwulutsa" kumayikidwa

11
Adilesi ya IP ya kasitomala
0.0.0.0
Mzere
4
Adilesi ya IP ya kasitomala (ngati ilipo)

15
Adilesi ya IP ya kasitomala wanu
172.16.134.61
Mzere
4
Adilesi ya IP yoperekedwa ndi seva (ngati ilipo)

19
Kenako adilesi ya IP ya seva
0.0.0.0
Mzere
4
Adilesi ya IP ya seva (ngati imadziwika)

23
Adilesi ya IP ya wothandizira
172.16.114.41
Mzere
4
Adilesi ya IP ya wothandizira wotumizira (mwachitsanzo, chosinthira)

27
Adilesi ya Client MAC
14:d6:4d:a7:c9:55
Hex
6
Adilesi ya MAC ya wotumiza paketi (kasitomala)

31
Client hardware address padding
 
Hex
10
Mpando wosungidwa. Nthawi zambiri amadzazidwa ndi ziro

41
Dzina la seva
 
Mzere
64
Dzina la seva ya DHCP. Nthawi zambiri samafalitsidwa

105
Dzina la fayilo
 
Mzere
128
Dzina lafayilo pa seva yogwiritsidwa ntchito ndi ma diskless stations poyambira

235
Ma cookies amatsenga
63: 82: 53: 63
Hex
4
Nambala ya "Magic", malinga ndi zomwe, incl. mutha kudziwa kuti paketi iyi ndi ya protocol ya DHCP

Zosankha za DHCP. Ikhoza kupita mu dongosolo lililonse

236
Nambala yosankha
53
Dis
3
Njira 53, yomwe imatanthawuza mtundu wa paketi ya DHCP 5 - DHCPACK

 
Njira kutalika
1
Dis
1

 
Mtengo wosankha
5
Dis
1

 
Nambala yosankha
1
Dis
1
Njira yoperekera kasitomala wa DHCP chigoba cha netiweki

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
255.255.224.0
Mzere
4

 
Nambala yosankha
3
Dis
1
Njira yoperekera kasitomala wa DHCP chipata chokhazikika

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
172.16.12.1
Mzere
4

 
Nambala yosankha
6
Dis
1
Njira yoperekera DHCP kwa kasitomala wa DNS

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
8.8.8.8
Mzere
4

 
Nambala yosankha
51
Dis
1
Moyo wa magawo operekedwa pa intaneti mumasekondi, pambuyo pake kasitomala wa DHCP ayenera kuwapemphanso

 
Njira kutalika
4
Dis
1

 
Mtengo wosankha
86400
Dis
4

 
Nambala yosankha
82
Dis
1
Njira 82, ikubwereza zomwe zidabwera mu DHCPDISCOVER

 
Njira kutalika
18
Dis
1

 
Mtengo wosankha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d: mt
Dis
18

 
Kutha kwa phukusi
255
Dis
1
255 ikuyimira kutha kwa paketi

kolowera

Kuyikaku kumakhala ndi kukhazikitsa ma module a python ofunikira pantchito. Zimaganiziridwa kuti MySQL yakhazikitsidwa kale ndikukonzedwa.

FreeBSD

pkg kukhazikitsa python3 python3 -m surepip pip3 kukhazikitsa mysql-cholumikizira

Ubuntu

sudo apt-get kukhazikitsa python3 sudo apt-get kukhazikitsa pip3 sudo pip3 kukhazikitsa mysql-cholumikizira

Timapanga database ya MySQL, kukweza pydhcp.sql kutaya mmenemo, ndikukonzekera fayilo yokonzekera.

Kukhazikika

Zokonda zonse za seva zili mu fayilo ya xml. Fayilo yolozera:

1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 localhost mayeso mayeso 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 sankhani ip, chigoba, rauta, dns kuchokera kwa ogwiritsa pomwe upper(mac)=upper('{option_3_AgentRemoteId_hex}') ndi upper(port)=upper('{option_1_AgentCircuitId_port_hex}') sankhani ip, chigoba, rauta, dns kuchokera kwa ogwiritsa pomwe upper(mac)=upper('{sw_mac}') ndi upper(port)=upper('{sw_port82}') sankhani ip, chigoba, rauta, dns kuchokera kwa ogwiritsa pomwe upper(mac)=upper('{ClientMacAddress}') lowetsani m'mbiri (id,dt,mac,ip,comment) values ​​​​(null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')

Tsopano mwatsatanetsatane pa ma tag:

Gawo la dhcpserver limafotokoza zoyambira zoyambira seva, zomwe ndi:

  • host - ndi adilesi yanji ya IP yomwe seva imamvera padoko 67
  • kuwulutsa - komwe ip ndikuwulutsa kwa DHCPOFFER ndi DHCPACK
  • DHCPServer - kodi ip ya seva ya DHCP ndi chiyani
  • LeaseTime nthawi yobwereketsa ya adilesi ya IP yoperekedwa
  • ThreadLimit - ndi ulusi ungati womwe ukuyenda nthawi imodzi kuti ukonze mapaketi a UDP omwe akubwera padoko 67. Iyenera kuthandiza pama projekiti olemetsa kwambiri 😉
  • defaultMask,defaultRouter,defaultDNS - zomwe zimaperekedwa kwa olembetsa mwachisawawa ngati IP ipezeka mu database, koma magawo owonjezera sanatchulidwe.

mysql gawo:

host, dzina lolowera, mawu achinsinsi, basename - chilichonse chimadzinenera chokha. Pafupifupi mawonekedwe a database amaikidwa GitHub

Gawo lamafunso: zopempha zolandila OFFER/ACK zafotokozedwa apa:

  • offer_count - chiwerengero cha mizere yokhala ndi zopempha zomwe zimabweretsa zotsatira monga ip, mask, rauta, dns
  • offer_n - mndandanda wamafunso. Ngati kubwerera kulibe kanthu, perekani zopempha zotsatirazi
  • history_sql - funso lomwe limalemba, mwachitsanzo, ku "mbiri yololeza" kwa olembetsa

Zopempha zingaphatikizepo zosintha zilizonse kuchokera mugawo la zosankha kapena zosankha kuchokera ku protocol ya DHCP.

Zosankha gawo. Apa ndi pamene zimakhala zosangalatsa kwambiri. Apa titha kupanga zosintha zomwe titha kugwiritsa ntchito pambuyo pake mugawo lafunso.

Mwachitsanzo:

option_82_hex:sw_port1:20:22

, mzere wamalamulowu umatenga mzere wonse womwe udabwera muzopempha za DHCP 82, mumtundu wa hex, kuchokera pa 20 mpaka 22 byte kuphatikiza ndikuziyika muzosintha zatsopano sw_port1 (kusintha doko komwe pempho lidabwera)

option_82_hex:sw_mac:26:40

, tanthauzirani kusintha kwa sw_mac, kutenga hex kuchokera pamtundu wa 26:40

Mutha kuwona zosankha zonse zomwe zingagwiritsidwe ntchito pamafunso poyambitsa seva ndi -d switch. Tiwona china chonga chipika ichi:

--paketi ya DHCPINFORM idafika pa doko 67, kuchokera ku 0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': '0025224MacAddressy'% 764, '00MacAddress' Jxd7d' , 'HType': 'Ethernet', 'HostName': b'x91xa5xe0xa3xa5xa9-x8fx8a', 'ReqListDNS': Zoona, 'ReqListDomainName': Zoona, 'ReqListPerfowmRouterDiscover': Zoona, 'ReqListRouter': True, 'ReqListRouter': True, 'ReqListRoute': True, ' 'ReqListSubnetM ask ': Zoona, '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'", 'zotsatira': Zabodza, '768x': 'siaddr': '0.0.0.0', 'sw_mac': '001e589eb2ad', 'sw_port1': '06', 'xidbyte': b'

Chifukwa chake, titha kukulunga chilichonse mu {} ndipo chidzagwiritsidwa ntchito pafunso la SQL.

Tiyeni tilembe mbiri yakale kuti kasitomala adalandira adilesi ya IP:

DHCP + Mysql seva ku Python

DHCP + Mysql seva ku Python

Chiyambi cha seva

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

- d console linanena bungwe mode DEBUG
- c <filename> fayilo yosintha

Kufotokozera

Ndipo tsopano zambiri pakukhazikitsa seva ku Python. Ndi ululu. Python anaphunziridwa pa ntchentche. Nthawi zambiri zimapangidwa mwanjira ya "wow, mwanjira ina ndidazipanga kuti zigwire ntchito." Osakometsedwa konse, ndikusiyidwa mwanjira iyi makamaka chifukwa chosadziwa pang'ono pakukula kwa Python. Ndikhala pazinthu zosangalatsa kwambiri za kukhazikitsa seva mu "code".

XML configuration file parser

The standard Python module xml.dom imagwiritsidwa ntchito. Zikuwoneka zophweka, koma pakukhazikitsa panali kusowa kowonekera kwa zolemba zomveka bwino ndi zitsanzo pa intaneti pogwiritsa ntchito gawoli.

    tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") ya elem mu 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_base) =elem.getElementsByTagName("dzina")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") ya elem mu dconfig: gconfig["broadcast"]=elem.getElementsByTagName("kuwulutsa")[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_config["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") ya elem mu qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.data ya nambala mu range(int(gconfig["offer_count"])): gconfig["offer_"+str(num+1)]=elem.getElementsByTagName("offer_"+str(nambala+1))[0].firstChild.data gconfig ["history_sql"]=elem.getElementsByTagName("history_sql")[0].firstChild.data options=tree.getElementsByTagName("options") kwa maelem mu options: node=elem.getElementsByTagName("option") pazosankha mu node : optionsMod.append(options.firstChild.data)

Multithreading

Zodabwitsa ndizakuti, multithreading mu Python imayendetsedwa momveka bwino komanso mophweka.

def PacketWork(deta,addr): ... # kukhazikitsa kugawa paketi yomwe ikubwera ndikuyankha ... target=PacketWork , args=(data,addr,)).start() # monga idabwera - timayambitsa ntchito ya PacketWork yomwe idafotokozedwa kale kumbuyo ndi magawo pomwe threading.active_count() >gconfig["dhcp_ThreadLimit"]: nthawi. kugona(1024) # ngati nambala Pali ulusi wambiri womwe ukuyamba kale kuposa zoikamo, timadikirira mpaka pakhale ochepa.

Landirani/tumizani paketi ya DHCP

Kuti muchepetse mapaketi a UDP akubwera kudzera pa netiweki khadi, muyenera "kukweza" socket:

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

, komwe kuli mbendera:

  • AF_INET - zikutanthauza kuti mawonekedwe a adilesi adzakhala IP: doko. Pakhoza kukhalanso AF_UNIX - pomwe adilesi imaperekedwa ndi dzina la fayilo.
  • SOCK_DGRAM - zikutanthauza kuti sitivomereza "paketi yaiwisi", koma yomwe yadutsa kale paziwopsezo, komanso ndi paketi yokonzedwa pang'ono. Iwo. timangolandira paketi ya UDP yokha popanda gawo la "thupi" la paketi ya UDP. Ngati mugwiritsa ntchito mbendera ya SOCK_RAW, ndiye kuti mudzafunikanso kuyika "wrapper" iyi.

Kutumiza paketi kungakhale ngati kuwulutsa:

                    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #sitch socket kuti iwulutse rz=udp_socket.sendto(packetack, (gconfig["broadcast"],68))

, ndi ku adilesi "kumene phukusilo linachokera":

                        udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # sinthani socket kukhala omvera ambiri rz=udp_socket.sendto(packetack, addr)

, pomwe SOL_SOCKET amatanthauza "protocol level" pazosankha,

, SO_BROADCAST njira yoti phukusi la chisoti ndi "kuwulutsa"

  ,SO_REUSEADDR njira imasintha socket kukhala "omvera ambiri". Mwachidziwitso, sizofunikira pankhaniyi, koma pa seva imodzi ya FreeBSD yomwe ndidayesa, codeyo sinagwire ntchito popanda izi.

Kujambula paketi ya DHCP

Apa ndipamene ndinkakonda kwambiri Python. Zikuoneka kuti kunja kwa bokosi kumakupatsani mwayi wosinthika ndi bytecode. Kulola kuti limasuliridwe mosavuta kumitengo ya decimal, zingwe ndi hex - i.e. Izi ndi zomwe timafunikira kuti timvetsetse kapangidwe ka phukusi. Chifukwa chake, mwachitsanzo, mutha kupeza ma byte angapo mu HEX ndi ma byte okha:

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

, pangani ma byte mumpangidwe:

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

Pezani IP kuchokera kumapangidwe:

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

Ndipo mosemphanitsa:

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

Ndizo zonse pakadali pano 😉

Source: www.habr.com

Kuwonjezera ndemanga