DHCP + Mysql server ile Python

DHCP + Mysql server ile Python

O le fa'amoemoega o lenei poloketi:

  • Aoao e uiga ile DHCP ile IPv4 network
  • A'oa'oina le Python (sili atu teisi nai lo le sasa 😉)
  • suitulaga server DB2DHCP (la'u tui), uluai iinei, lea ua atili ai ona faigata ona faʻapipiʻi mo le OS fou. Ma ou te le fiafia i lena mea o se binary e leai se auala e "suia ai nei"
  • mauaina o se server DHCP galue ma le tomai e filifili ai le tuatusi IP a le tagata fai saofaga e faʻaaoga ai le mac a le tagata fai saofaga poʻo le sui mac + port tuʻufaʻatasia (Filifiliga 82)
  • tusi se isi uila (Oi! o le mea lea e sili ona ou fiafia i ai)
  • mauaina o faʻamatalaga e uiga i lau kalapu-lima i luga o Habrahabr (pe sili atu, o se valaaulia) 😉

I'uga: e aoga 😉 Fa'ata'ita'i ile FreeBSD ma le Ubuntu OS. I le talitonuga, e mafai ona talosagaina le code e galue i lalo o soʻo se OS, aua E foliga mai e leai ni faʻamaufaʻailoga faʻapitoa i le code.
Fa'aeteete! E tele isi mea o le a o'o mai.

So'oga ile fale teu oloa mo amateurs "pa'i ola".

O le faagasologa o le faʻapipiʻiina, faʻatulagaina ma le faʻaaogaina o le taunuuga o le "suʻesuʻeina o meafaigaluega" e sili atu ona maualalo, ona fai ai lea o sina manatu itiiti e uiga i le DHCP protocol. Mo a'u lava. Ma mo talafaasolopito 😉

O sina manatu itiiti

O le a le DHCP

Ole fesoʻotaʻiga fesoʻotaʻiga lea e mafai ai e se masini ona suʻe lona tuatusi IP (ma isi faʻamaufaʻailoga e pei ole faitotoa, DNS, ma isi) mai le DHCP server. E fa'afesuia'i afifi e fa'aaoga ai le UDP protocol. O le taʻiala lautele o le faʻaogaina o le masini pe a talosagaina faʻasologa o fesoʻotaʻiga e faʻapea:

  1. O le masini (client) e tuʻuina atu se talosaga faʻasalalauga UDP (DHCPDISCOVER) i luga o le fesoʻotaʻiga ma le talosaga "lelei, sei tuʻuina mai ia te aʻu se tuatusi IP." E le gata i lea, e masani lava (ae le o taimi uma) o le talosaga e tupu mai le taulaga 68 (punaoa), ma o le taunuuga o le taulaga 67 (taulaga). O nisi masini e auina atu foi afifi mai le taulaga 67. O le tuatusi MAC o le masini kalani o loʻo aofia i totonu o le DHCPDISCOVER package.
  2. O 'au'aunaga uma a le DHCP o lo'o i luga o le 'upega tafa'ilagi (ma atonu o lo'o i ai le tele o latou) faia se DHCPOFFER ofo fa'atasi ai ma feso'otaiga feso'ota'iga mo le masini na tu'uina atu le DHCPDISCOVER, ma fa'asalalauina fo'i i luga ole feso'otaiga. O le fa'ailoaina po'o ai e fa'atatau i ai lenei afifi e fa'atatau i le tuatusi MAC a le kalani na tu'uina atu muamua ile talosaga DHCPDISCOVER.
  3. E talia e le kalani ia pepa o loʻo i ai talosaga mo fesoʻotaʻiga fesoʻotaʻiga, filifili le mea e sili ona manaia (atonu e ese le taʻiala, mo se faʻataʻitaʻiga, le taimi o le tuʻuina atu o pepa, le numera o auala vavalalata), ma faia se "talosaga aloaʻia" DHCPREQUEST faʻatasi ai ma tulaga fesoʻotaʻiga. mai le DHCP server e fiafia i ai. I lenei tulaga, o le afifi e alu i se DHCP server patino.
  4. O le 'au'aunaga na mauaina le DHCPREQUEST na te lafoina se pepa fa'atulagaina o le DHCPACK, lea e toe lisi ai le feso'ota'iga fa'atatau mo lenei tagata fa'atau.

DHCP + Mysql server ile Python

E le gata i lea, o loʻo i ai pepa DHCPINFORM e sau mai le kalani, ma o le faʻamoemoe o le logoina lea o le DHCP server o le "tagata faʻatau o loʻo ola" ma o loʻo faʻaogaina le tuʻuina atu o fesoʻotaiga. I le fa'atinoga a lenei 'au'aunaga, e le amana'ia nei pepa.

