Te ako i te Python (he iti noa atu i te wahanga 😉)
whakakapinga tūmau DB2DHCP (taku marau), taketake konei, kei te kaha ake te uaua ki te huihui mo te OS hou. A kaore au e pai ki te mea he mea ruarua kaore he huarahi ki te "huri inaianei"
te whiwhi i tetahi tūmau DHCP e mahi ana me te kaha ki te kowhiri i te wahitau IP o te kaiohauru ma te whakamahi i te mac a te kaitango, whakawhiti ranei i te huinga mac+port (Kōwhiringa 82)
te tuhi i tetahi atu paihikara (Aue! koinei taku mahi tino pai)
kei te whiwhi korero mo to ringaringa karapu i runga i a Habrahabr (he pai ake ranei, he tono tono) 😉
Hua: ka mahi 😉 I whakamatauria ki te FreeBSD me te Ubuntu OS. Ko te tikanga, ka taea te tono i te waehere kia mahi i raro i tetahi OS, na te mea Te ahua nei kaore he herenga motuhake i roto i te waehere.
Kia tupato! He maha atu ano kei te haere mai.
Hononga ki te putunga mo nga runaruna "pa kia ora".
Ko te tukanga o te whakauru, te whirihora me te whakamahi i te hua o te "ako i te taputapu" he iti rawa atu, katahi ka iti te ariā mo te kawa DHCP. Mo ahau ano. A mo te hitori 😉
He ariā iti
He aha te DHCP
He kawa whatunga tenei e taea ai e tetahi taputapu te kimi i tona wahitau IP (me etahi atu tawhā penei i te kuwaha, DNS, me etahi atu) mai i te tūmau DHCP. Ka whakawhitihia nga paatete ma te whakamahi i te kawa UDP. Ko te tikanga whanui mo te mahi o te taputapu ina tono tawhā whatunga ko enei e whai ake nei:
Ka tukuna e te taputapu (kiritaki) he tono haapurorotanga UDP (DHCPDISCOVER) puta noa i te whatunga me te tono "pai, homai tetahi wahitau IP ki ahau." I tua atu, i te nuinga o te waa (engari kaore i nga wa katoa) ka puta te tono mai i te tauranga 68 (puna), ko te taunga ko te tauranga 67 (taunga). Ka tukuna ano e etahi taputapu nga putea mai i te tauranga 67. Ko te wahitau MAC o te taputapu kiritaki kei roto i te kete DHCPDISCOVER.
Ko nga tūmau DHCP katoa kei runga i te whatunga (a he maha pea o raatau) ka hanga he tuku DHCPOFFER me nga tautuhinga whatunga mo te taputapu nana i tuku DHCPDISCOVER, ka whakapaoho ano hoki i runga i te whatunga. Ko te tautuhi mo wai tenei kete ka ahu mai i te wahitau MAC o te kiritaki i tukuna i mua i te tono DHCPDISCOVER.
Ka whakaaehia e te kiritaki nga putea me nga tono mo nga tautuhinga whatunga, ka whiriwhiri i te mea tino ataahua (he rereke pea nga paearu, hei tauira, te wa o te tukunga o nga paatete, te maha o nga huarahi takawaenga), ka hanga he "tono mana" DHCPREQUEST me nga tautuhinga whatunga mai i te tūmau DHCP e pai ana. I tenei keehi, ka haere te paakete ki tetahi tūmau DHCP motuhake.
Ko te tūmau i whiwhi i te DHCPREQUEST ka tukuna he mōkihi hōputu DHCPACK, ka whakarārangihia anō ngā tautuhinga whatunga mō tēnei kiritaki.
I tua atu, kei reira nga putea DHCPINFORM e puta mai ana i te kiritaki, a ko te kaupapa ko te whakamohio ki te tūmau DHCP kei te ora te "kiritaki" me te whakamahi i nga tautuhinga whatunga kua tukuna. I roto i te whakatinanatanga o tenei tūmau, ka warewarehia enei putea.
Hōputu mōkihi
I te nuinga o te waa, he penei te ahua o te anga paati Ethernet:
I a maatau, ka whakaarohia e maatau nga raraunga mai i nga ihirangi o te paatete UDP, kaore he pane kawa paparanga OSI, ara ko te hanganga DHCP:
DHCPDISCOVER
Na, ko te tukanga o te whiwhi wahitau IP mo tetahi taputapu ka timata ma te kaihoko DHCP e tuku tono haapurororaa mai i te tauranga 68 ki te 255.255.255.255:67. I roto i tenei kete, kei roto i te kaihoko tana wahitau MAC, me te mea e hiahia ana ia ki te whiwhi mai i te tūmau DHCP. Ko te hanganga o te kete e whakaahuatia ana i te ripanga i raro nei.
DHCPDISCOVER Ripanga Hanganga Pakete
Te tuunga i roto i te kete
ingoa uara
Hei tauira:
Whakataki
Byte
Whakamārama
1
Tono Whakaara
1
Hex
1
Momo karere. 1 - tono mai i te kiritaki ki te tūmau, 2 - te whakautu mai i te tūmau ki te kiritaki
2
Momo taputapu
1
Hex
1
Momo wāhitau pūmārō, i tēnei kawa 1 - MAC
3
Te roa o nga wahitau taputapu
6
Hex
1
Roa wāhitau MAC Pūrere
4
Hops
1
Hex
1
Te maha o nga huarahi takawaenga
5
ID Whakawhiti
23:cf:de:1d
Hex
4
Tautuhi tauwhitinga ahurei. I hangaia e te kiritaki i te timatanga o te mahi tono
7
Kua pahemo te tuarua
0
Hex
4
Te wa i roto i nga hēkona mai i te timatanga o te mahi mo te whiwhi wahitau
9
Ko nga haki whawhai
0
Hex
2
Ko etahi haki ka taea te tautuhi hei tohu i nga tawhā kawa
11
Wāhitau IP kiritaki
0.0.0.0
Raina
4
Wāhitau IP Kiritaki (mehemea kei)
15
Tō wāhitau IP kiritaki
0.0.0.0
Raina
4
Wāhitau IP e tukuna ana e te tūmau (mehemea kei te wātea)
19
Wāhitau IP tūmau panuku
0.0.0.0
Raina
4
Wāhitau IP Tūmau (mehemea e mōhiotia ana)
23
Wāhitau IP kaihoko Relay
172.16.114.41
Raina
4
Wāhitau IP o te kaihoko kawe (hei tauira, he whakakā)
27
Wāhitau MAC Kiritaki
14:d6:4d:a7:c9:55
Hex
6
Wāhitau MAC o te kaituku pākete (kiritaki)
31
Padding wāhitau taputapu kiritaki
Hex
10
Noho rahui. I te nuinga o te wa ka whakakiia ki te kore
41
Ingoa kaihautu tūmau
Raina
64
ingoa tūmau DHCP. I te nuinga o te waa kaore i tukuna
105
Whakaara ingoa kōnae
Raina
128
Ingoa kōnae i runga i te tūmau e whakamahia ana e nga teihana korekore i te wa e whakaara ana
235
pihikete makutu
63: 82: 53: 63
Hex
4
Ko te nama "Magic", e ai ki a ia, incl. ka taea e koe te whakatau no te kawa DHCP tenei kete
Kōwhiringa DHCP. Ka taea te haere ki tetahi ota
236
Tau kōwhiringa
53
Tīhema
1
Kōwhiringa 53, e tohu ana i te momo pākete DHCP
Tau kōwhiringa
50
Tīhema
1
He aha te wahitau IP e hiahia ana te kiritaki ki te whiwhi?
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
172.16.134.61
Raina
4
Tau kōwhiringa
55
1
Tawhā whatunga i tonohia e te kiritaki. Ka rereke pea te tito
01 — Whatunga kanohi kanohi
03 - Te kuwaha
06 - DNS
oc — Ingoa Kaihautū
0f - ingoa rohe whatunga
1c - wāhitau o te tono whakapāho (pāho)
42 - ingoa tūmau TFTP
79 - Te Ara Pateko Karekau
Te roa o te whiringa
8
1
Uara kōwhiringa
01:03:06:0c:0f:1c:42:79
8
Tau kōwhiringa
82
Tīhema
Kōwhiringa 82, e tuku ana i te wāhitau MAC o te taputapu tukurua me etahi atu uara.
Ko te nuinga o nga wa, koinei te tauranga o te whakawhiti e rere ana te mutunga o te kiritaki DHCP. Kei roto i tenei whiringa etahi taapiri taapiri.
I tenei take, i roto i te waahanga 82, ka kohanga nga waahanga-iti:
Agent Circuit ID = 00:04:00:01:00:04, ko nga paita whakamutunga e rua ko te tauranga kiritaki DHCP i puta mai ai te tono.
ID Mamao Agent = 00:06:c8:be:19:93:11:48 - wāhitau MAC o te taputapu tukurua DHCP
Mutunga o te kete
255
Tīhema
1
Ko te 255 te tohu i te mutunga o te kete
DHCPOFFER
I te wa ka whiwhi te tūmau i te pākete DHCPDISCOVER a ki te kite ia ka taea e ia te tuku ki te kiritaki tetahi mea mai i te mea i tonoa, ka puta he whakautu mo taua mea - DHCPDISCOVER. Ka tukuna te whakautu ki te tauranga "mai i te wahi i haere mai ai", ma te panui, na te mea I tenei wa, karekau he wahitau IP a te kaihoko, na reira ka taea noa e ia te whakaae ki te paatete mena ka tukuna ma te panui. E mohio ana te kaihoko he kete tenei mo tana wahitau MAC kei roto i te kete, me te nama tauwhitinga ka mahia e ia i te wa i hangaia ai te kete tuatahi.
DHCPOFFER Ripanga Hanganga Pakete
Te tuunga i roto i te kete
Ingoa o te uara (noa)
Hei tauira:
Whakataki
Byte
Whakamārama
1
Tono Whakaara
1
Hex
1
Momo karere. 1 - tono mai i te kiritaki ki te tūmau, 2 - te whakautu mai i te tūmau ki te kiritaki
2
Momo taputapu
1
Hex
1
Momo wāhitau pūmārō, i tēnei kawa 1 - MAC
3
Te roa o nga wahitau taputapu
6
Hex
1
Roa wāhitau MAC Pūrere
4
Hops
1
Hex
1
Te maha o nga huarahi takawaenga
5
ID Whakawhiti
23:cf:de:1d
Hex
4
Tautuhi tauwhitinga ahurei. I hangaia e te kiritaki i te timatanga o te mahi tono
7
Kua pahemo te tuarua
0
Hex
4
Te wa i roto i nga hēkona mai i te timatanga o te mahi mo te whiwhi wahitau
9
Ko nga haki whawhai
0
Hex
2
Ko etahi haki ka taea te tautuhi hei tohu i nga tawhā kawa. I tenei take, ko te 0 te tikanga o te momo tono Unicast
11
Wāhitau IP kiritaki
0.0.0.0
Raina
4
Wāhitau IP Kiritaki (mehemea kei)
15
Tō wāhitau IP kiritaki
172.16.134.61
Raina
4
Wāhitau IP e tukuna ana e te tūmau (mehemea kei te wātea)
19
Wāhitau IP tūmau panuku
0.0.0.0
Raina
4
Wāhitau IP Tūmau (mehemea e mōhiotia ana)
23
Wāhitau IP kaihoko Relay
172.16.114.41
Raina
4
Wāhitau IP o te kaihoko kawe (hei tauira, he whakakā)
27
Wāhitau MAC Kiritaki
14:d6:4d:a7:c9:55
Hex
6
Wāhitau MAC o te kaituku pākete (kiritaki)
31
Padding wāhitau taputapu kiritaki
Hex
10
Noho rahui. I te nuinga o te wa ka whakakiia ki te kore
41
Ingoa kaihautu tūmau
Raina
64
ingoa tūmau DHCP. I te nuinga o te waa kaore i tukuna
105
Whakaara ingoa kōnae
Raina
128
Ingoa kōnae i runga i te tūmau e whakamahia ana e nga teihana korekore i te wa e whakaara ana
235
pihikete makutu
63: 82: 53: 63
Hex
4
Ko te nama "Magic", e ai ki a ia, incl. ka taea e koe te whakatau no te kawa DHCP tenei kete
Kōwhiringa DHCP. Ka taea te haere ki tetahi ota
236
Tau kōwhiringa
53
Tīhema
1
Kōwhiringa 53, e tautuhi ana i te momo putea DHCP 2 - DHCPOFFER
Te roa o te whiringa
1
Tīhema
1
Uara kōwhiringa
2
Tīhema
1
Tau kōwhiringa
1
Tīhema
1
Kōwhiringa ki te tuku ki te kiritaki DHCP he kanohi whatunga
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
255.255.224.0
Raina
4
Tau kōwhiringa
3
Tīhema
1
Kōwhiringa ki te tuku ki te kiritaki DHCP he kuaha taunoa
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
172.16.12.1
Raina
4
Tau kōwhiringa
6
Tīhema
1
Kōwhiringa ki te tuku DHCP ki te kiritaki DNS
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
8.8.8.8
Raina
4
Tau kōwhiringa
51
Tīhema
1
Te roanga o nga tawhā whatunga kua tukuna i roto i nga hēkona, muri iho me tono ano te kaihoko DHCP
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
86400
Tīhema
4
Tau kōwhiringa
82
Tīhema
1
Kōwhiringa 82, ka whakahoki ano i nga mea i tae mai ki DHCPDISCOVER
Mutunga o te kete
255
Tīhema
1
Ko te 255 te tohu i te mutunga o te kete
DHCPREQUEST
I muri i te whiwhinga a te kiritaki i te DHCPOFFER, ka hanga e ia he paatete e tono ana i nga tawhā whatunga kaua ki nga tūmau DHCP katoa i runga i te whatunga, engari ki te kotahi anake, ko tana tuku DHCPOFFER i tino pai ki a ia. He rereke nga paearu "rite" me te whakawhirinaki ki te whakatinanatanga DHCP a te kiritaki. Ko te kaiwhiwhi o te tono ka tohua ma te whakamahi i te wahitau MAC o te tūmau DHCP. Ano, ka taea e te kaihoko te tuku i tetahi paakete DHCPREQUEST me te kore e whakaputa tuatahi i te DHCPDISCOVER, mena kua riro ke te wahitau IP o te tūmau i mua.
DHCPREQUEST Ripanga Hanganga Pakete
Te tuunga i roto i te kete
Ingoa o te uara (noa)
Hei tauira:
Whakataki
Byte
Whakamārama
1
Tono Whakaara
1
Hex
1
Momo karere. 1 - tono mai i te kiritaki ki te tūmau, 2 - te whakautu mai i te tūmau ki te kiritaki
2
Momo taputapu
1
Hex
1
Momo wāhitau pūmārō, i tēnei kawa 1 - MAC
3
Te roa o nga wahitau taputapu
6
Hex
1
Roa wāhitau MAC Pūrere
4
Hops
1
Hex
1
Te maha o nga huarahi takawaenga
5
ID Whakawhiti
23:cf:de:1d
Hex
4
Tautuhi tauwhitinga ahurei. I hangaia e te kiritaki i te timatanga o te mahi tono
7
Kua pahemo te tuarua
0
Hex
4
Te wa i roto i nga hēkona mai i te timatanga o te mahi mo te whiwhi wahitau
9
Ko nga haki whawhai
8000
Hex
2
Ko etahi haki ka taea te tautuhi hei tohu i nga tawhā kawa. I roto i tenei take, kua whakaritea te "pāhotanga".
11
Wāhitau IP kiritaki
0.0.0.0
Raina
4
Wāhitau IP Kiritaki (mehemea kei)
15
Tō wāhitau IP kiritaki
172.16.134.61
Raina
4
Wāhitau IP e tukuna ana e te tūmau (mehemea kei te wātea)
19
Wāhitau IP tūmau panuku
0.0.0.0
Raina
4
Wāhitau IP Tūmau (mehemea e mōhiotia ana)
23
Wāhitau IP kaihoko Relay
172.16.114.41
Raina
4
Wāhitau IP o te kaihoko kawe (hei tauira, he whakakā)
27
Wāhitau MAC Kiritaki
14:d6:4d:a7:c9:55
Hex
6
Wāhitau MAC o te kaituku pākete (kiritaki)
31
Padding wāhitau taputapu kiritaki
Hex
10
Noho rahui. I te nuinga o te wa ka whakakiia ki te kore
41
Ingoa kaihautu tūmau
Raina
64
ingoa tūmau DHCP. I te nuinga o te waa kaore i tukuna
105
Whakaara ingoa kōnae
Raina
128
Ingoa kōnae i runga i te tūmau e whakamahia ana e nga teihana korekore i te wa e whakaara ana
235
pihikete makutu
63: 82: 53: 63
Hex
4
Ko te nama "Magic", e ai ki a ia, incl. ka taea e koe te whakatau no te kawa DHCP tenei kete
Kōwhiringa DHCP. Ka taea te haere ki tetahi ota
236
Tau kōwhiringa
53
Tīhema
3
Kōwhiringa 53, e tautuhi ana i te momo pākete DHCP 3 - DHCPREQUEST
Te roa o te whiringa
1
Tīhema
1
Uara kōwhiringa
3
Tīhema
1
Tau kōwhiringa
61
Tīhema
1
ID Kiritaki: 01 (mo Ehernet) + te wahitau MAC kiritaki
Te roa o te whiringa
7
Tīhema
1
Uara kōwhiringa
01:2c:ab:25:ff:72:a6
Hex
7
Tau kōwhiringa
60
Tīhema
"Tautuutu karaehe kaihoko". I roto i taku keehi, ka ripoatahia te putanga kiritaki DHCP. Ko etahi atu taputapu ka whakahoki mai i tetahi mea rereke. Ko Windows hei tauira ka ripoata MSFT 5.0
Te roa o te whiringa
11
Tīhema
Uara kōwhiringa
udhcp 0.9.8
Raina
Tau kōwhiringa
55
1
Tawhā whatunga i tonohia e te kiritaki. Ka rereke pea te tito
01 — Whatunga kanohi kanohi
03 - Te kuwaha
06 - DNS
oc — Ingoa Kaihautū
0f - ingoa rohe whatunga
1c - wāhitau o te tono whakapāho (pāho)
42 - ingoa tūmau TFTP
79 - Te Ara Pateko Karekau
Te roa o te whiringa
8
1
Uara kōwhiringa
01:03:06:0c:0f:1c:42:79
8
Tau kōwhiringa
82
Tīhema
1
Kōwhiringa 82, ka whakahoki ano i nga mea i tae mai ki DHCPDISCOVER
Mutunga o te kete
255
Tīhema
1
Ko te 255 te tohu i te mutunga o te kete
DHCPACK
Hei whakapumautanga "ae, he tika, ko to wahitau IP tenei, a kaore au e tuku atu ki tetahi atu" mai i te DHCP server, he putea kei te whakatakotoranga DHCPACK mai i te tūmau ki te kaihoko. Ka tukuna kia rite ki etahi atu paanui. Ahakoa, i roto i te waehere i raro nei mo te tūmau DHCP i whakatinanahia i roto i te Python, i te mea noa, ka kapehia e ahau tetahi tono haapurororaa ma te tuku i tetahi putea ki tetahi IP kiritaki motuhake, mena kua mohiohia. I tua atu, kaore te tūmau DHCP e aro ki te mea kua tae atu te putea DHCPACK ki te kiritaki. Ki te kore te kiritaki e whiwhi i te DHCPACK, i muri i etahi wa ka whakahoki ano i te DHCPREQUEST
DHCPACK Ripanga Hanganga Pakete
Te tuunga i roto i te kete
Ingoa o te uara (noa)
Hei tauira:
Whakataki
Byte
Whakamārama
1
Tono Whakaara
2
Hex
1
Momo karere. 1 - tono mai i te kiritaki ki te tūmau, 2 - te whakautu mai i te tūmau ki te kiritaki
2
Momo taputapu
1
Hex
1
Momo wāhitau pūmārō, i tēnei kawa 1 - MAC
3
Te roa o nga wahitau taputapu
6
Hex
1
Roa wāhitau MAC Pūrere
4
Hops
1
Hex
1
Te maha o nga huarahi takawaenga
5
ID Whakawhiti
23:cf:de:1d
Hex
4
Tautuhi tauwhitinga ahurei. I hangaia e te kiritaki i te timatanga o te mahi tono
7
Kua pahemo te tuarua
0
Hex
4
Te wa i roto i nga hēkona mai i te timatanga o te mahi mo te whiwhi wahitau
9
Ko nga haki whawhai
8000
Hex
2
Ko etahi haki ka taea te tautuhi hei tohu i nga tawhā kawa. I roto i tenei take, kua whakaritea te "pāhotanga".
11
Wāhitau IP kiritaki
0.0.0.0
Raina
4
Wāhitau IP Kiritaki (mehemea kei)
15
Tō wāhitau IP kiritaki
172.16.134.61
Raina
4
Wāhitau IP e tukuna ana e te tūmau (mehemea kei te wātea)
19
Wāhitau IP tūmau panuku
0.0.0.0
Raina
4
Wāhitau IP Tūmau (mehemea e mōhiotia ana)
23
Wāhitau IP kaihoko Relay
172.16.114.41
Raina
4
Wāhitau IP o te kaihoko kawe (hei tauira, he whakakā)
27
Wāhitau MAC Kiritaki
14:d6:4d:a7:c9:55
Hex
6
Wāhitau MAC o te kaituku pākete (kiritaki)
31
Padding wāhitau taputapu kiritaki
Hex
10
Noho rahui. I te nuinga o te wa ka whakakiia ki te kore
41
Ingoa kaihautu tūmau
Raina
64
ingoa tūmau DHCP. I te nuinga o te waa kaore i tukuna
105
Whakaara ingoa kōnae
Raina
128
Ingoa kōnae i runga i te tūmau e whakamahia ana e nga teihana korekore i te wa e whakaara ana
235
pihikete makutu
63: 82: 53: 63
Hex
4
Ko te nama "Magic", e ai ki a ia, incl. ka taea e koe te whakatau no te kawa DHCP tenei kete
Kōwhiringa DHCP. Ka taea te haere ki tetahi ota
236
Tau kōwhiringa
53
Tīhema
3
Kōwhiringa 53, e tautuhi ana i te momo putea DHCP 5 - DHCPACK
Te roa o te whiringa
1
Tīhema
1
Uara kōwhiringa
5
Tīhema
1
Tau kōwhiringa
1
Tīhema
1
Kōwhiringa ki te tuku ki te kiritaki DHCP he kanohi whatunga
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
255.255.224.0
Raina
4
Tau kōwhiringa
3
Tīhema
1
Kōwhiringa ki te tuku ki te kiritaki DHCP he kuaha taunoa
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
172.16.12.1
Raina
4
Tau kōwhiringa
6
Tīhema
1
Kōwhiringa ki te tuku DHCP ki te kiritaki DNS
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
8.8.8.8
Raina
4
Tau kōwhiringa
51
Tīhema
1
Te roanga o nga tawhā whatunga kua tukuna i roto i nga hēkona, muri iho me tono ano te kaihoko DHCP
Te roa o te whiringa
4
Tīhema
1
Uara kōwhiringa
86400
Tīhema
4
Tau kōwhiringa
82
Tīhema
1
Kōwhiringa 82, ka whakahoki ano i nga mea i tae mai ki DHCPDISCOVER
Ka waihangahia e matou he papaa raraunga MySQL, ka tuku i te putunga pydhcp.sql ki roto, ka whirihora i te konae whirihoranga.
Hōutuutu
Ko nga tautuhinga tūmau katoa kei roto i te kōnae xml. Kōnae tohutoro:
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 whakamātautau whakamātautau pydhcp kōwhiringa_8.8.8.8_hex:sw_port82:1:20 option_22_hex:sw_port82:2:16 option_18_hex:sw_mac:82:26 40 tīpako ip, mask, pouara, dns mai i nga kaiwhakamahi kei runga(mac)=runga('{option_3_AgentRemoteId_hex}') me runga(tauranga)=runga('{option_1_AgentCircuitId_port_hex}') tīpako ip, mask, pouara, dns mai i nga kaiwhakamahi kei runga (mac)=runga('{sw_mac}') me runga(tauranga)=runga('{sw_port82}') tīpako ip, mask, pouara, dns mai i nga kaiwhakamahi kei hea runga(mac)=runga('{ClientMacAddress}') kōkuhu ki te hītori (id,dt,mac,ip,kōrero) uara (null,inaianei(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')
Inaianei nga korero mo nga tohu:
Ko te waahanga dhcpserver e whakaatu ana i nga tautuhinga taketake mo te tiimata i te tūmau, ara:
Kaihautū - he aha te wāhitau IP e whakarongo ana te tūmau i te tauranga 67
haapurororaa - ko tehea ip te haapurororaa mo DHCPOFFER me DHCPACK
DHCPServer - he aha te ip o te tūmau DHCP
Te wa riihi riihi o te wahitau IP kua tukuna
ThreadLimit - e hia nga miro e rere ana i te wa kotahi ki te tukatuka i nga paatete UDP taumai i runga i te tauranga 67. E tika ana hei awhina i nga kaupapa kawenga nui 😉
defaultMask,defaultRouter,defaultDNS - he aha te mea ka tukuna ki te kaiohauru ma te taunoa mena ka kitea he IP i roto i te paataka raraunga, engari karekau he taapiri taapiri mo tera.
waahanga mysql:
kaihautu, ingoa kaiwhakamahi, kupuhipa, ingoa turanga - ko nga mea katoa e korero ana mo ia ano. Ka whakairihia he anga raraunga tata ki runga GitHub
Wāhanga Uiui: Ko nga tono mo te whiwhi OFFER/ACK kua whakaahuatia i konei:
offer_count — te maha o nga raina me nga tono ka whakahoki mai he hua penei i te ip, mask, pouara, dns
tuku_n — aho uira. Mena kei te putua te whakahoki, ka mahia te tono tuku e whai ake nei
history_sql - he patai ka tuhi, hei tauira, ki te "hitori whakamana" mo te kaiohauru
Ka taea e nga tono te whakauru i nga taurangi mai i te waahanga whiringa, i nga whiringa ranei mai i te kawa DHCP.
Wāhanga kōwhiringa. Koinei te waahi ka pai ake. I konei ka taea e tatou te hanga taurangi ka taea e tatou te whakamahi i muri mai i te waahanga patai.
Hei tauira:
option_82_hex:sw_port1:20:22
, ka tangohia e tenei rarangi whakahau te rarangi katoa i puta mai i te whiringa tono DHCP 82, i roto i te whakatakotoranga hex, i roto i te awhe mai i te 20 ki te 22 paita whakauru me te whakauru ki roto i te taurangi hou sw_port1 (whakawhiti tauranga mai i te wahi i tae mai ai te tono)
option_82_hex:sw_mac:26:40
, tautuhia te taurangi sw_mac, tango i te hex mai i te awhe 26:40
Ka taea e koe te kite i nga whiringa ka taea te whakamahi i roto i nga patai ma te tiimata i te tūmau me te -d whakawhiti. Ka kite tatou i tetahi mea penei i tenei raarangi:
Na reira, ka taea e tatou te takai i tetahi taurangi i roto i te {} ka whakamahia ki te uiui SQL.
Me tuhi tatou mo te hitori i whiwhi te kaihoko i te wahitau IP:
Tīmata tūmau
./pydhcpdb.py -d -c config.xml
— d te aratau putanga papatohu DEBUG
- c <ingoakōnae> kōnae whirihoranga
Whakawhitinga
Na inaianei ka nui ake nga korero mo te whakatinana i te tūmau i Python. He mamae. I akohia te Python i runga i te rere. He maha nga wa i mahia i roto i te ahua o te "wow, he aha ahau i mahi ai." Kaore i tino arotauhia, ka waiho i tenei ahua na te iti o te wheako ki te whanaketanga Python. Ka noho ahau ki nga ahuatanga tino pai o te whakatinanatanga o te tūmau i roto i te "waehere".
Kaituhi kōnae whirihoranga XML
Ka whakamahia te tauira Python paerewa xml.dom. He ahua ngawari noa iho, engari i te wa e whakatinanahia ana ka kitea te kore o nga tuhinga maamaa me nga tauira i runga i te whatunga e whakamahi ana i tenei waahanga.
rakau = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") mo te elem i roto i te mconfig: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["mysql_username"]=elem.getElementsByTagName("ingoawhakamahi"[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("kupuhipa")[0].firstChild.data gconfig["mysql_basename"] =elem.getElementsByTagName("basename")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") mo te elem i roto i te dconfig: gconfig["pāhotanga"]=elem.getElementsByTagName("pāhotanga")[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("DeultRouter"[0].firstChild.data gconfig["dhcp_defaultDNS"]=elem.getNameElementsBy defaultDNS")[0].firstChild.data qconfig=tree.getElementsByTagName("Uiui") mo te elem i roto i te qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.data mo te tau i roto awhe(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] : optionsMod.append(options.firstChild.data)
Panui-maha
He mea whakamiharo, he tino marama, he ngawari hoki te whakatinanatanga o te multithreading i Python.
def PacketWork(raraunga,addr): ... # te whakatinanatanga o te poroporo i te paatete taumai me te whakautu ki a ia ... i te Tika: raraunga, addr = udp_socket.recvfrom(1024) # tatari mo te miro putea UDP = threading.Thread( target=PacketWork, args=(raraunga,addr,)).timata() # i te wa i puta mai - ka whakarewahia e matou te mahi PacketWork kua tautuhia i mua i te papamuri me nga tawhā i te wa e threading.active_count() >gconfig["dhcp_ThreadLimit"]: wa. moe(1) # ki te mea he maha ake nga miro e rere ana i nga tautuhinga, ka tatari kia iti ake o raatau.
Whiwhi/tuku te putea DHCP
Hei haukoti i nga paatete UDP ka puta mai i te kaari whatunga, me "whakaara" te turanga:
AF_INET - te tikanga ko te whakatakotoranga wahitau ko IP: tauranga. He AF_UNIX ano pea - kei reira te wahitau e hoatu ana e te ingoa konae.
SOCK_DGRAM - ko te tikanga kaore matou e whakaae ki te "pakete mata", engari ko tetahi kua pahemo i te paahi ahi, me tetahi waahanga kua oti te whakapai. Ko era. ka whiwhi noa matou i tetahi putea UDP kaore he waahanga "tinana" o te takai putea UDP. Mena kei te whakamahi koe i te haki SOCK_RAW, katahi ka hiahia koe ki te poroporo i tenei "takai".
Ko te tuku putea ka rite ki te haapurororaa:
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #hurihia te turanga ki te aratau panui rz=udp_socket.sendto(packetack, (gconfig["pāho"],68))
, me te wahitau "no hea te kete":
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # whakawhiti te turanga ki te aratau whakarongo-maha rz=udp_socket.sendto(packetack, addr)
, ko te tikanga o te SOL_SOCKET ko te "taumata kawa" mo te whakarite i nga whiringa,
, SO_BROADCAST kōwhiringa ko te mōkihi potae he "pāho"
, Ko te whiringa SO_REUSEADDR ka huri i te turanga ki te aratau "maha nga kaiwhakarongo". I roto i te ariā, kaore e tika ana i tenei keehi, engari i runga i tetahi o nga kaitoro FreeBSD i whakamatauhia e au, kaore te waehere i mahi me te kore tenei whiringa.
Te tarai i te kete DHCP
Koinei taku tino pai ki a Python. Ka puta mai i roto i te pouaka ka taea e koe te tino ngawari ki te bytecode. Whakaaetia kia tino ngawari te whakamaori ki nga uara ira, aho me te hex - i.e. koinei te mea e tika ana kia mohio tatou ki te hanganga o te kete. Na, hei tauira, ka taea e koe te tiki i te whānuitanga o nga paita i roto i te HEX me nga paita noa: