DHCP+Mysql server muPython

DHCP+Mysql server muPython

Chinangwa chechirongwa ichi chaive:

  • Kudzidza nezve DHCP pane IPv4 network
  • Kudzidza Python (zvishoma kupfuura kubva pakatanga 😉)
  • kutsiva server DB2DHCP (forogo yangu), yepakutanga pano, iyo iri kuramba ichiwedzera kuoma kuungana kune itsva OS. Uye ini handifarire kuti ibhinari kuti hapana nzira ye "kuchinja izvozvi"
  • kuwana sevha yeDHCP inoshanda nekugona kusarudza kero yeIP yemunyoreri uchishandisa mac yemunyoreri kana kushandura mac + port musanganiswa (Sarudzo 82)
  • kunyora rimwe bhasikoro (Ah! ichi ndicho chiitiko chandinofarira)
  • kugamuchira makomendi pamusoro pekupihwa kwako kwekirabhu paHabrahabr (kana zvirinani zvakadaro, kukokwa) 😉

Mhedzisiro: inoshanda 😉 Yakaedzwa paFreeBSD uye Ubuntu OS. Theoretically, iyo kodhi inogona kukumbirwa kushanda pasi pese OS, nekuti Ikoko kunoratidzika kunge kusina zvisungo zvakananga mukodhi.
Kungwarira! Pane zvakawanda zvichauya.

Batanidza kune repository yeamateurs "bata uri mupenyu".

Nzira yekuisa, kugadzirisa uye kushandisa chigumisiro che "kudzidza hardware" yakaderera zvikuru, uyezve zvishoma dzidziso pamusoro peDHCP protocol. Ini zvangu. Uye zvenhoroondo 😉

Dzidziso shoma

Chii chinonzi DHCP

Iyi itiweki protocol inobvumira mudziyo kuwana IP kero yayo (nemamwe maparamita senge gedhi, DNS, nezvimwewo) kubva kuDHCP server. Mapaketi anotsinhaniswa uchishandisa iyo UDP protocol. Iyo general musimboti wekushanda kwechishandiso kana uchikumbira network paramita ndeiyi inotevera:

  1. Mudziyo (mutengi) anotumira chikumbiro cheUDP kutepfenyura (DHCPDISCOVER) panetiweki yese nechikumbiro "zvakanaka, mumwe munhu ndipe kero yeIP." Uyezve, kazhinji (asi kwete nguva dzose) chikumbiro chinoitika kubva pachiteshi 68 (mabviro), uye nzvimbo yacho chiteshi 67 (kuenda). Mimwe michina inotumirawo mapaketi kubva pachiteshi 67. Iyo MAC kero yemutengi mudziyo inosanganisirwa mukati meDHCPDISCOVER package.
  2. Masevha ese eDHCP anowanikwa panetiweki (uye panogona kunge paine akati wandei) anoumba DHCPOFFER inopa ine network marongero emudziyo wakatumira DHCPDISCOVER, uye zvakare kutepfenyura panetiweki. Kuzivikanwa kuti pakiti iri rakaitirwa ani kunoenderana nekero yeMAC yemutengi yakapihwa kare muchikumbiro cheDHCPDISCOVER.
  3. Mutengi anogamuchira mapaketi ane zvikumbiro zvemaseti etiweki, anosarudza iyo inonyanya kukwezva (maitiro anogona kunge akasiyana, semuenzaniso, nguva yekutakura kwepaketi, nhamba yenzira dzepakati), uye anoita "chikumbiro chepamutemo" DHCPREQUEST nemasetirwo etiweki. kubva kuDHCP server yainoda. Muchiitiko ichi, pakiti inoenda kune imwe sevha yeDHCP.
  4. Sevha yakagamuchira DHCPREQUEST inotumira DHCPACK fomati packet, mairi inonyora zvakare marongero etiweki akagadzirirwa mutengi uyu.

DHCP+Mysql server muPython

Mukuwedzera, kune DHCPINFORM mapaketi anouya kubva kumutengi, uye chinangwa chekuzivisa DHCP server kuti "mutengi mupenyu" uye ari kushandisa yakapihwa network marongero. Mukuita kwesevha iyi, mapaketi aya haana hanya.