Fa'asologa o afifi

I se tulaga lautele, o se atigi pusa Ethernet e pei o lenei:

DHCP + Mysql server ile Python

I la matou tulaga, o le a matou iloiloina naʻo faʻamatalaga saʻo mai mea o loʻo i totonu o le UDP packet, e aunoa ma le OSI layer protocol headers, e taʻua o le DHCP structure:

DHCPDISCOVER

O lea la, o le faagasologa o le mauaina o se tuatusi IP mo se masini e amata i le DHCP client e auina atu se talosaga faasalalau mai le taulaga 68 i le 255.255.255.255:67. I totonu o lenei afifi, o le kalani e aofia ai lona tuatusi MAC, faʻapea foʻi ma le mea tonu e manaʻo e maua mai le DHCP server. O lo'o fa'amatalaina le fa'atulagaga o afifi i le laulau o lo'o i lalo.

DHCPDISCOVER Peke Fa'atulagaina Laulau

Tulaga i totonu o le afifi
igoa taua
Faataitaiga:
Faatomuaga
Fa-byte
Faamalamalamaga

1
Talosaga Fa'avae
1
Hex
1
Ituaiga savali. 1 - talosaga mai le kalani i le 'au'aunaga, 2 - tali mai le 'au'aunaga i le tagata fa'atau

2
Ituaiga meafaigaluega
1
Hex
1
Ituaiga o tuatusi meafaigaluega, i lenei protocol 1 - MAC

3
Uiga o tuatusi o meafaigaluega
6
Hex
1
Ole umi ole tuatusi MAC ole masini

4
Hops
1
Hex
1
Numera o auala feololo

5
Faʻamatalaga ID
23:cf:de:1d
Hex
4
Fa'ailoga tau fefa'ataua'iga tulaga ese. Fausia e le kalani ile amataga ole fa'agaioiga ole talosaga

7
Ua mavae lona lua
0
Hex
4
Taimi i sekone mai le amataga o le faagasologa o le mauaina o se tuatusi

9
Fu'a seevae
0
Hex
2
O nisi fu'a e mafai ona fa'atulaga e fa'ailoa ai fa'amaufa'ailoga

11
tuatusi IP tagata fa'atau
0.0.0.0
Laina
4
tuatusi IP tagata fa'atau (pe a iai)

15
Lau tuatusi IP tagata fa'atau
0.0.0.0
Laina
4
tuatusi IP na ofoina mai e le server (pe a maua)

19
Le isi tuatusi IP server
0.0.0.0
Laina
4
tuatusi IP server (pe a iloa)

23
tuatusi IP sui sooupu
172.16.114.41
Laina
4
tuatusi IP o le sui sooupu (mo se faataitaiga, se ki)

27
tuatusi MAC tagata fa'atau
14:d6:4d:a7:c9:55
Hex
6
tuatusi MAC ole tagata e auina atu pepa (tagata fa'atau)

31
Fa'alava ole tuatusi o mea faigaluega
 
Hex
10
Nofo fa'apolopolo. E masani ona fa'atumu i zeros

41
Igoa talimalo o le server
 
Laina
64
DHCP server igoa. E masani ona le fa'asalalauina

105
Igoa faila faila
 
Laina
128
Igoa faila i luga o le server o loʻo faʻaogaina e nofoaga e leai ni disk pe a faʻapipiʻi

235
Kuki fa'ataulāitu
63: 82: 53: 63
Hex
4
"Magic" numera, e tusa ai ma lea, e aofia ai. e mafai ona e fa'amautu o lenei afifi o le DHCP protocol

DHCP filifiliga. E mafai ona alu i soo se faasologa

236
Numera filifiliga
53
Tesema
1
Filifiliga 53, o loʻo faʻamaonia ai le ituaiga o pusa DHCP

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

 
Filifiliga umi
1
Tesema
1

 
Tau filifiliga
1
Tesema
1

 
Numera filifiliga
50
Tesema
1
O le a le tuatusi IP e mana'o le kalani e maua?

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
172.16.134.61
Laina
4

 
Numera filifiliga
55
 
1
Fa'asologa o feso'otaiga e mana'omia e le kalani. E mafai ona eseese le tuufaatasiga

01 - Ufiufi Network
03 - Faitotoa
06 - DNS
oc — Hostname
0f - igoa ole upegatafa'ilagi
1c - tuatusi o fa'asalalauga talosaga (fa'asalalauga)
42 - TFTP igoa server
79 - Auala Tuto'atasi leai se Vasega

 
Filifiliga umi
8
 
1

 
Tau filifiliga
01:03:06:0c:0f:1c:42:79
 
8

 
Numera filifiliga
82
Tesema
 
