DHCP + Mysql server hauv Python

DHCP + Mysql server hauv Python

Lub hom phiaj ntawm qhov project no yog:

  • Kawm txog DHCP ntawm IPv4 network
  • Kawm Python (me ntsis ntau dua los ntawm kos 😉)
  • hloov server DB2DHCP ua (kuv tus qub hluas nraug), original no, uas tau dhau los ua nyuaj rau kev sib sau ua ke rau OS tshiab. Thiab kuv tsis nyiam tias nws yog binary uas tsis muaj txoj hauv kev "hloov tam sim no"
  • tau txais tus neeg ua haujlwm DHCP nrog lub peev xwm los xaiv tus neeg siv khoom tus IP chaw nyob siv tus neeg siv lub mac lossis hloov mac + chaw nres nkoj ua ke (Kev xaiv 82)
  • sau lwm lub tsheb kauj vab (Auj! qhov no yog qhov kuv nyiam ua haujlwm)
  • tau txais cov lus hais txog koj lub club-handedness ntawm Habrahabr (lossis zoo dua, ib qho caw) 😉

Qhov tshwm sim: nws ua haujlwm 😉 Kuaj ntawm FreeBSD thiab Ubuntu OS. Raws li txoj cai, cov cai tuaj yeem raug nug kom ua haujlwm raws li OS, vim Zoo li tsis muaj kev khi tshwj xeeb hauv cov cai.
Ua tib zoo! Muaj ntau yam tuaj.

Txuas mus rau repository rau amateurs "kov ciaj sia".

Cov txheej txheem ntawm kev txhim kho, teeb tsa thiab siv cov txiaj ntsig ntawm "kev kawm kho vajtse" qis dua, thiab tom qab ntawd me ntsis kev xav txog DHCP raws tu qauv. Rau kuv tus kheej. Thiab rau keeb kwm 😉

Me ntsis kev xav

DHCP yog dab tsi

Qhov no yog lub network raws tu qauv uas tso cai rau ib lub cuab yeej nrhiav nws tus IP chaw nyob (thiab lwm yam tsis xws li rooj vag, DNS, thiab lwm yam) los ntawm DHCP server. Cov pob khoom sib pauv siv UDP raws tu qauv. Lub hauv paus ntsiab lus dav dav ntawm kev ua haujlwm ntawm cov cuab yeej thaum thov kev sib txuas network yog raws li hauv qab no:

  1. Lub cuab yeej (tus neeg siv khoom) xa daim ntawv thov tshaj tawm UDP (DHCPDISCOVER) thoob plaws hauv lub network nrog kev thov "zoo, ib tus neeg muab IP chaw nyob rau kuv." Ntxiv mus, feem ntau (tab sis tsis tas li) qhov kev thov tshwm sim los ntawm qhov chaw nres nkoj 68 (qhov chaw), thiab qhov chaw yog chaw nres nkoj 67 (qhov chaw). Qee cov khoom siv kuj xa cov pob ntawv los ntawm chaw nres nkoj 67. Qhov chaw nyob MAC ntawm tus neeg siv khoom tau suav nrog hauv pob DHCPDISCOVER.
  2. Tag nrho DHCP servers nyob rau hauv lub network (thiab tej zaum yuav muaj ob peb ntawm lawv) tsim DHCPOFFER muab nrog kev teeb tsa network rau lub cuab yeej uas xa DHCPDISCOVER, thiab tseem tshaj tawm hauv lub network. Kev txheeb xyuas ntawm leej twg pob ntawv no yog npaj rau yog nyob ntawm MAC chaw nyob ntawm tus neeg siv khoom tau muab ua ntej hauv DHCPDISCOVER thov.
  3. Tus neeg siv khoom lees txais cov pob ntawv nrog cov lus pom zoo rau kev teeb tsa network, xaiv qhov txaus nyiam tshaj plaws (cov txheej txheem yuav txawv, piv txwv li, lub sijhawm xa cov pob ntawv, tus naj npawb ntawm txoj kev nruab nrab), thiab ua rau "kev thov" DHCPREQUEST nrog lub network teeb tsa los ntawm DHCP server nws nyiam. Hauv qhov no, pob ntawv mus rau ib qho DHCP server tshwj xeeb.
  4. Tus neeg rau zaub mov uas tau txais DHCPREQUEST xa DHCPACK hom ntawv pob ntawv, uas nws ib zaug sau cov chaw teeb tsa network npaj rau tus neeg siv khoom no

DHCP + Mysql server hauv Python

Tsis tas li ntawd, muaj DHCPINFORM cov pob ntawv uas tuaj ntawm tus neeg siv khoom, thiab lub hom phiaj yog los qhia rau DHCP neeg rau zaub mov tias "tus neeg siv khoom muaj sia nyob" thiab siv cov chaw teeb tsa network. Hauv kev siv cov server no, cov pob ntawv no tsis quav ntsej.

Ntim hom

Feem ntau, Ethernet pob ntawv ncej zoo li no:

DHCP + Mysql server hauv Python