Package format

Kazhinji, Ethernet packet frame inotaridzika seizvi:

DHCP+Mysql server muPython

Muchiitiko chedu, isu tichafunga chete data zvakananga kubva mukati meiyo UDP packet, isina OSI layer protocol misoro, inova iyo DHCP chimiro:

DHDCPDISCOVER

Saka, maitiro ekuwana IP kero yemudziyo inotanga nemutengi weDHCP achitumira chikumbiro chekutepfenyura kubva pachiteshi 68 kusvika 255.255.255.255:67. Mupakeji iyi, mutengi anosanganisira kero yake yeMAC, pamwe chete nezvaanoda chaizvo kugamuchira kubva kuDHCP server. Iyo pasuru chimiro inotsanangurwa mutafura iri pazasi.

DHCPDISCOVER Packet Structure Table

Chinzvimbo muhomwe
Zita rakakosha
Muenzaniso:
Nhanganyaya
Byte
Tsananguro

1
Boot Chikumbiro
1
Hex
1
Mharidzo mhando. 1 - chikumbiro kubva kune mutengi kuenda kune server, 2 - mhinduro kubva kune server kune mutengi

2
Hardware mhando
1
Hex
1
Rudzi rwekero yehardware, mune iyi protocol 1 - MAC

3
Hurefu hwekero dze Hardware
6
Hex
1
Mudziyo MAC kero kureba

4
Hops
1
Hex
1
Nhamba yenzira dzepakati

5
Chiitiko ID
23:cf:de:1d
Hex
4
Yakasarudzika kutengeserana identifier. Inogadzirwa nemutengi pakutanga kwekukumbira kushanda

7
Chechipiri chakapera
0
Hex
4
Nguva mumasekonzi kubva pakutanga kwemaitiro ekutora kero

9
Boot mireza
0
Hex
2
Mimwe mireza inogona kusetwa kuratidza protocol paramita

11
Mutengi IP kero
0.0.0.0
Mutsara
4
Mutengi IP kero (kana iripo)

15
IP kero yemutengi wako
0.0.0.0
Mutsara
4
IP kero inopihwa neserver (kana iripo)

19
Next server IP kero
0.0.0.0
Mutsara
4
Sevha IP kero (kana ichizivikanwa)

23
Relay agent IP kero
172.16.114.41
Mutsara
4
IP kero yemumiriri wekutumira (semuenzaniso, switch)

27
Mutengi MAC kero
14:d6:4d:a7:c9:55
Hex
6
MAC kero yemutumiri wepaketi (mutengi)

31
Client hardware kero padding
 
Hex
10
Reserved chigaro. Kazhinji inozadzwa ne zero

41
Server host name
 
Mutsara
64
DHCP server zita. Kazhinji haisi kutapurirana

105
Boot file zita
 
Mutsara
128
Zita refaira pane sevha rinoshandiswa ne diskless zviteshi paunenge uchibhota

235
Magic cookies
63: 82: 53: 63
Hex
4
"Magic" nhamba, maererano nezvayo, incl. unogona kuona kuti pakiti iyi ndeye DHCP protocol

DHCP sarudzo. Inogona kuenda chero zvakarongeka

236
Nhamba yesarudzo
53
Dec
1
Sarudzo 53, iyo inotsanangura iyo DHCP packet mhando

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

 
Option urefu
1
Dec
1

 
Option value
1
Dec
1

 
Nhamba yesarudzo
50
Dec
1
Ndeipi IP kero iyo mutengi anoda kugamuchira?

 
Option urefu
4
Dec
1

 
Option value
172.16.134.61
Mutsara
4

 
Nhamba yesarudzo
55
 
1
Network parameters yakakumbirwa nemutengi. Kuumbwa kunogona kusiyana

01 - Network mask
03 - Gateway
06 - DNS
oc - Zita remugamuchiri
0f - network domain zita
1c - kero yechikumbiro chekutepfenyura (nhepfenyuro)
42 - TFTP server zita
79 - Classless Static Nzira

 
Option urefu
8
 
1

 
Option value
01:03:06:0c:0f:1c:42:79
 
8

 
Nhamba yesarudzo
82
Dec
 
Sarudzo 82, iyo inotumira iyo MAC kero yeinodzokorora mudziyo uye humwe humwe hunokosha.

Kazhinji kacho, iyi ndiyo chiteshi cheshanduko iyo kuguma kweDHCP mutengi inomhanya.Iyi sarudzo ine mamwe ma parameters.. Yokutanga byte nhamba ye "suboption", yechipiri kureba kwayo, ipapo kukosha kwayo.

Muchiitiko ichi, mune sarudzo 82, ma-sub-sarudzo akaiswa:
Agent Circuit ID = 00:04:00:01:00:04, uko mabhaiti maviri ekupedzisira ari DHCP client port kwakabva chikumbiro.

Agent Remote ID = 00:06:c8:be:19:93:11:48 - MAC kero yeDHCP inodzokorora mudziyo

 
Option urefu
18
Dec
 

 
Option value
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
Hex
 

 
Kupera kwepasuru
255
Dec
1
255 inomiririra kupera kwepaketi

DHCPOFFER

Sevha painongogamuchira DHCPDISCOVER packet uye ikaona kuti inogona kupa mutengi chimwe chinhu kubva pane yakumbirwa, inobva yaburitsa mhinduro yayo - DHCPDISCOVER. Mhinduro inotumirwa kuchiteshi "kubva kwayakabva", nekuparidzirwa, nokuti panguva ino, mutengi haasati ave ne IP kero, saka inogona chete kugamuchira pakiti kana yakatumirwa nenhepfenyuro. Mutengi anoona kuti iyi pasuru yake nekero yake yeMAC mukati mepasuru, pamwe nenhamba yekutengeserana yaanogadzira panguva inogadzirwa pasuru yekutanga.

DHCPOFFER Packet Structure Table

Chinzvimbo muhomwe
Zita rekukosha (rakajairika)
Muenzaniso:
Nhanganyaya
Byte
Tsananguro

1
Boot Chikumbiro
1
Hex
1
Mharidzo mhando. 1 - chikumbiro kubva kune mutengi kuenda kune server, 2 - mhinduro kubva kune server kune mutengi

2
Hardware mhando
1
Hex
1
Rudzi rwekero yehardware, mune iyi protocol 1 - MAC

3
Hurefu hwekero dze Hardware
6
Hex
1
Mudziyo MAC kero kureba

4
Hops
1
Hex
1
Nhamba yenzira dzepakati

5
Chiitiko ID
23:cf:de:1d
Hex
4
Yakasarudzika kutengeserana identifier. Inogadzirwa nemutengi pakutanga kwekukumbira kushanda

7
Chechipiri chakapera
0
Hex
4
Nguva mumasekonzi kubva pakutanga kwemaitiro ekutora kero

9
Boot mireza
0
Hex
2
Mimwe mireza inogona kusetwa kuratidza protocol paramita. Mune ino kesi, 0 inoreva iyo Unicast chikumbiro mhando

11
Mutengi IP kero
0.0.0.0
Mutsara
4
Mutengi IP kero (kana iripo)

15
IP kero yemutengi wako
172.16.134.61
Mutsara
4
IP kero inopihwa neserver (kana iripo)

19
Next server IP kero
0.0.0.0
Mutsara
4
Sevha IP kero (kana ichizivikanwa)

23
Relay agent IP kero
172.16.114.41
Mutsara
4
IP kero yemumiriri wekutumira (semuenzaniso, switch)

27
Mutengi MAC kero
14:d6:4d:a7:c9:55
Hex
6
MAC kero yemutumiri wepaketi (mutengi)

31
Client hardware kero padding
 
Hex
10
Reserved chigaro. Kazhinji inozadzwa ne zero

41
Server host name
 
Mutsara
64
DHCP server zita. Kazhinji haisi kutapurirana

105
Boot file zita
 
Mutsara
128
Zita refaira pane sevha rinoshandiswa ne diskless zviteshi paunenge uchibhota

235
Magic cookies
63: 82: 53: 63
Hex
4
"Magic" nhamba, maererano nezvayo, incl. unogona kuona kuti pakiti iyi ndeye DHCP protocol

DHCP sarudzo. Inogona kuenda chero zvakarongeka

236
Nhamba yesarudzo
53
Dec
1
Sarudzo 53, iyo inotsanangura iyo DHCP 2 packet mhando - DHCPOFFER

 
Option urefu
1
Dec
1

 
Option value
2
Dec
1

 
Nhamba yesarudzo
1
Dec
1
Sarudzo yekupa mutengi weDHCP network mask

 
Option urefu
4
Dec
1

 
Option value
255.255.224.0
Mutsara
4

 
Nhamba yesarudzo
3
Dec
1
Sarudzo yekupa mutengi weDHCP gedhi rekutanga

 
Option urefu
4
Dec
1

 
Option value
172.16.12.1
Mutsara
4

 
Nhamba yesarudzo
6
Dec
1
Sarudzo yekupa DHCP kune DNS mutengi

 
Option urefu
4
Dec
1

 
Option value
8.8.8.8
Mutsara
4

 
Nhamba yesarudzo
51
Dec
1
Hupenyu hweiyo yakapihwa network paramita mumasekondi, mushure meizvozvo mutengi weDHCP anofanira kuvakumbira zvakare

 
Option urefu
4
Dec
1

 
Option value
86400
Dec
4

 
Nhamba yesarudzo
82
Dec
1
Sarudzo 82, inodzokorora zvakauya muDHCPDISCOVER

 
Option urefu
18
Dec
1

 
Option value
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:muec
Dec
18

 
Kupera kwepasuru
255
Dec
1
255 inomiririra kupera kwepaketi

DHCPREQUEST

Mushure mekunge mutengi agamuchira DHCPOFFER, anoumba pakiti achikumbira network parameters kwete kune ese DHCP maseva pane network, asi kune imwe chete chaiyo, iyo iyo DHCPOFFER inopa iye "aida" zvakanyanya. Iyo "se" maitiro anogona kuve akasiyana uye anoenderana nemutengi kuita DHCP. Anogamuchira chikumbiro anotsanangurwa achishandisa kero yeMAC yeDHCP server. Zvakare, DHCPREQUEST packet inogona kutumirwa nemutengi pasina kutanga yagadzira DHCPDISCOVER, kana IP kero yeserver yatowanikwa kare.

DHCPREQUEST Packet Structure Table

Chinzvimbo muhomwe
Zita rekukosha (rakajairika)
Muenzaniso:
Nhanganyaya
Byte
Tsananguro

1
Boot Chikumbiro
1
Hex
1
Mharidzo mhando. 1 - chikumbiro kubva kune mutengi kuenda kune server, 2 - mhinduro kubva kune server kune mutengi

2
Hardware mhando
1
Hex
1
Rudzi rwekero yehardware, mune iyi protocol 1 - MAC

3
Hurefu hwekero dze Hardware
6
Hex
1
Mudziyo MAC kero kureba

4
Hops
1
Hex
1
Nhamba yenzira dzepakati

5
Chiitiko ID
23:cf:de:1d
Hex
4
Yakasarudzika kutengeserana identifier. Inogadzirwa nemutengi pakutanga kwekukumbira kushanda

7
Chechipiri chakapera
0
Hex
4
Nguva mumasekonzi kubva pakutanga kwemaitiro ekutora kero

9
Boot mireza
8000
Hex
2
Mimwe mireza inogona kusetwa kuratidza protocol paramita. Muchiitiko ichi, "nhepfenyuro" yakagadzirirwa

11
Mutengi IP kero
0.0.0.0
Mutsara
4
Mutengi IP kero (kana iripo)

15
IP kero yemutengi wako
172.16.134.61
Mutsara
4
IP kero inopihwa neserver (kana iripo)

19
Next server IP kero
0.0.0.0
Mutsara
4
Sevha IP kero (kana ichizivikanwa)

23
Relay agent IP kero
172.16.114.41
Mutsara
4
IP kero yemumiriri wekutumira (semuenzaniso, switch)

27
Mutengi MAC kero
14:d6:4d:a7:c9:55
Hex
6
MAC kero yemutumiri wepaketi (mutengi)

31
Client hardware kero padding
 
Hex
10
Reserved chigaro. Kazhinji inozadzwa ne zero

41
Server host name
 
Mutsara
64
DHCP server zita. Kazhinji haisi kutapurirana