Filifiliga 82, lea e tuʻuina atu le tuatusi MAC o le masini toe fai ma nisi faʻaopoopoga o mea taua.

O le tele o taimi, o le taulaga lea o le ki lea e fa'asolo ai le fa'ai'uga o le DHCP client. O lenei filifiliga o lo'o i ai fa'aopoopoga fa'aopoopo, O le byte muamua o le numera o le "suboption", o le lona lua o lona umi, ona taua lea.

I lenei tulaga, i le filifiliga 82, o vaega laiti o loʻo faʻapipiʻiina:
Agent Circuit ID = 00:04:00:01:00:04, lea o le lua bytes mulimuli o le DHCP client port na sau ai le talosaga.

Agent Remote ID = 00:06:c8:be:19:93:11:48 - tuatusi MAC o le masini toe fai DHCP

 
Filifiliga umi
18
Tesema
 

 
Tau filifiliga
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
Hex
 

 
Fa'ai'uga o le afifi
255
Tesema
1
255 o loʻo faʻatusalia le pito o le afifi

DHCPOFFER

O le taimi lava e maua ai e le 'auʻaunaga le DHCPDISCOVER packet ma afai e vaʻaia e mafai ona ofoina atu i le kalani se mea mai le mea na talosagaina, ona faʻatupuina lea o se tali mo ia - DHCPDISCOVER. O le tali e auina atu i le taulaga "mai le mea na sau ai", e ala i faasalalauga, aua i le taimi nei, e leʻi maua e le kalani se tuatusi IP, o le mea lea e naʻo le taliaina o le pepa pe a lafoina e ala i faʻasalalauga. E iloa e le tagata o tausia o se afifi lea mo ia e ala i lona tuatusi MAC i totonu o le afifi, faʻapea foʻi ma le numera o fefaʻatauaiga na te faia i le taimi na faia ai le afifi muamua.

DHCPOFFER Peke Fa'atulagaina laulau

Tulaga i totonu o le afifi
Igoa o le tau (masani)
Faataitaiga:
Faatomuaga
Fa-byte
Faamalamalamaga

1
Talosaga Fa'avae
1
Hex
1
Ituaiga savali. 1 - talosaga mai le kalani i le 'au'aunaga, 2 - tali mai le 'au'aunaga i le tagata fa'atau

2
Ituaiga meafaigaluega
1
Hex
1
Ituaiga o tuatusi meafaigaluega, i lenei protocol 1 - MAC

3
Uiga o tuatusi o meafaigaluega
6
Hex
1
Ole umi ole tuatusi MAC ole masini

4
Hops
1
Hex
1
Numera o auala feololo

5
Faʻamatalaga ID
23:cf:de:1d
Hex
4
Fa'ailoga tau fefa'ataua'iga tulaga ese. Fausia e le kalani ile amataga ole fa'agaioiga ole talosaga

7
Ua mavae lona lua
0
Hex
4
Taimi i sekone mai le amataga o le faagasologa o le mauaina o se tuatusi

9
Fu'a seevae
0
Hex
2
O nisi fu'a e mafai ona fa'atulaga e fa'ailoa ai fa'amaufa'ailoga. I lenei tulaga, 0 o lona uiga o le ituaiga talosaga Unicast

11
tuatusi IP tagata fa'atau
0.0.0.0
Laina
4
tuatusi IP tagata fa'atau (pe a iai)

15
Lau tuatusi IP tagata fa'atau
172.16.134.61
Laina
4
tuatusi IP na ofoina mai e le server (pe a maua)

19
Le isi tuatusi IP server
0.0.0.0
Laina
4
tuatusi IP server (pe a iloa)

23
tuatusi IP sui sooupu
172.16.114.41
Laina
4
tuatusi IP o le sui sooupu (mo se faataitaiga, se ki)