Hauv peb cov ntaub ntawv, peb yuav txiav txim siab tsuas yog cov ntaub ntawv ncaj qha los ntawm cov ntsiab lus ntawm UDP pob ntawv, yam tsis muaj OSI txheej txheej txheej txheem headers, uas yog DHCP qauv:

DHCPDISCOVER

Yog li, cov txheej txheem kom tau txais IP chaw nyob rau ib lub cuab yeej pib nrog tus neeg siv DHCP xa cov lus thov tshaj tawm los ntawm chaw nres nkoj 68 mus rau 255.255.255.255:67. Hauv pob no, tus neeg siv khoom suav nrog nws qhov chaw nyob MAC, nrog rau qhov nws xav tau los ntawm DHCP server. Cov qauv pob tau piav qhia hauv cov lus hauv qab no.

DHCPDISCOVER Pob Khoom Txheej Txheem Table

Txoj hauj lwm hauv pob
Tus nqi npe
Piv Txwv:
Taw qhia
Byte
Lus piav qhia

1
Boot Thov
1
Hex
1
Hom lus. 1 - thov los ntawm tus neeg siv khoom rau tus neeg rau zaub mov, 2 - teb los ntawm tus neeg rau zaub mov rau tus neeg siv khoom

2
Hom kho vajtse
1
Hex
1
Hom chaw nyob kho vajtse, hauv qhov kev cai 1 - MAC

3
Kho vajtse chaw nyob ntev
6
Hex
1
Ntaus MAC chaw nyob ntev

4
hops
1
Hex
1
Tus naj npawb ntawm txoj kev nruab nrab

5
Daim Ntawv Lej Khoom ID
23 :cf:1d
Hex
4
Cov cim kev lag luam tshwj xeeb. Tsim los ntawm tus neeg siv khoom thaum pib ntawm kev thov ua haujlwm

7
Thib ob dhau lawm
0
Hex
4
Lub sij hawm hauv vib nas this los ntawm qhov pib ntawm kev tau txais qhov chaw nyob

9
Boot chij
0
Hex
2
Qee tus chij uas tuaj yeem teeb tsa los qhia txog cov txheej txheem kev cai

11
Client IP chaw nyob
0.0.0.0
Txoj hlua
4
Tus neeg siv IP chaw nyob (yog tias muaj)

15
Koj tus neeg siv IP chaw nyob
0.0.0.0
Txoj hlua
4
IP chaw nyob muab los ntawm server (yog tias muaj)

19
Next server IP chaw nyob
0.0.0.0
Txoj hlua
4
Server IP chaw nyob (yog paub)

23
Relay tus neeg saib xyuas IP chaw nyob
172.16.114.41
Txoj hlua
4
IP chaw nyob ntawm tus neeg sawv cev relay (piv txwv li, hloov pauv)

27
Client MAC chaw nyob
14:d6:4d:a7:c9:55
Hex
6
MAC chaw nyob ntawm pob ntawv xa khoom (tus neeg siv khoom)

31
Client hardware chaw nyob padding
 
Hex
10
Lub rooj zaum. Feem ntau sau nrog xoom

41
Server lub npe
 
Txoj hlua
64
DHCP server npe. Feem ntau tsis kis

105
Boot file npe
 
Txoj hlua
128
Cov ntaub ntawv npe ntawm tus neeg rau zaub mov siv los ntawm chaw nres tsheb tsis muaj disk thaum booting

235
Khawv koob ncuav qab zib
63: 82: 53: 63
Hex
4
"Magic" tooj, raws li uas, incl. koj tuaj yeem txiav txim siab tias pob ntawv no koom nrog DHCP raws tu qauv

DHCP xaiv. Tau mus nyob rau hauv ib qho kev txiav txim

236
Xaiv tus naj npawb
53
Dec
1
Option 53, uas qhia txog DHCP pob ntawv hom

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

 
Xaiv qhov ntev
1
Dec
1

 
Kev xaiv tus nqi
1
Dec
1

 
Xaiv tus naj npawb
50
Dec
1
Tus IP chaw nyob twg tus neeg siv xav tau txais?

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
172.16.134.61
Txoj hlua
4

 
Xaiv tus naj npawb
55
 
1
Network parameters thov los ntawm tus neeg siv khoom. Kev sib xyaw yuav txawv

01 - Network npog
03 - Rooj vag
06 - NWS
oc — Hostname
0f - network npe
1c - chaw nyob ntawm kev thov tshaj tawm (tshaj tawm)
42 - TFTP server lub npe
79 - Classless Static Route

 
Xaiv qhov ntev
8
 
1

 
Kev xaiv tus nqi
01:03:06:0c:0f:1c:42:79
 
8

 
Xaiv tus naj npawb
82
Dec
 
Kev xaiv 82, uas xa cov MAC chaw nyob ntawm cov khoom siv rov ua dua thiab qee qhov txiaj ntsig ntxiv.

Feem ntau, qhov no yog qhov chaw nres nkoj ntawm qhov hloov pauv uas qhov kawg DHCP tus neeg siv tau khiav, qhov kev xaiv no muaj cov kev txwv ntxiv, thawj byte yog tus lej ntawm "suboption", qhov thib ob yog nws qhov ntev, tom qab ntawd nws tus nqi.

Nyob rau hauv cov ntaub ntawv no, kev xaiv 82 muaj suboptions:
Tus neeg saib xyuas Circuit ID = 00:04:00:01:00:04, qhov twg ob bytes kawg yog DHCP tus neeg siv chaw nres nkoj los ntawm qhov kev thov tuaj

Tus neeg saib xyuas chaw taws teeb ID = 00:06:c8:be:19:93:11:48 - MAC chaw nyob ntawm DHCP cov khoom siv rov ua dua

 
Xaiv qhov ntev
18
Dec
 

 
Kev xaiv tus nqi
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
Hex
 

 
Thaum kawg ntawm pob
255
Dec
1
255 cim qhov kawg ntawm pob ntawv

DHCPOFFER

Thaum tus neeg rau zaub mov tau txais DHCPDISCOVER pob ntawv thiab yog tias nws pom tias nws tuaj yeem muab cov neeg siv khoom ib yam dab tsi los ntawm qhov thov, ces nws tsim cov lus teb rau nws - DHCPDISCOVER. Cov lus teb raug xa mus rau qhov chaw nres nkoj "los ntawm qhov chaw nws tuaj", los ntawm kev tshaj tawm, vim lub sijhawm no, tus neeg siv khoom tseem tsis tau muaj tus IP chaw nyob, yog li nws tsuas tuaj yeem lees txais pob ntawv yog tias nws xa los ntawm kev tshaj tawm. Tus neeg siv khoom lees paub tias qhov no yog pob rau nws los ntawm nws qhov chaw nyob MAC hauv pob, nrog rau tus lej hloov pauv uas nws tsim thaum lub sijhawm thawj pob tsim.

DHCPOFFER Packet Structure Table

Txoj hauj lwm hauv pob
Lub npe ntawm tus nqi (common)
Piv Txwv:
Taw qhia
Byte
Lus piav qhia

1
Boot Thov
1
Hex
1
Hom lus. 1 - thov los ntawm tus neeg siv khoom rau tus neeg rau zaub mov, 2 - teb los ntawm tus neeg rau zaub mov rau tus neeg siv khoom

2
Hom kho vajtse
1
Hex
1
Hom chaw nyob kho vajtse, hauv qhov kev cai 1 - MAC

3
Kho vajtse chaw nyob ntev
6
Hex
1
Ntaus MAC chaw nyob ntev

4
hops
1
Hex
1
Tus naj npawb ntawm txoj kev nruab nrab

5
Daim Ntawv Lej Khoom ID
23 :cf:1d
Hex
4
Cov cim kev lag luam tshwj xeeb. Tsim los ntawm tus neeg siv khoom thaum pib ntawm kev thov ua haujlwm

7
Thib ob dhau lawm
0
Hex
4
Lub sij hawm hauv vib nas this los ntawm qhov pib ntawm kev tau txais qhov chaw nyob

9
Boot chij
0
Hex
2
Qee tus chij uas tuaj yeem teeb tsa los qhia txog cov txheej txheem kev cai. Hauv qhov no, 0 txhais tau tias Unicast thov hom

11
Client IP chaw nyob
0.0.0.0
Txoj hlua
4
Tus neeg siv IP chaw nyob (yog tias muaj)

15
Koj tus neeg siv IP chaw nyob
172.16.134.61
Txoj hlua
4
IP chaw nyob muab los ntawm server (yog tias muaj)

19
Next server IP chaw nyob
0.0.0.0
Txoj hlua
4
Server IP chaw nyob (yog paub)

23
Relay tus neeg saib xyuas IP chaw nyob
172.16.114.41
Txoj hlua
4
IP chaw nyob ntawm tus neeg sawv cev relay (piv txwv li, hloov pauv)

27
Client MAC chaw nyob
14:d6:4d:a7:c9:55
Hex
6
MAC chaw nyob ntawm pob ntawv xa khoom (tus neeg siv khoom)

31
Client hardware chaw nyob padding
 
Hex
10
Lub rooj zaum. Feem ntau sau nrog xoom

41
Server lub npe
 
Txoj hlua
64
DHCP server npe. Feem ntau tsis kis

105
Boot file npe
 
Txoj hlua
128
Cov ntaub ntawv npe ntawm tus neeg rau zaub mov siv los ntawm chaw nres tsheb tsis muaj disk thaum booting

235
Khawv koob ncuav qab zib
63: 82: 53: 63
Hex
4
"Magic" tooj, raws li uas, incl. koj tuaj yeem txiav txim siab tias pob ntawv no koom nrog DHCP raws tu qauv

DHCP xaiv. Tau mus nyob rau hauv ib qho kev txiav txim

236
Xaiv tus naj npawb
53
Dec
1
Kev xaiv 53, uas txhais tau tias DHCP 2 pob ntawv hom - DHCPOFFER

 
Xaiv qhov ntev
1
Dec
1

 
Kev xaiv tus nqi
2
Dec
1

 
Xaiv tus naj npawb
1
Dec
1
Kev xaiv muab DHCP tus neeg siv lub npog ntsej muag

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
255.255.224.0
Txoj hlua
4

 
Xaiv tus naj npawb
3
Dec
1
Kev xaiv los muab cov neeg siv khoom DHCP lub rooj vag qub

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
172.16.12.1
Txoj hlua
4

 
Xaiv tus naj npawb
6
Dec
1
Kev xaiv muab DHCP rau DNS tus neeg siv khoom

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
8.8.8.8
Txoj hlua
4

 
Xaiv tus naj npawb
51
Dec
1
Lub neej ntawm lub network tsis pub dhau lub vib nas this, tom qab uas tus neeg siv khoom DHCP yuav tsum thov lawv dua

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
86400
Dec
4

 
Xaiv tus naj npawb
82
Dec
1
Option 82, rov ua dab tsi tuaj hauv DHCPDISCOVER

 
Xaiv qhov ntev
18
Dec
1

 
Kev xaiv tus nqi
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26: 4 d:ua
Dec
18

 
Thaum kawg ntawm pob
255
Dec
1
255 cim qhov kawg ntawm pob ntawv

DHCPREQUEST

Tom qab tus neeg siv tau txais DHCPOFFER, nws tsim ib pob ntawv thov kev sib txuas tsis yog rau txhua tus DHCP servers ntawm lub network, tab sis tsuas yog rau ib qho tshwj xeeb, uas DHCPOFFER muab nws "nyiam" tshaj plaws. Cov txheej txheem "zoo li" tuaj yeem sib txawv thiab nyob ntawm tus neeg siv khoom siv DHCP. Tus neeg tau txais kev thov tau teev tseg siv qhov chaw nyob MAC ntawm DHCP server. Tsis tas li, pob ntawv DHCPREQUEST tuaj yeem xa los ntawm tus neeg siv khoom yam tsis tau tsim DHCPDISCOVER thawj zaug, yog tias tus neeg rau zaub mov tus IP chaw nyob twb tau txais yav dhau los.

DHCPREQUEST Packet Structure Table

Txoj hauj lwm hauv pob
Lub npe ntawm tus nqi (common)
Piv Txwv:
Taw qhia
Byte
Lus piav qhia

1
Boot Thov
1
Hex
1
Hom lus. 1 - thov los ntawm tus neeg siv khoom rau tus neeg rau zaub mov, 2 - teb los ntawm tus neeg rau zaub mov rau tus neeg siv khoom

2
Hom kho vajtse
1
Hex
1
Hom chaw nyob kho vajtse, hauv qhov kev cai 1 - MAC

3
Kho vajtse chaw nyob ntev
6
Hex
1
Ntaus MAC chaw nyob ntev

4
hops
1
Hex
1
Tus naj npawb ntawm txoj kev nruab nrab

5
Daim Ntawv Lej Khoom ID
23 :cf:1d
Hex
4
Cov cim kev lag luam tshwj xeeb. Tsim los ntawm tus neeg siv khoom thaum pib ntawm kev thov ua haujlwm

7
Thib ob dhau lawm
0
Hex
4
Lub sij hawm hauv vib nas this los ntawm qhov pib ntawm kev tau txais qhov chaw nyob

9
Boot chij
8000
Hex
2
Qee tus chij uas tuaj yeem teeb tsa los qhia txog cov txheej txheem kev cai. Hauv qhov no, "tshaj tawm" tau teeb tsa

11
Client IP chaw nyob
0.0.0.0
Txoj hlua
4
Tus neeg siv IP chaw nyob (yog tias muaj)

15
Koj tus neeg siv IP chaw nyob
172.16.134.61
Txoj hlua
4
IP chaw nyob muab los ntawm server (yog tias muaj)

19
Next server IP chaw nyob
0.0.0.0
Txoj hlua
4
Server IP chaw nyob (yog paub)

23
Relay tus neeg saib xyuas IP chaw nyob
172.16.114.41
Txoj hlua
4
IP chaw nyob ntawm tus neeg sawv cev relay (piv txwv li, hloov pauv)

27
Client MAC chaw nyob
14:d6:4d:a7:c9:55
Hex
6
MAC chaw nyob ntawm pob ntawv xa khoom (tus neeg siv khoom)

31
Client hardware chaw nyob padding
 
Hex
10
Lub rooj zaum. Feem ntau sau nrog xoom

41
Server lub npe
 
Txoj hlua
64
DHCP server npe. Feem ntau tsis kis

105
Boot file npe
 
Txoj hlua
128
Cov ntaub ntawv npe ntawm tus neeg rau zaub mov siv los ntawm chaw nres tsheb tsis muaj disk thaum booting

235
Khawv koob ncuav qab zib
63: 82: 53: 63
Hex
4
"Magic" tooj, raws li uas, incl. koj tuaj yeem txiav txim siab tias pob ntawv no koom nrog DHCP raws tu qauv