105
Boot file zita
 
Mutsara
128
Zita refaira pane sevha rinoshandiswa ne diskless zviteshi paunenge uchibhota

235
Magic cookies
63: 82: 53: 63
Hex
4
"Magic" nhamba, maererano nezvayo, incl. unogona kuona kuti pakiti iyi ndeye DHCP protocol

DHCP sarudzo. Inogona kuenda chero zvakarongeka

236
Nhamba yesarudzo
53
Dec
3
Sarudzo 53, iyo inotsanangura iyo DHCP packet mhando 3 - DHCPREQUEST

 
Option urefu
1
Dec
1

 
Option value
3
Dec
1

 
Nhamba yesarudzo
61
Dec
1
Mutengi ID: 01 (yeEhernet) + mutengi MAC kero

 
Option urefu
7
Dec
1

 
Option value
01:2c:ab:25:ff:72:a6
Hex
7

 
Nhamba yesarudzo
60
Dec
 
"Vendor class identifier". Mune yangu, inoshuma iyo DHCP mutengi vhezheni. Zvichida mamwe maturusi anodzosera chimwe chinhu chakasiyana. Windows semuenzaniso inoshuma MSFT 5.0

 
Option urefu
11
Dec
 

 
Option value
udhcp 0.9.8
Mutsara
 

 
Nhamba yesarudzo
55
 
1
Network parameters yakakumbirwa nemutengi. Kuumbwa kunogona kusiyana

01 - Network mask
03 - Gateway
06 - DNS
oc - Zita remugamuchiri
0f - network domain zita
1c - kero yechikumbiro chekutepfenyura (nhepfenyuro)
42 - TFTP server zita
79 - Classless Static Nzira

 
Option urefu
8
 
1

 
Option value
01:03:06:0c:0f:1c:42:79
 
8

 
Nhamba yesarudzo
82
Dec
1
Sarudzo 82, inodzokorora zvakauya muDHCPDISCOVER

 
Option urefu
18
Dec
1

 
Option value
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:muec
Dec
18

 
Kupera kwepasuru
255
Dec
1
255 inomiririra kupera kwepaketi

DHCPACK

Sekusimbisa kuti "hongu, ndizvozvo, iyi ndiyo kero yako yeIP, uye ini handisi kuzopa kune ani zvake" kubva kuDHCP server, pakiti muDHCPACK fomati kubva kune server kune mutengi anoshumira. Inotumirwa kutepfenyura sezvakangoita mamwe mapaketi. Kunyangwe, mune kodhi iri pazasi yeDHCP sevha yakaitwa muPython, kana zvikaitika, ini ndinodzokorora chero chikumbiro chekutepfenyura nekutumira pakiti kune chaiyo mutengi IP, kana yave kutozivikanwa. Uyezve, sevha yeDHCP haina basa zvachose kana DHCPACK packet yasvika kumutengi. Kana mutengi akasagamuchira DHCPACK, mushure mechinguva inongodzokorora DHCPREQUEST

DHCPACK Packet Structure Table

Chinzvimbo muhomwe
Zita rekukosha (rakajairika)
Muenzaniso:
Nhanganyaya
Byte
Tsananguro

1
Boot Chikumbiro
2
Hex
1
Mharidzo mhando. 1 - chikumbiro kubva kune mutengi kuenda kune server, 2 - mhinduro kubva kune server kune mutengi

2
Hardware mhando
1
Hex
1
Rudzi rwekero yehardware, mune iyi protocol 1 - MAC

3
Hurefu hwekero dze Hardware
6
Hex
1
Mudziyo MAC kero kureba

4
Hops
1
Hex
1
Nhamba yenzira dzepakati

5
Chiitiko ID
23:cf:de:1d
Hex
4
Yakasarudzika kutengeserana identifier. Inogadzirwa nemutengi pakutanga kwekukumbira kushanda

7
Chechipiri chakapera
0
Hex
4
Nguva mumasekonzi kubva pakutanga kwemaitiro ekutora kero

9
Boot mireza
8000
Hex
2
Mimwe mireza inogona kusetwa kuratidza protocol paramita. Muchiitiko ichi, "nhepfenyuro" yakagadzirirwa

11
Mutengi IP kero
0.0.0.0
Mutsara
4
Mutengi IP kero (kana iripo)

15
IP kero yemutengi wako
172.16.134.61
Mutsara
4
IP kero inopihwa neserver (kana iripo)

19
Next server IP kero
0.0.0.0
Mutsara
4
Sevha IP kero (kana ichizivikanwa)

23
Relay agent IP kero
172.16.114.41
Mutsara
4
IP kero yemumiriri wekutumira (semuenzaniso, switch)

27
Mutengi MAC kero
14:d6:4d:a7:c9:55
Hex
6
MAC kero yemutumiri wepaketi (mutengi)

31
Client hardware kero padding
 
Hex
10
Reserved chigaro. Kazhinji inozadzwa ne zero

41
Server host name
 
Mutsara
64
DHCP server zita. Kazhinji haisi kutapurirana

105
Boot file zita
 
Mutsara
128
Zita refaira pane sevha rinoshandiswa ne diskless zviteshi paunenge uchibhota

235
Magic cookies
63: 82: 53: 63
Hex
4
"Magic" nhamba, maererano nezvayo, incl. unogona kuona kuti pakiti iyi ndeye DHCP protocol

DHCP sarudzo. Inogona kuenda chero zvakarongeka

236
Nhamba yesarudzo
53
Dec
3
Sarudzo 53, iyo inotsanangura iyo DHCP packet mhando 5 - DHCPACK

 
Option urefu
1
Dec
1

 
Option value
5
Dec
1

 
Nhamba yesarudzo
1
Dec
1
Sarudzo yekupa mutengi weDHCP network mask

 
Option urefu
4
Dec
1

 
Option value
255.255.224.0
Mutsara
4

 
Nhamba yesarudzo
3
Dec
1
Sarudzo yekupa mutengi weDHCP gedhi rekutanga

 
Option urefu
4
Dec
1

 
Option value
172.16.12.1
Mutsara
4

 
Nhamba yesarudzo
6
Dec
1
Sarudzo yekupa DHCP kune DNS mutengi

 
Option urefu
4
Dec
1

 
Option value
8.8.8.8
Mutsara
4

 
Nhamba yesarudzo
51
Dec
1
Hupenyu hweiyo yakapihwa network paramita mumasekondi, mushure meizvozvo mutengi weDHCP anofanira kuvakumbira zvakare

 
Option urefu
4
Dec
1

 
Option value
86400
Dec
4

 
Nhamba yesarudzo
82
Dec
1
Sarudzo 82, inodzokorora zvakauya muDHCPDISCOVER

 
Option urefu
18
Dec
1

 
Option value
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:muec
Dec
18

 
Kupera kwepasuru
255
Dec
1
255 inomiririra kupera kwepaketi

Kuiswa

Iko kuisirwa kunosanganisira kuisa iyo python modules inodiwa pabasa. Zvinofungidzirwa kuti MySQL yakatoiswa uye yakagadziriswa.

FreeBSD

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

Ubuntu

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

Isu tinogadzira dhatabhesi reMySQL, torodha pydhcp.sql dump mairi, uye gadzirisa faira rekugadzirisa.

Kugadziriswa