27
tuatusi MAC tagata fa'atau
14:d6:4d:a7:c9:55
Hex
6
tuatusi MAC ole tagata e auina atu pepa (tagata fa'atau)

31
Fa'alava ole tuatusi o mea faigaluega
 
Hex
10
Nofo fa'apolopolo. E masani ona fa'atumu i zeros

41
Igoa talimalo o le server
 
Laina
64
DHCP server igoa. E masani ona le fa'asalalauina

105
Igoa faila faila
 
Laina
128
Igoa faila i luga o le server o loʻo faʻaogaina e nofoaga e leai ni disk pe a faʻapipiʻi

235
Kuki fa'ataulāitu
63: 82: 53: 63
Hex
4
"Magic" numera, e tusa ai ma lea, e aofia ai. e mafai ona e fa'amautu o lenei afifi o le DHCP protocol

DHCP filifiliga. E mafai ona alu i soo se faasologa

236
Numera filifiliga
53
Tesema
1
Filifiliga 53, o loʻo faʻamatalaina le ituaiga DHCP 2 packet - DHCPOFFER

 
Filifiliga umi
1
Tesema
1

 
Tau filifiliga
2
Tesema
1

 
Numera filifiliga
1
Tesema
1
Filifiliga e ofo atu i le tagata o tausia le DHCP se masini fesoʻotaʻiga

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
255.255.224.0
Laina
4

 
Numera filifiliga
3
Tesema
1
Filifiliga e ofo atu i le kalani DHCP se faitotoa e le mafai

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
172.16.12.1
Laina
4

 
Numera filifiliga
6
Tesema
1
Filifiliga e ofo atu le DHCP ile DNS client

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
8.8.8.8
Laina
4

 
Numera filifiliga
51
Tesema
1
O le olaga atoa o laina fesoʻotaʻiga tuʻuina atu i sekone, a maeʻa e tatau ona toe talosagaina e le DHCP client

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
86400
Tesema
4

 
Numera filifiliga
82
Tesema
1
Filifiliga 82, toe fai le mea na sau ile DHCPDISCOVER

 
Filifiliga umi
18
Tesema
1

 
Tau filifiliga
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:e
Tesema
18

 
Fa'ai'uga o le afifi
255
Tesema
1
255 o loʻo faʻatusalia le pito o le afifi

DHCPREQUEST

A mae'a ona maua e le kalani le DHCPOFFER, na te faia se pepa e talosagaina ai laina feso'otaiga e le o DHCP uma i luga o le upega tafailagi, ae na'o le tasi le mea patino, o lana DHCPOFFER ofo atu na te "fiafia i ai". Ole "pei" e mafai ona 'ese'ese ma fa'alagolago ile fa'atinoga ole DHCP ale kalani. O le tagata e mauaina le talosaga e faʻamaonia e faʻaaoga ai le tuatusi MAC o le DHCP server. E le gata i lea, o le DHCPREQUEST packet e mafai ona lafo e le kalani e aunoa ma le faia muamua o le DHCPDISCOVER, pe afai o le tuatusi IP a le server ua uma ona maua muamua.

DHCPREQUEST Peke Fa'atulagaina Laulau

Tulaga i totonu o le afifi
Igoa o le tau (masani)
Faataitaiga:
Faatomuaga
Fa-byte
Faamalamalamaga

1
Talosaga Fa'avae
1
Hex
1
Ituaiga savali. 1 - talosaga mai le kalani i le 'au'aunaga, 2 - tali mai le 'au'aunaga i le tagata fa'atau

2
Ituaiga meafaigaluega
1
Hex
1
Ituaiga o tuatusi meafaigaluega, i lenei protocol 1 - MAC

3
Uiga o tuatusi o meafaigaluega
6
Hex
1
Ole umi ole tuatusi MAC ole masini

4
Hops
1
Hex
1
Numera o auala feololo

5
Faʻamatalaga ID
23:cf:de:1d
Hex
4
Fa'ailoga tau fefa'ataua'iga tulaga ese. Fausia e le kalani ile amataga ole fa'agaioiga ole talosaga

7
Ua mavae lona lua
0
Hex
4
Taimi i sekone mai le amataga o le faagasologa o le mauaina o se tuatusi

9
Fu'a seevae
8000
Hex
2
O nisi fu'a e mafai ona fa'atulaga e fa'ailoa ai fa'amaufa'ailoga. I lenei tulaga, ua setiina le "faasalalauga".

11
tuatusi IP tagata fa'atau
0.0.0.0
Laina
4
tuatusi IP tagata fa'atau (pe a iai)

15
Lau tuatusi IP tagata fa'atau
172.16.134.61
Laina
4
tuatusi IP na ofoina mai e le server (pe a maua)

19
Le isi tuatusi IP server
0.0.0.0
Laina
4
tuatusi IP server (pe a iloa)

23
tuatusi IP sui sooupu
172.16.114.41
Laina
4
tuatusi IP o le sui sooupu (mo se faataitaiga, se ki)

27
tuatusi MAC tagata fa'atau
14:d6:4d:a7:c9:55
Hex
6
tuatusi MAC ole tagata e auina atu pepa (tagata fa'atau)

31
Fa'alava ole tuatusi o mea faigaluega
 
Hex
10
Nofo fa'apolopolo. E masani ona fa'atumu i zeros

41
Igoa talimalo o le server
 
Laina
64
DHCP server igoa. E masani ona le fa'asalalauina

105
Igoa faila faila
 
Laina
128
Igoa faila i luga o le server o loʻo faʻaogaina e nofoaga e leai ni disk pe a faʻapipiʻi

235
Kuki fa'ataulāitu
63: 82: 53: 63
Hex
4
"Magic" numera, e tusa ai ma lea, e aofia ai. e mafai ona e fa'amautu o lenei afifi o le DHCP protocol

DHCP filifiliga. E mafai ona alu i soo se faasologa

236
Numera filifiliga
53
Tesema
3
Filifiliga 53, lea e faʻamatalaina ai le ituaiga DHCP packet type 3 - DHCPREQUEST

 
Filifiliga umi
1
Tesema
1

 
Tau filifiliga
3
Tesema
1

 
Numera filifiliga
61
Tesema
1
ID Client: 01 (mo Ehernet) + tuatusi MAC tagata o tausia

 
Filifiliga umi
7
Tesema
1

 
Tau filifiliga
01:2c:ab:25:ff:72:a6
Hex
7

 
Numera filifiliga
60
Tesema
 
"Fa'ailoa vasega fa'atau". I loʻu tulaga, e lipotia le DHCP client version. Masalo o isi masini e toe faafoi mai se mea ese. Windows mo se faʻataʻitaʻiga lipoti MSFT 5.0

 
Filifiliga umi
11
Tesema
 

 
Tau filifiliga
udhcp 0.9.8
Laina
 

 
Numera filifiliga
55
 
1
Fa'asologa o feso'otaiga e mana'omia e le kalani. E mafai ona eseese le tuufaatasiga

01 - Ufiufi Network
03 - Faitotoa
06 - DNS
oc — Hostname
0f - igoa ole upegatafa'ilagi
1c - tuatusi o fa'asalalauga talosaga (fa'asalalauga)
42 - TFTP igoa server
79 - Auala Tuto'atasi leai se Vasega

 
Filifiliga umi
8
 
1

 
Tau filifiliga
01:03:06:0c:0f:1c:42:79
 
8

 
Numera filifiliga
82
Tesema
1
Filifiliga 82, toe fai le mea na sau ile DHCPDISCOVER

 
Filifiliga umi
18
Tesema
1

 
Tau filifiliga
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:e
Tesema
18

 
Fa'ai'uga o le afifi
255
Tesema
1
255 o loʻo faʻatusalia le pito o le afifi

DHCPACK

E fai ma faʻamaoniga "ioe, e saʻo, o lau tuatusi IP lea, ma o le a ou le tuʻuina atu i se isi" mai le DHCP server, o se pusa i le DHCPACK format mai le server i le tagata o tausia. E auina atu faʻasalalauga e pei lava o isi afifi. E ui lava, i le faʻailoga o loʻo i lalo mo se DHCP server na faʻatinoina i le Python, i le tulaga lava, ou te faʻaluaina soʻo se talosaga faʻasalalauga e ala i le tuʻuina atu o se pepa i se tagata faʻatau IP, pe afai ua uma ona iloa. E le gata i lea, o le DHCP server e le popole lava pe o le DHCPACK packet ua oʻo atu i le kalani. Afai e le maua e le kalani le DHCPACK, a maeʻa sina taimi e toe fai DHCPREQUEST

DHCPACK Fa'asologa o Fa'asologa o Mea

Tulaga i totonu o le afifi
Igoa o le tau (masani)
Faataitaiga:
Faatomuaga
Fa-byte
Faamalamalamaga

1
Talosaga Fa'avae
2
Hex
1
Ituaiga savali. 1 - talosaga mai le kalani i le 'au'aunaga, 2 - tali mai le 'au'aunaga i le tagata fa'atau

2
Ituaiga meafaigaluega
1
Hex
1
Ituaiga o tuatusi meafaigaluega, i lenei protocol 1 - MAC

3
Uiga o tuatusi o meafaigaluega
6
Hex
1
Ole umi ole tuatusi MAC ole masini

4
Hops
1
Hex
1
Numera o auala feololo

5
Faʻamatalaga ID
23:cf:de:1d
Hex
4
Fa'ailoga tau fefa'ataua'iga tulaga ese. Fausia e le kalani ile amataga ole fa'agaioiga ole talosaga

7
Ua mavae lona lua
0
Hex
4
Taimi i sekone mai le amataga o le faagasologa o le mauaina o se tuatusi

9
Fu'a seevae
8000
Hex
2
O nisi fu'a e mafai ona fa'atulaga e fa'ailoa ai fa'amaufa'ailoga. I lenei tulaga, ua setiina le "faasalalauga".

11
tuatusi IP tagata fa'atau
0.0.0.0
Laina
4
tuatusi IP tagata fa'atau (pe a iai)

15
Lau tuatusi IP tagata fa'atau
172.16.134.61
Laina
4
tuatusi IP na ofoina mai e le server (pe a maua)

19
Le isi tuatusi IP server
0.0.0.0
Laina
4
tuatusi IP server (pe a iloa)

23
tuatusi IP sui sooupu
172.16.114.41
Laina
4
tuatusi IP o le sui sooupu (mo se faataitaiga, se ki)

27
tuatusi MAC tagata fa'atau
14:d6:4d:a7:c9:55
Hex
6
tuatusi MAC ole tagata e auina atu pepa (tagata fa'atau)

31
Fa'alava ole tuatusi o mea faigaluega
 
Hex
10
Nofo fa'apolopolo. E masani ona fa'atumu i zeros

41
Igoa talimalo o le server
 
Laina
64
DHCP server igoa. E masani ona le fa'asalalauina

105
Igoa faila faila
 
Laina
128
Igoa faila i luga o le server o loʻo faʻaogaina e nofoaga e leai ni disk pe a faʻapipiʻi

235
Kuki fa'ataulāitu
63: 82: 53: 63
Hex
4
"Magic" numera, e tusa ai ma lea, e aofia ai. e mafai ona e fa'amautu o lenei afifi o le DHCP protocol

DHCP filifiliga. E mafai ona alu i soo se faasologa

236
Numera filifiliga
53
Tesema
3
Filifiliga 53, o loʻo faʻamatalaina le ituaiga DHCP packet 5 - DHCPACK

 
Filifiliga umi
1
Tesema
1

 
Tau filifiliga
5
Tesema
1

 
Numera filifiliga
1
Tesema
1
Filifiliga e ofo atu i le tagata o tausia le DHCP se masini fesoʻotaʻiga

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
255.255.224.0
Laina
4

 
Numera filifiliga
3
Tesema
1
Filifiliga e ofo atu i le kalani DHCP se faitotoa e le mafai

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
172.16.12.1
Laina
4

 
Numera filifiliga
6
Tesema
1
Filifiliga e ofo atu le DHCP ile DNS client

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
8.8.8.8
Laina
4

 
Numera filifiliga
51
Tesema
1
O le olaga atoa o laina fesoʻotaʻiga tuʻuina atu i sekone, a maeʻa e tatau ona toe talosagaina e le DHCP client

 
Filifiliga umi
4
Tesema
1

 
Tau filifiliga
86400
Tesema
4

 
Numera filifiliga
82
Tesema
1
Filifiliga 82, toe fai le mea na sau ile DHCPDISCOVER

 
Filifiliga umi
18
Tesema
1

 
Tau filifiliga
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:e
Tesema
18

 
Fa'ai'uga o le afifi
255
Tesema
1
255 o loʻo faʻatusalia le pito o le afifi

faatulagaga

O le faʻapipiʻi e aofia ai le faʻapipiʻiina o modules python e manaʻomia mo galuega. E manatu ua uma ona faʻapipiʻi ma faʻatulagaina MySQL.

FreeBSD

pkg faʻapipiʻi python3 python3 -m faʻamautinoapip pip3 faʻapipiʻi mysql-fesoʻotaʻi

Ubuntu

sudo apt-mau faʻapipiʻi python3 sudo apt-mau faʻapipiʻi pip3 sudo pip3 faʻapipiʻi mysql-fesoʻotaʻi

Matou te fatuina se database MySQL, faʻapipiʻi le pydhcp.sql tuʻuina i totonu, ma faʻapipiʻi le faila faila.

Fetuunaiga

O fa'atonuga uma o lo'o i totonu o se faila xml. Fa'asinoga faila:

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 suega suega 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 filifili ip, mask, router, dns mai tagata faʻaoga i luga (mac) = luga ('{option_3_AgentRemoteId_hex}') ma luga (taulaga) = luga ('{option_1_AgentCircuitId_port_hex}') filifili ip, mask, router, dns mai tagata faʻaoga i luga (mac) = luga ('{sw_mac}') ma luga (taulaga) = luga ('{sw_port82}') filifili ip, mask, router, dns mai tagata faʻaoga i luga (mac) = luga ('{ClientMacAddress}') fa'aofi i totonu o tala fa'asolopito (id,dt,mac,ip,comment) tau (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')

Ole taimi nei ile fa'amatalaga atili ile pine:

O le dhcpserver vaega o loʻo faʻamatalaina tulaga faʻavae mo le amataina o le server, e pei o:

  • talimalo - o le a le tuatusi IP e faʻalogo i ai le 'auʻaunaga ile taulaga 67
  • faʻasalalauga - lea ip o le faʻasalalauga mo DHCPOFFER ma DHCPACK
  • DHCPServer - o le a le ip o le DHCP server
  • LeaseTime taimi lisi o le tuatusi IP na tu'uina atu
  • ThreadLimit - e fia filo o loʻo taʻavale i le taimi e tasi e faʻatautaia ai pusa UDP o loʻo oʻo mai i luga o le taulaga 67. E tatau ona fesoasoani i luga o galuega tetele 😉
  • defaultMask,defaultRouter,defaultDNS - o le a le mea e ofoina atu i le tagata fai saofaga e ala i le faaletonu pe a maua se IP i totonu o faʻamaumauga, ae e le o faʻamaonia mai ni faʻaopoopoga faaopoopo mo ia.

mysql vaega:

talimalo, username, password, basename - o mea uma e tautala mo ia lava. O lo'o fa'apipi'i i luga le fa'atulagaina o fa'amaumauga tu'ufa'atasi GitHub

Vaega o fesili: talosaga mo le mauaina o le OFFER/ACK o loʻo faʻamatalaina iinei:

  • ofo_count - o le numera o laina ma talosaga e toe faʻafoʻi mai ai se iʻuga e pei o le ip,mask,router,dns
  • ofo_n — manoa fesili. Afai e gaogao le toe faafoi, ona faatino lea ole talosaga ole ofo
  • history_sql - o se fesili e tusi, mo se faʻataʻitaʻiga, i le "faʻatagaina talafaasolopito" mo se tagata fai saofaga

O talosaga e mafai ona aofia ai soʻo se fesuiaiga mai le vaega o filifiliga poʻo filifiliga mai le DHCP protocol.

Vaega o filifiliga. O le mea lea e sili atu ona manaia. O iinei e mafai ai ona tatou fatuina ni fesuiaiga e mafai ona tatou faʻaogaina mulimuli ane i le vaega o fesili.

Mo se faʻataʻitaʻiga:

option_82_hex:sw_port1:20:22

, o lenei laina faʻatonu e ave le laina atoa na sau i le DHCP talosaga filifiliga 82, i le hex format, i le vaʻaiga mai le 20 i le 22 bytes e aofia ai ma tuʻu i le suiga fou sw_port1 (sui le taulaga mai le mea na sau ai le talosaga)

option_82_hex:sw_mac:26:40

, fa'amatala le fesuiaiga sw_mac, ave le hex mai le laina 26:40

E mafai ona e vaʻai i filifiliga uma e mafai ona faʻaogaina i fesili e ala i le amataina o le server i le -d switch. O le a tatou vaʻai i se mea e pei o lenei ogalaau:

--se pusa DHCPINFORM na taunuu i le taulaga 67, mai le 0025224ad764, b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': '0025224address': '764ad00' ', ' HTYPE ':' Ethernet ',' Hostname ': B'X7XA91XA5XA0XA3-X5FX9A', 'REQLISTNS': Moni, 'REQLISTOMAINNAME': Moni, 'REQLISTPERFUMROUTERDISCOVER': Moni, 'True,' ER REQLIS ': Moni,' ER REQLIS ': Moni,' Moni,' REQLISUBNETMASK ': Moni, 'ReqListVendorSpecInfo': 8, 'RequestedIpAddress': '8', 'Vendor': b'MSFT 43', 'chaddr': '0.0.0.0ad5.0', '0025224ad764'. ', 'fu'a': b'x172.30.128.13x00', 'giaddr': '00', 'gpoz': 172.30.114.25, 'hlen': 308, 'hops': 6, 'htype': 'MAC', 'magic_cookie' : b'cx1Sc ', 'op': 'DHCPINFORM', 'option82': 12, 'option12': 53, 'option53': 55, 'option55': 60, 'option60': 61, 'option61': 82, 'option_82_byte': b'x82x12x01x06x00x04x00x01x00x06x02x08' b'x00x06x00eXx1exb9xad', 'option_2_hex': '82' option_12010600040001000602080006001_len': 589 , 'option_2_str': "b'x82x18x82x12x01x06x00x04x00x01x00x06x02x08x00eXx06exb00xad'", 'i'uga': Sese, 'secs,': 'siaddr': '1', 'sw_mac': '9e2eb768ad', 'sw_port0.0.0.0': '001', 'xidbyte': b'

O lea la, e mafai ona tatou afifiina so'o se fesuiaiga i {} ma o le a fa'aaogaina i le SQL query.

Sei o tatou faamaumauina mo talafaasolopito na maua e le kalani le tuatusi IP:

DHCP + Mysql server ile Python

DHCP + Mysql server ile Python

Amataina le server

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

— d fa'amafanafanaga faiga fa'atino DEBUG
- c <filename> faila fa'atulagaina

Fa'atalanoaga

Ma o lea ua sili atu faʻamatalaga i le faʻatinoina o le server i Python. O se tiga. Na a'oa'oina le Python i le lele. O le tele o taimi e faia i le sitaili o le "wow, i se auala na ou faia ai le aoga." E le'i fa'atumauina, ma tu'u i lenei fomu e mafua ona o le itiiti o le poto masani i le atina'eina o le Python. O le a ou nofo i luga o vaega sili ona manaia o le faʻatinoina o le server i le "code".

XML fetuutuunaiga faila faila

O le masani Python module xml.dom o loʻo faʻaaogaina. E foliga mai e faigofie, ae i le taimi o le faʻatinoga sa i ai le leai o ni faʻamatalaga manino ma faʻataʻitaʻiga i luga o le upega tafailagi e faʻaaoga ai lenei module.

    laau = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") mo elem i 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_basename"] =elem.getElementsByTagName("basename")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") mo elem i le 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"_default =elem.getElementsByTagName("defaultMask")[0].firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data gconfig["dhcp_defaultDNS"]=elem.getNaElementsBy defaultDNS")[0].firstChild.data qconfig=tree.getElementsByTagName("query") mo elem i qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.data mo num in laina(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") mo elem i filifiliga: node=elem.getElementsByTagName("filifiliga") mo filifiliga i le node : optionsMod.append(options.firstChild.data)

Multithreading

O le mea e ese ai, o le multithreading i le Python o loʻo faʻatinoina manino ma faigofie.

def PacketWork(fa'amatalaga, fa'aopoopo): ... # fa'atinoga o le fa'avasegaina o le pepa o lo'o sau ma tali atu i ai ... a'o Moni: fa'amaumauga, addr = udp_socket.recvfrom(1024) # fa'atali mo le UDP packet thread = threading.Thread( sini = PacketWork , args = (faʻamatalaga, addr,)). amata () # e pei ona oʻo mai - matou te faʻalauiloaina le galuega PacketWork na faʻamatalaina muamua i tua ma faʻamaufaʻailoga ao threading.active_count() >gconfig ["dhcp_ThreadLimit"]: taimi. moe(1) # pe afai o le numera E tele atu filo o loʻo taʻavale nai lo tulaga, matou te faʻatali seʻi itiiti ifo i latou.

Maua / lafo le DHCP pepa

Ina ia mafai ona faʻalavelave faʻapipiʻi UDP e sau mai le kata fesoʻotaʻiga, e tatau ona e "sii aʻe" le socket:

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

, o iai fu'a:

  • AF_INET - o lona uiga o le faʻasologa o le tuatusi o le IP: port. Atonu e iai fo'i le AF_UNIX - lea e tu'u mai ai le tuatusi ile igoa faila.
  • SOCK_DGRAM - o lona uiga tatou te le taliaina se "pa'u mata", ae o se tasi ua uma ona pasia i totonu o le pa puipui, ma faʻatasi ai ma se vaega faʻapipiʻiina. O na. matou te mauaina na o se pusa UDP e aunoa ma le vaega "faaletino" o le afifi UDP afifi. Afai e te faʻaogaina le fuʻa SOCK_RAW, e manaʻomia foʻi ona e faʻapipiʻi lenei "afifi".

O le lafoina o se afifi e mafai ona pei o se faʻasalalauga:

                    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #switch the socket to broadcast mode rz=udp_socket.sendto(packetack, (gconfig["broadcast"],68))

, ma le tuatusi "o fea na sau ai le afifi":

                        udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # sui le socket i le multi-listener mode rz=udp_socket.sendto(packetack, addr)

, o lona uiga o le SOL_SOCKET o le "tulaga fa'akomepiuta" mo le fa'atulagaina o filifiliga,

, SO_BROADCAST filifiliga o le afifi pulou e "faasalalau"

  , SO_REUSEADDR filifiliga sui le socket i le "tele faalogologo" mode. I le teori, e le manaʻomia i lenei tulaga, ae i luga o se tasi o le FreeBSD servers lea na ou faʻataʻitaʻia ai, e leʻi galue le code e aunoa ma lenei filifiliga.

Fa'asalalau se pepa DHCP

O iinei na ou fiafia tele ai i le Python. E foliga mai o fafo atu o le atigipusa e mafai ai ona e faʻafetaui lelei i le bytecode. Fa'ataga ina ia fa'aliliu faigofie tele i tau fa'ailoga, manoa ma le hex - i.e. o le mea lea tatou te manaʻomia moni e malamalama ai i le fausaga o le afifi. O lea, mo se faʻataʻitaʻiga, e mafai ona e mauaina le tele o bytes i le HEX ma naʻo bytes:

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

, fa'apipi'i bytes i se fausaga:

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

Maua le IP mai le fausaga:

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

Ma le isi itu:

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

Ona pau lea mo le taimi nei 😉

puna: www.habr.com

Faaopoopo i ai se faamatalaga