DHCP xaiv. Tau mus nyob rau hauv ib qho kev txiav txim

236
Xaiv tus naj npawb
53
Dec
3
Option 53, uas txhais cov DHCP pob ntawv hom 3 - DHCPREQUEST

 
Xaiv qhov ntev
1
Dec
1

 
Kev xaiv tus nqi
3
Dec
1

 
Xaiv tus naj npawb
61
Dec
1
Client ID: 01 (rau Ehernet) + tus neeg siv khoom MAC chaw nyob

 
Xaiv qhov ntev
7
Dec
1

 
Kev xaiv tus nqi
01:2c:ab:25:ff:72:a6
Hex
7

 
Xaiv tus naj npawb
60
Dec
 
"Vendor class identifier". Hauv kuv qhov xwm txheej, nws tshaj tawm DHCP tus neeg siv khoom version. Tej zaum lwm yam khoom siv rov qab qee yam txawv. Windows piv txwv qhia MSFT 5.0

 
Xaiv qhov ntev
11
Dec
 

 
Kev xaiv tus nqi
hwm 0.9.8
Txoj hlua
 

 
Xaiv tus naj npawb
55
 
1
Network parameters thov los ntawm tus neeg siv khoom. Kev sib xyaw yuav txawv

01 - Network npog
03 - Rooj vag
06 - NWS
oc — Hostname
0f - network npe
1c - chaw nyob ntawm kev thov tshaj tawm (tshaj tawm)
42 - TFTP server lub npe
79 - Classless Static Route

 
Xaiv qhov ntev
8
 
1

 
Kev xaiv tus nqi
01:03:06:0c:0f:1c:42:79
 
8

 
Xaiv tus naj npawb
82
Dec
1
Option 82, rov ua dab tsi tuaj hauv DHCPDISCOVER

 
Xaiv qhov ntev
18
Dec
1

 
Kev xaiv tus nqi
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26: 4 d:ua
Dec
18

 
Thaum kawg ntawm pob
255
Dec
1
255 cim qhov kawg ntawm pob ntawv

DHCPACK

Raws li kev lees paub tias "yog, yog lawm, qhov no yog koj qhov chaw nyob IP, thiab kuv yuav tsis muab rau lwm tus" los ntawm DHCP server, ib pob ntawv hauv DHCPACK hom los ntawm server rau cov neeg siv khoom. Nws, zoo li lwm cov pob ntawv, raug xa tawm. Txawm hais tias, hauv cov cai hauv qab no rau DHCP server siv hauv Python, tsuas yog nyob rau hauv rooj plaub, kuv luam tawm ib qho kev thov tshaj tawm los ntawm kev xa ib pob ntawv mus rau tus neeg siv khoom tshwj xeeb IP, yog tias nws twb paub lawm. Ntxiv mus, DHCP neeg rau zaub mov tsis tu txhua yam seb DHCPACK pob ntawv tau mus txog tus neeg siv khoom. Yog tias tus neeg siv khoom tsis tau txais DHCPACK, tom qab ib ntus nws tsuas rov ua DHCPREQUEST

DHCPACK Pob Khoom Lub Rooj

Txoj hauj lwm hauv pob
Lub npe ntawm tus nqi (common)
Piv Txwv:
Taw qhia
Byte
Lus piav qhia

1
Boot Thov
2
Hex
1
Hom lus. 1 - thov los ntawm tus neeg siv khoom rau tus neeg rau zaub mov, 2 - teb los ntawm tus neeg rau zaub mov rau tus neeg siv khoom

2
Hom kho vajtse
1
Hex
1
Hom chaw nyob kho vajtse, hauv qhov kev cai 1 - MAC

3
Kho vajtse chaw nyob ntev
6
Hex
1
Ntaus MAC chaw nyob ntev

4
hops
1
Hex
1
Tus naj npawb ntawm txoj kev nruab nrab

5
Daim Ntawv Lej Khoom ID
23 :cf:1d
Hex
4
Cov cim kev lag luam tshwj xeeb. Tsim los ntawm tus neeg siv khoom thaum pib ntawm kev thov ua haujlwm

7
Thib ob dhau lawm
0
Hex
4
Lub sij hawm hauv vib nas this los ntawm qhov pib ntawm kev tau txais qhov chaw nyob

9
Boot chij
8000
Hex
2
Qee tus chij uas tuaj yeem teeb tsa los qhia txog cov txheej txheem kev cai. Hauv qhov no, "tshaj tawm" tau teeb tsa

11
Client IP chaw nyob
0.0.0.0
Txoj hlua
4
Tus neeg siv IP chaw nyob (yog tias muaj)

15
Koj tus neeg siv IP chaw nyob
172.16.134.61
Txoj hlua
4
IP chaw nyob muab los ntawm server (yog tias muaj)

19
Next server IP chaw nyob
0.0.0.0
Txoj hlua
4
Server IP chaw nyob (yog paub)

23
Relay tus neeg saib xyuas IP chaw nyob
172.16.114.41
Txoj hlua
4
IP chaw nyob ntawm tus neeg sawv cev relay (piv txwv li, hloov pauv)