Ese masetin'i ese ari mu xml faira. Reference file:

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 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 sarudza ip,mask,router,dns kubva kuvashandisi uko upper(mac)=upper('{option_3_AgentRemoteId_hex}') uye upper(port)=upper('{option_1_AgentCircuitId_port_hex}') sarudza ip,mask,router,dns kubva kuvashandisi uko upper(mac)=upper('{sw_mac}') uye upper(port)=upper('{sw_port82}') sarudza ip,mask,router,dns kubva kuvashandisi uko upper(mac)=upper('{ClientMacAddress}') isa munhoroondo (id,dt,mac,ip,comment) kukosha (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')

Iye zvino mune zvimwe zvakadzama pama tag:

Iyo dhcpserver chikamu chinotsanangura zvigadziriso zvekutanga sevha, zvinoti:

  • host - ndeipi IP kero inoteererwa neserver pachiteshi 67
  • kutepfenyura - inova ip nhepfenyuro yeDHCPOFFER neDHCPACK
  • DHCPServer - chii ip yeDHCP server
  • LeaseTime nguva yekurenda yekero yakapihwa IP
  • ThreadLimit - ingani tambo dziri kushanda panguva imwe chete kugadzirisa inouya UDP mapaketi pachiteshi 67. Inofanirwa kubatsira pamapurojekiti akaremerwa 😉
  • defaultMask,defaultRouter,defaultDNS - chii chinopihwa kune munyoreri nekukasira kana IP inowanikwa mudhatabhesi, asi mamwe maparamendi haana kutsanangurwa kwairi.

mysql chikamu:

host, username, password, basename - zvese zvinozvitaurira. Iyo yekufungidzira dhatabhesi chimiro inotumirwa pa GitHub

Chikamu chemubvunzo: zvikumbiro zvekugamuchira OFFER / ACK zvinotsanangurwa pano:

  • offer_count - nhamba yemitsara ine zvikumbiro zvinodzorera mhedzisiro senge ip, mask, router, dns
  • offer_n - query string. Kana kudzoka kusina chinhu, wobva waita zvinotevera kupa chikumbiro
  • history_sql - mubvunzo unonyora, semuenzaniso, kune "mvumo yenhoroondo" yeanonyoresa

Zvikumbiro zvinogona kusanganisira chero shanduko kubva muchikamu chesarudzo kana sarudzo kubva kuDHCP protocol.

Options chikamu. Apa ndipo pazvinowedzera kunakidza. Pano tinokwanisa kugadzira mavhezheni atinogona kushandisa gare gare muchikamu chemubvunzo.

Somuenzaniso:

option_82_hex:sw_port1:20:22

, mutsara uyu wekuraira unotora mutsara wese wakauya muDHCP yekukumbira sarudzo 82, mune hex fomati, mumhando kubva pa20 kusvika 22 bytes inosanganisirwa uye inoiisa mune itsva shanduko sw_port1 (chinja chiteshi kubva kwakauya chikumbiro)

option_82_hex:sw_mac:26:40

, tsanangura shanduko ye sw_mac, uchitora hex kubva muchikamu 26:40

Iwe unogona kuona ese angangoita sarudzo anogona kushandiswa mumibvunzo nekutanga sevha ne -d switch. Tichaona chimwe chinhu chakafanana neiyi log:

--a DHCPINFORM packet yakasvika pachiteshi 67, kubva 0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': '0025224MacAddressy'%764BxB'address' b'00% b' Jxd7d' , 'HType': 'Ethernet', 'HostName': b'x91xa5xe0xa3xa5xa9-x8fx8a', 'ReqListDNS': Ichokwadi, 'ReqListDomainName': Chokwadi, 'ReqListPerfowmRouterDiscover': Chokwadi, 'ReqListRouter': TrueStatic, 'ReqListReute': True, 'Route' 'ReqListSubnetM ask ': Ichokwadi, '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': 'DHHCPINFORM', 'option12': 53, 'option53': 55, 'option55': 60, 'option60': 61, 'option61': 82, 'option82': 82, ' option_12_byte': b'x01x06x00x04x00x01x00x06x02x08x00x06' b'x00x1x9eXx2exb82xad', 'option_12010600040001000602080006001_hex': '589p tion_2_len': 82 18, 'option_82_str': "b'x12x01x06x00x04x00x01x00x06x02x08x00x06x00x1eXx9exb2xad'", 'mhedzisiro': Nhema, '768secs': 'siaddr': '0.0.0.0', 'sw_mac': '001e589eb2ad', 'sw_port1': '06', 'xidbyte': b'

Saizvozvo, tinokwanisa kuputira chero shanduko mu {} uye ichashandiswa mumubvunzo weSQL.

Ngatitorei nhoroondo kuti mutengi akagamuchira IP kero:

DHCP+Mysql server muPython

DHCP+Mysql server muPython

Server kutanga

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

- d console yekubuda mode DEBUG
- c <filename> kumisikidza faira

Kubvisa

Uye ikozvino mamwe mashoko ekushandisa sevha muPython. Kurwadza. Python yakadzidzwa panhunzi. Nguva zhinji dzinogadzirwa nenzira yekuti "wow, neimwe nzira ndaita kuti ishande." Haina kugadziridzwa zvachose, uye yakasiiwa mune iyi fomu kunyanya nekuda kweruzivo rushoma mukukura kwePython. Ini ndichagara pane zvinonyanya kufadza maficha ekushandiswa kweseva mu "code".

XML yekumisikidza faira parser

Iyo yakajairwa Python module xml.dom inoshandiswa. Zvinoita sezviri nyore, asi panguva yekushandiswa pakanga paine kushaikwa kunooneka kwezvinyorwa zvakajeka uye mienzaniso pane network uchishandisa module iyi.

    tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") for elem in mconfig: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["mysql_username"]=elem.getElementsByTagName("zita rekushandisa")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("password")[0].firstChild.data gconfig["mysql_base) =elem.getElementsByTagName("basename")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") for elem in 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 gpconfig["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") for elem in qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.data yenhamba mu 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("options") for elem in options: node=elem.getElementsByTagName("option") yezvisarudzo mu node : optionsMod.append(options.firstChild.data)

Multithreading

Zvinoshamisa kuti, kuwanda kwekuverenga muPython kunoitwa zvakajeka uye zviri nyore.

def PacketWork(data, addr): ... # kushandiswa kwekupatsanura pakiti inouya uye nekuipindura ... uku Chokwadi: data, addr = udp_socket.recvfrom(1024) # kumirira UDP packet thread = threading.Thread( target=PacketWork , args=(data,addr,)).start() # sezvayakauya - tinotangisa basa rakambotsanangurwa PacketWork kumashure nema parameters while threading.active_count() >gconfig["dhcp_ThreadLimit"]: nguva. kurara(1) # kana nhamba Pane tambo dzakawanda dzave kutomhanya kupfuura mumaseting, tinomirira kusvika dzave shoma.

Gamuchira / tumira DHCP pakiti

Kuti utore UDP mapaketi anouya kuburikidza netiweki kadhi, unofanirwa "kusimudza" socket:

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

, pane mireza:

  • AF_INET - zvinoreva kuti iyo kero fomati ichave IP: port. Panogonawo kunge paine AF_UNIX - panopihwa kero nezita refaira.
  • SOCK_DGRAM - zvinoreva kuti isu hatigamuchire "pakiti mbishi", asi iyo yakatopfuura nepafirewall, uye ine chikamu chakatemwa pakiti. Avo. isu tinongogamuchira chete UDP pakiti isina "yemuviri" chikamu cheUDP packet wrapper. Kana iwe ukashandisa iyo SOCK_RAW mureza, saka iwe zvakare uchafanirwa kusiyanisa iyi "wrapper".

Kutumira pakiti kunogona kuita senhepfenyuro:

                    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #chinja socket kuti iite kutepfenyura mode rz=udp_socket.sendto(packetack, (gconfig["broadcast"],68))

, uye kukero “kwakabva pasuru”:

                        udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # chinja socket kuti iite vateereri vakawanda rz=udp_socket.sendto(packetack, addr)

, apo SOL_SOCKET zvinoreva "protocol level" yekuseta sarudzo,

, SO_BROADCAST sarudzo yekuti helmet package ndeye "kushambadzirwa"

  ,SO_REUSEADDR sarudzo inochinja socket kuita "vateereri vazhinji" modhi. Mune dzidziso, hazvina basa mune iyi kesi, asi pane imwe yeFreeBSD maseva pandakaedza, iyo kodhi haina kushanda pasina iyi sarudzo.

Kuisa pakiti yeDHCP

Apa ndipo pandainyanya kufarira Python. Zvinoitika kuti kunze kwebhokisi zvinokutendera kuti unyatso kuchinjika neiyo bytecode. Kuibvumira kuti ishandurirwe zviri nyore kwazvo mudecimal values, tambo uye hex - i.e. izvi ndizvo zvatinoda chaizvo kuti tinzwisise chimiro chepasuru. Saka, semuenzaniso, iwe unogona kuwana huwandu hwemabheti muHEX uye mabhayiti chete:

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

, rongedza mabhaiti muchimiro:

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

Tora IP kubva kune chimiro:

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

Uye zvakasiyana:

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

Ndizvo zvese izvozvi 😉

Source: www.habr.com

Voeg