27
Client MAC chaw nyob
14:d6:4d:a7:c9:55
Hex
6
MAC chaw nyob ntawm pob ntawv xa khoom (tus neeg siv khoom)

31
Client hardware chaw nyob padding
 
Hex
10
Lub rooj zaum. Feem ntau sau nrog xoom

41
Server lub npe
 
Txoj hlua
64
DHCP server npe. Feem ntau tsis kis

105
Boot file npe
 
Txoj hlua
128
Cov ntaub ntawv npe ntawm tus neeg rau zaub mov siv los ntawm chaw nres tsheb tsis muaj disk thaum booting

235
Khawv koob ncuav qab zib
63: 82: 53: 63
Hex
4
"Magic" tooj, raws li uas, incl. koj tuaj yeem txiav txim siab tias pob ntawv no koom nrog DHCP raws tu qauv

DHCP xaiv. Tau mus nyob rau hauv ib qho kev txiav txim

236
Xaiv tus naj npawb
53
Dec
3
Kev xaiv 53, uas txhais tau tias DHCP pob ntawv hom 5 - DHCPACK

 
Xaiv qhov ntev
1
Dec
1

 
Kev xaiv tus nqi
5
Dec
1

 
Xaiv tus naj npawb
1
Dec
1
Kev xaiv muab DHCP tus neeg siv lub npog ntsej muag

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
255.255.224.0
Txoj hlua
4

 
Xaiv tus naj npawb
3
Dec
1
Kev xaiv los muab cov neeg siv khoom DHCP lub rooj vag qub

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
172.16.12.1
Txoj hlua
4

 
Xaiv tus naj npawb
6
Dec
1
Kev xaiv muab DHCP rau DNS tus neeg siv khoom

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
8.8.8.8
Txoj hlua
4

 
Xaiv tus naj npawb
51
Dec
1
Lub neej ntawm lub network tsis pub dhau lub vib nas this, tom qab uas tus neeg siv khoom DHCP yuav tsum thov lawv dua

 
Xaiv qhov ntev
4
Dec
1

 
Kev xaiv tus nqi
86400
Dec
4

 
Xaiv tus naj npawb
82
Dec
1
Option 82, rov ua dab tsi tuaj hauv DHCPDISCOVER

 
Xaiv qhov ntev
18
Dec
1

 
Kev xaiv tus nqi
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26: 4 d:ua
Dec
18

 
Thaum kawg ntawm pob
255
Dec
1
255 cim qhov kawg ntawm pob ntawv

chaw

Lub installation tiag tiag muaj kev txhim kho python modules tsim nyog rau kev ua haujlwm. Nws tau xav tias MySQL twb tau teeb tsa thiab teeb tsa.

FreeBSD

pkg nruab python3 python3 -m surepip pip3 nruab mysql-connector

Ubuntu

sudo apt-mus nruab python3 sudo apt-tau nruab pip3 sudo pip3 nruab mysql-connector

Peb tsim MySQL database, xa cov pydhcp.sql pov tseg rau hauv nws, thiab teeb tsa cov ntaub ntawv teeb tsa.

Configuration

Txhua qhov chaw server yog nyob rau hauv ib daim ntawv xml. Cov ntaub ntawv siv:

1.0 ib 0.0.0.0 255.255.255.255 ib 192.168.0.71 ib 8600 1 255.255.255.0 ib 192.168.0.1 ib localhost xeem xeem pydhcp ua 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 xaiv ip, npog, router, dns los ntawm cov neeg siv qhov twg upper(mac) =upper('{option_3_AgentRemoteId_hex}') thiab upper(port) =upper('{option_1_AgentCircuitId_port_hex}') xaiv ip, daim npog qhov ncauj, router, dns los ntawm cov neeg siv qhov twg upper(mac)=upper('{sw_mac}') thiab upper(port)=upper('{sw_port82}') xaiv ip, daim npog qhov ncauj, router, dns los ntawm cov neeg siv qhov twg upper(mac)=upper('{ClientMacAddress}') ntxig rau hauv keeb kwm (id,dt,mac,ip,comment) qhov tseem ceeb (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')

Tam sim no nyob rau hauv kev nthuav dav ntxiv ntawm cov cim npe:

Tshooj dhcpserver piav qhia txog cov kev teeb tsa yooj yim rau kev pib lub server, uas yog:

  • tus tswv tsev - qhov chaw nyob IP tus neeg rau zaub mov mloog ntawm chaw nres nkoj 67
  • tshaj tawm - uas ip yog qhov tshaj tawm rau DHCPOFFER thiab DHCPACK
  • DHCPServer - dab tsi yog tus IP ntawm DHCP server
  • LeaseTime sij hawm xauj ntawm tus IP chaw nyob
  • ThreadLimit - muaj pes tsawg threads khiav ib txhij los ua cov khoom UDP tuaj ntawm chaw nres nkoj 67. Nws yuav tsum pab rau cov haujlwm siab 😉
  • defaultMask, defaultRouter, defaultDNS - dab tsi yog muab rau cov neeg siv khoom los ntawm lub neej ntawd yog tias muaj tus IP pom nyob rau hauv cov ntaub ntawv, tab sis tsis tau teev ntxiv rau nws

mysql seem:

host, username, password, basename - txhua yam hais rau nws tus kheej. Kwv yees cov qauv database tau muab tso rau ntawm GitHub

Nqe lus nug: thov kom tau txais OFFER / ACK tau piav qhia ntawm no:

  • offer_count - tus naj npawb ntawm cov kab nrog kev thov uas xa rov qab cov txiaj ntsig zoo li ip, mask, router, dns
  • offer_n — cov lus nug. Yog tias rov qab tsis muaj, ces ua raws li cov lus thov hauv qab no
  • history_sql - cov lus nug uas sau, piv txwv li, rau "kev tso cai keeb kwm" rau tus neeg siv khoom

Kev thov tuaj yeem suav nrog txhua qhov hloov pauv los ntawm ntu kev xaiv lossis kev xaiv los ntawm DHCP raws tu qauv.

Options seem. Qhov no yog qhov uas nws tau nthuav ntau dua. Ntawm no peb tuaj yeem tsim cov kev hloov pauv uas peb tuaj yeem siv tom qab hauv nqe lus nug.

Piv txwv li:

option_82_hex:sw_port1:20:22

, cov kab hais kom ua no siv tag nrho cov kab uas tuaj hauv DHCP qhov kev thov xaiv 82, hauv hom hex, nyob rau hauv thaj tsam ntawm 20 txog 22 bytes suav nrog thiab muab tso rau hauv qhov hloov pauv tshiab sw_port1 (hloov chaw nres nkoj los ntawm qhov chaw thov tuaj)

option_82_hex:sw_mac:26:40

, txhais cov sw_mac sib txawv, noj cov hex ntawm qhov ntau 26:40

Koj tuaj yeem pom tag nrho cov kev xaiv ua tau uas tuaj yeem siv rau hauv cov lus nug los ntawm kev pib lub server nrog -d hloov. Peb yuav pom qee yam zoo li lub log no:

--a DHCPINFORM pob ntawv tuaj txog ntawm chaw nres nkoj 67, los ntawm 0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': '0025224'764'00 %"Jxd7d' , 'HType': 'Ethernet', 'HostName': b'x91xa5xe0xa3xa5xa9-x8fx8a', 'ReqListDNS': True, 'ReqListDomainName': True, 'ReqListPerfowmRouterDiscoverReq'Tube'Router':'Router'List':', : Muaj tseeb, 'ReqListSubnetM nug ': Tseeb, 'ReqListVendorSpecInfo': 43, 'RequestedIpAddress': '0.0.0.0', 'Vendor': b'MSFT 5.0', 'chaddr': '0025224ad764.'172.30.128.13', , 'flags ': b'x00x00', 'giaddr': '172.30.114.25', 'gpoz': 308, 'hlen': 6, 'hops': 1, 'htype': 'MAC', 'magic_cookie': b'cx82Sc ', 'op': 'DHCPINFORM', 'option12': 12, 'option53': 53, 'option55': 55, 'option60': 60, 'option61': 61, 'option82': 82, xaiv option_82_byte': b'x12x01x06x00x04x00x01x00x06x02x08x00' b'x06x00x1eXx9exb2xad', 'option_82_hex': '12010600040001000602080006001' , 'option_589_len': 2 82, 'option_18_str': "b'x82x12x01x06x00x04x00x01x00x06x02x08x00x06x00eXx1exb9xad'", 'result': 2se768, False: 'siaddr': '0.0.0.0', 'sw_mac': '001e589eb2ad', 'sw_port1': '06', 'xidbyte': b'

Raws li, peb tuaj yeem qhwv txhua qhov sib txawv hauv {} thiab nws yuav siv rau hauv cov lus nug SQL.

Cia peb sau keeb kwm uas tus neeg siv tau txais qhov chaw nyob IP:

DHCP + Mysql server hauv Python

DHCP + Mysql server hauv Python

Server pib

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

- d console tso zis hom DEBUG
- c <filename> configuration file

Kev suav nuj nqis

Thiab tam sim no cov ntsiab lus ntxiv ntawm kev siv lub server hauv Python. Nws yog mob. Python tau kawm ntawm ya. Ntau lub sijhawm tau ua nyob rau hauv cov style ntawm "wow, cas kuv ua nws ua haujlwm." Tsis optimized tag nrho, thiab sab laug hauv daim ntawv no feem ntau yog vim muaj kev paub me ntsis hauv Python txoj kev loj hlob. Kuv yuav nyob ntawm qhov nthuav dav tshaj plaws ntawm kev siv server hauv "code".

XML configuration file parser

Tus qauv Python module xml.dom yog siv. Nws zoo nkaus li yooj yim, tab sis thaum lub sij hawm siv tau pom tias tsis muaj cov ntaub ntawv meej meej thiab cov piv txwv ntawm lub network siv qhov module no.

    tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") for elem in mconfig: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].first gconfig["mysql_username"]=elem.getElementsByTagName("username")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("password")[0].firstChild.data"gconfig["mysql_password"]=elem.getElementsByTagName("password")[0].firstChild_name"name"gconfig] =elem.getElementsByTagName("basename")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") rau elem hauv dconfig: gconfig["broadcast"]=elem.getElementsByTagName(") firstChild.data gconfig["dhcp_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["dhcp_LeaseTime"]=elem.getElementsByTagName("LeaseTime")[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_Server"]=elem.getElementsByTagName("DHCPServer")[0].firstChild. =elem.getElementsByTagName("defaultMask")[0].firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data gconfig["dhcp_default"TagName"]=elem. defaultDNS")[1].firstChild.data qconfig=tree.getElementsByTagName("query") rau elem hauv qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[1].firstChild.data rau num. range(int(gconfig["offer_count"])): gconfig["offer_"+str(num+0)]=elem.getElementsByTagName("offer_"+str(num+0))[XNUMX].firstChild.data gconfig ["history_sql"]=elem.getElementsByTagName("history_sql")[XNUMX].firstChild.data options=tree.getElementsByTagName("options") rau elem hauv kev xaiv: node=elem.getElementsByTagName("options") : optionsMod.append(options.firstChild.data)

Multithreading

Oddly txaus, multithreading hauv Python yog siv kom meej meej thiab yooj yim.

def PacketWork(data,addr): ... # kev siv ntawm parsing cov khoom xa tuaj thiab teb rau nws ... thaum muaj tseeb: cov ntaub ntawv, addr = udp_socket.recvfrom(1024) # tos UDP pob ntawv xov = threading.Thread( target=PacketWork , args=(data,addr,)).start() # raws li nws tuaj - peb tso lub yav dhau los teev PacketWork muaj nuj nqi nyob rau hauv keeb kwm yav dhau nrog tsis muaj thaum threading.active_count() >gconfig["dhcp_ThreadLimit"]: sij hawm. pw tsaug zog (1) # yog tus lej Muaj ntau cov xov twb tau khiav dua li hauv qhov chaw, peb tos kom txog thaum muaj tsawg dua

Txais / xa DHCP pob ntawv

Txhawm rau cuam tshuam UDP pob ntawv los ntawm daim npav network, koj yuav tsum "nce" lub qhov (socket):

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

, qhov twg cov chij yog:

  • AF_INET - txhais tau tias qhov chaw nyob hom yuav yog IP: chaw nres nkoj. Tej zaum kuj yuav muaj AF_UNIX - qhov chaw nyob yog muab los ntawm cov ntaub ntawv npe.
  • SOCK_DGRAM - txhais tau hais tias peb tsis lees txais "pob ntawv nyoos", tab sis ib qho uas twb dhau los ntawm lub foob pob hluav taws, thiab nrog cov pob ntawv txiav ib nrab. Cov. peb tsuas yog tau txais UDP pob ntawv yam tsis muaj "lub cev" feem ntawm UDP pob ntawv qhwv. Yog tias koj siv tus chij SOCK_RAW, ces koj tseem yuav tau txheeb xyuas qhov "wrapper".

Xa ib pob ntawv tuaj yeem zoo li kev tshaj tawm:

                    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #hloov lub qhov (socket) rau kev tshaj tawm xa tawm rz=udp_socket.sendto(packet, (gconfig["broadcast"],68))

, thiab mus rau qhov chaw nyob "qhov twg pob tuaj ntawm":

                        udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # hloov lub qhov (socket) rau ntau hom mloog rz=udp_socket.sendto(packetack, addr)

, qhov twg SOL_SOCKET txhais tau tias "cov txheej txheem theem" ​​rau kev teeb tsa kev xaiv,

, SO_BROADCAST kev xaiv uas lub kaus mom hlau yog "tshaj tawm"

  , SO_REUSEADDR kev xaiv hloov lub qhov (socket) rau "ntau tus neeg mloog" hom. Hauv txoj kev xav, nws tsis tsim nyog rau qhov no, tab sis ntawm ib qho ntawm FreeBSD servers uas kuv tau sim, cov cai tsis ua haujlwm yam tsis muaj qhov kev xaiv no.

Parsing ib pob ntawv DHCP

Nov yog qhov kuv nyiam Python tiag tiag. Nws hloov tawm tias tawm ntawm lub thawv nws tso cai rau koj kom hloov tau yooj yim nrog cov bytecode. Tso cai rau nws yooj yim heev txhais rau hauv tus lej lej, cov hlua thiab hex - i.e. qhov no yog qhov peb yuav tsum nkag siab txog cov qauv ntawm pob. Yog li, piv txwv li, koj tuaj yeem tau txais ntau ntawm bytes hauv HEX thiab tsuas yog bytes:

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

, ntim cov bytes rau hauv cov qauv:

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

Tau txais IP los ntawm cov qauv:

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

Thiab vice versa:

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

Tam sim no tag nrho 😉

Tau qhov twg los: www.hab.com

Ntxiv ib saib