Ke aʻo ʻana i ka Python (ʻoi aʻe ma mua o ka ʻōpala 😉)
pani kikowaena DB2DHCP (koʻu ʻōpuʻu), kumu maanei, e lilo ana i mea paʻakikī loa e hōʻuluʻulu no ka OS hou. A ʻaʻole makemake wau he binary ʻaʻohe ala e "hoʻololi i kēia manawa"
ka loaʻa ʻana o kahi kikowaena DHCP hana me ka hiki ke koho i ka helu IP o ka mea kākau inoa me ka hoʻohana ʻana i ka mac o ka mea kākau inoa a i ʻole hoʻololi i ka hui mac+port (koho 82)
e kākau i kaʻa kaʻa ʻē aʻe (Auē! ʻo kaʻu hana punahele kēia)
ka loaʻa ʻana o nā manaʻo e pili ana i kou lima kalapu ma Habrahabr (a i ʻole, he kono kono) 😉
Ka hopena: hana ia 😉 Hoʻāʻo ʻia ma FreeBSD a me Ubuntu OS. ʻO ke kumu, hiki ke noi ʻia ke code e hana ma lalo o kekahi OS, no ka mea Me he mea lā ʻaʻohe paʻa kikoʻī ma ke code.
E akahele! Nui nā mea e hiki mai ana.
Link i ka waihona no nā amateurs "pā ola".
ʻO ke kaʻina o ka hoʻokomo, hoʻonohonoho ʻana a me ka hoʻohana ʻana i ka hopena o ka "aʻo ʻana i ka ʻenehana" ʻoi aku ka haʻahaʻa, a laila kahi manaʻo liʻiliʻi e pili ana i ka protocol DHCP. No'u iho. A no ka moʻolelo 😉
He manaʻo liʻiliʻi
He aha ka DHCP
He protocol pūnaewele kēia e hiki ai i kahi mea hana ke ʻike i kona IP address (a me nā ʻāpana ʻē aʻe e like me ka puka, DNS, etc.) mai kahi kikowaena DHCP. Hoʻololi ʻia nā ʻeke me ka hoʻohana ʻana i ka protocol UDP. ʻO ke kumu maʻamau o ka hana ʻana o ka hāmeʻa i ke noi ʻana i nā ʻāpana pūnaewele penei:
Hoʻouna ka mea (mea kūʻai) i kahi noi hoʻolaha UDP (DHCPDISCOVER) ma ka pūnaewele me ka noi "maikaʻi, hāʻawi kekahi iaʻu i kahi IP address." Eia kekahi, maʻamau (akā ʻaʻole mau) ke noi mai ke awa 68 (kumu), a ʻo ka huakaʻi ʻo ke awa 67 (destination). Hoʻouna pū kekahi mau mea hana i nā ʻeke mai ke awa 67. Aia ka helu MAC o ka mea kūʻai aku i loko o ka ʻeke DHCPDISCOVER.
ʻO nā kikowaena DHCP āpau i loaʻa ma ka pūnaewele (a he nui paha o lākou) e hana i kahi hāʻawi DHCPOFFER me nā hoʻonohonoho pūnaewele no ka mea nāna i hoʻouna iā DHCPDISCOVER, a hoʻolaha pū ʻia ma luna o ka pūnaewele. ʻO ka ʻike ʻana i ka mea i manaʻo ʻia ai kēia ʻeke ma muli o ka helu MAC o ka mea kūʻai aku i hāʻawi mua ʻia ma ka noi DHCPDISCOVER.
ʻAe ka mea kūʻai aku i nā ʻeke me nā manaʻo no nā hoʻonohonoho pūnaewele, koho i ka mea maikaʻi loa (he ʻokoʻa paha nā koina, no ka laʻana, ka manawa o ka lawe ʻana i ka packet, ka helu o nā ala waena), a hana i kahi "noi mana" DHCPREQUEST me nā hoʻonohonoho pūnaewele. mai ke kikowaena DHCP makemake ia. I kēia hihia, hele ka ʻeke i kahi kikowaena DHCP kikoʻī.
Hoʻouna ke kikowaena i loaʻa ka DHCPREQUEST i kahi ʻeke hōʻano DHCPACK, kahi e papa inoa hou ai i nā hoʻonohonoho pūnaewele i manaʻo ʻia no kēia mea kūʻai.
Eia kekahi, aia nā ʻeke DHCPINFORM e hele mai ana mai ka mea kūʻai aku, a ʻo ke kumu o ia e hoʻomaopopo i ka server DHCP e ola ana ka "client" a ke hoʻohana nei i nā hoʻonohonoho pūnaewele i hoʻopuka ʻia. I ka hoʻokō ʻana o kēia kikowaena, mālama ʻole ʻia kēia mau ʻeke.
ʻAno pūʻolo
Ma keʻano laulā, ua like ke ʻano o kahi pahu packet Ethernet penei:
I kā mākou hihia, e noʻonoʻo wale mākou i ka ʻikepili mai nā ʻike o ka ʻeke UDP, me ka ʻole o nā poʻomanaʻo protocol OSI layer, ʻo ia hoʻi ka DHCP structure:
DHCPDISCOVER
No laila, hoʻomaka ke kaʻina hana o ka loaʻa ʻana o kahi IP IP no kahi hāmeʻa me ka mea kūʻai aku DHCP e hoʻouna ana i kahi noi hoʻolaha mai ke awa 68 a i 255.255.255.255:67. I loko o kēia pūʻolo, hoʻokomo ka mea kūʻai i kāna helu MAC, a me kāna mea makemake e loaʻa mai ka server DHCP. Hōʻike ʻia ke ʻano o ka pūʻolo ma ka papa ma lalo.
ʻO DHCPDISCOVER Papa Hoʻonohonoho Pakeke
Kau i loko o ka pūʻolo
inoa waiwai
Pākuhi:
Hōʻike
Byte
Hōʻike
1
Noi Boot
1
Hex
1
ʻAno memo. 1 - noi mai ka mea kūʻai aku i ke kikowaena, 2 - pane mai ke kikowaena i ka mea kūʻai aku
2
ʻAno paʻahana
1
Hex
1
Ke ʻano o ka helu helu lako, ma kēia protocol 1 - MAC
3
ʻO ka lōʻihi o nā ʻōlelo huna
6
Hex
1
Ka lōʻihi o ka helu wahi MAC
4
Hops
1
Hex
1
Ka helu o nā ala waena
5
Kālepa ID
23:cf:de:1d
Hex
4
Mea hōʻike kūʻai kūʻokoʻa. Hana ʻia e ka mea kūʻai ma ka hoʻomaka ʻana o kahi hana noi
7
Ua hala ka lua
0
Hex
4
ʻO ka manawa i kekona mai ka hoʻomaka ʻana o ka loaʻa ʻana o kahi helu wahi
9
Nā hae kāmaʻa
0
Hex
2
ʻO kekahi mau hae i hiki ke hoʻonohonoho ʻia e hōʻike i nā ʻāpana protocol
11
Helu IP mea kūʻai
0.0.0.0
Nā laina
4
Helu IP mea kūʻai (inā loaʻa)
15
ʻO kāu helu IP mea kūʻai aku
0.0.0.0
Nā laina
4
ʻO ka helu IP i hāʻawi ʻia e ke kikowaena (inā loaʻa)
19
Helu IP kikowaena aʻe
0.0.0.0
Nā laina
4
Helu IP kikowaena (inā ʻike ʻia)
23
Helu IP ʻelele relay
172.16.114.41
Nā laina
4
IP address o ka mea hoʻokuʻu (no ka laʻana, he hoʻololi)
27
Ka helu MAC mea kūʻai
14:d6:4d:a7:c9:55
Hex
6
ʻO ka helu MAC o ka mea hoʻouna packet (mea kūʻai aku)
31
ʻO ka hoʻopaʻa ʻana i ka helu wahi o nā mea kūʻai aku
Helu koho
50
Dec
1
He aha ka helu IP a ka mea kūʻai e makemake ai e loaʻa?
Ka lōʻihi koho
4
Dec
1
Waiwai koho
172.16.134.61
Nā laina
4
Helu koho
55
1
Ua noi ʻia nā ʻāpana pūnaewele e ka mea kūʻai aku. He ʻokoʻa paha ka haku mele
01 - ʻO ka mask pūnaewele
03 - ʻīpuka
06 - DNS
oc - inoa hoʻokipa
0f - inoa inoa pūnaewele
1c - helu wahi o ka noi hoʻolaha (hoʻolaha)
42 - inoa kikowaena TFTP
79 - Alanui Static Papa ole
Ka lōʻihi koho
8
1
Waiwai koho
01:03:06:0c:0f:1c:42:79
8
Helu koho
82
Dec
Ke koho 82, ka mea e hoʻouna i ka helu MAC o ka mea hana hou a me kekahi mau waiwai hou.
ʻO ka pinepine, ʻo ia ke awa o ka hoʻololi kahi e holo ai ka mea kūʻai aku DHCP hope. Aia kēia koho i nā ʻāpana ʻē aʻe. ʻO ka byte mua ka helu o ka "suboption", ʻo ka lua ka lōʻihi, a laila kona waiwai.
I kēia hihia, ma ke koho 82, ua hoʻopili ʻia nā sub-koho:
Agent Circuit ID = 00:04:00:01:00:04, kahi o nā bytes ʻelua hope loa ka port client DHCP kahi i hele mai ai ka noi.
Agent Remote ID = 00:06:c8:be:19:93:11:48 - MAC address o ka DHCP repeater device
Pau o ka pūʻolo
255
Dec
1
Hōʻike ka 255 i ka hopena o ka ʻeke
DHCPOFFER
I ka loaʻa ʻana o ka ʻeke DHCPDISCOVER i ka server a inā ʻike ʻo ia e hiki ke hāʻawi i ka mea kūʻai aku i kekahi mea mai ka mea i noi ʻia, a laila e hoʻopuka i kahi pane no ia - DHCPDISCOVER. Hoʻouna ʻia ka pane i ke awa "mai kahi i hele mai ai", ma ka hoʻolaha, no ka mea i kēia manawa, ʻaʻohe wahi IP o ka mea kūʻai aku, no laila hiki iā ia ke ʻae i ka ʻeke inā hoʻouna ʻia e ka hoʻolaha. ʻIke ka mea kūʻai aku he pūʻolo kēia nona ma kāna helu MAC i loko o ka pūʻolo, a me ka helu kālepa āna i hana ai i ka manawa i hana ʻia ai ka pūʻolo mua.
DHCPOFFER Pākuʻi Kūʻai Papa
Kau i loko o ka pūʻolo
Ka inoa o ka waiwai (maʻamau)
Pākuhi:
Hōʻike
Byte
Hōʻike
1
Noi Boot
1
Hex
1
ʻAno memo. 1 - noi mai ka mea kūʻai aku i ke kikowaena, 2 - pane mai ke kikowaena i ka mea kūʻai aku
2
ʻAno paʻahana
1
Hex
1
Ke ʻano o ka helu helu lako, ma kēia protocol 1 - MAC
3
ʻO ka lōʻihi o nā ʻōlelo huna
6
Hex
1
Ka lōʻihi o ka helu wahi MAC
4
Hops
1
Hex
1
Ka helu o nā ala waena
5
Kālepa ID
23:cf:de:1d
Hex
4
Mea hōʻike kūʻai kūʻokoʻa. Hana ʻia e ka mea kūʻai ma ka hoʻomaka ʻana o kahi hana noi
7
Ua hala ka lua
0
Hex
4
ʻO ka manawa i kekona mai ka hoʻomaka ʻana o ka loaʻa ʻana o kahi helu wahi
9
Nā hae kāmaʻa
0
Hex
2
ʻO kekahi mau hae i hiki ke hoʻonohonoho ʻia e hōʻike i nā ʻāpana protocol. I kēia hihia, ʻo 0 ke ʻano noi Unicast
11
Helu IP mea kūʻai
0.0.0.0
Nā laina
4
Helu IP mea kūʻai (inā loaʻa)
15
ʻO kāu helu IP mea kūʻai aku
172.16.134.61
Nā laina
4
ʻO ka helu IP i hāʻawi ʻia e ke kikowaena (inā loaʻa)
19
Helu IP kikowaena aʻe
0.0.0.0
Nā laina
4
Helu IP kikowaena (inā ʻike ʻia)
23
Helu IP ʻelele relay
172.16.114.41
Nā laina
4
IP address o ka mea hoʻokuʻu (no ka laʻana, he hoʻololi)
27
Ka helu MAC mea kūʻai
14:d6:4d:a7:c9:55
Hex
6
ʻO ka helu MAC o ka mea hoʻouna packet (mea kūʻai aku)
31
ʻO ka hoʻopaʻa ʻana i ka helu wahi o nā mea kūʻai aku
Nā laina
128
Ka inoa faila ma ke kikowaena i hoʻohana ʻia e nā kikowaena diskless i ka wā e hoʻomaka ai
235
Kuki kupua
63: 82: 53: 63
Hex
4
"Magic" helu, e like me ia, incl. hiki iā ʻoe ke hoʻoholo aia kēia ʻeke i ka protocol DHCP
Nā koho DHCP. Hiki ke hele ma kekahi kauoha
236
Helu koho
53
Dec
1
Koho 53, e wehewehe ana i ke ʻano packet DHCP 2 - DHCPOFFER
Ka lōʻihi koho
1
Dec
1
Waiwai koho
2
Dec
1
Helu koho
1
Dec
1
Ke koho e hāʻawi i ka mea kūʻai aku DHCP i kahi mask network
Ka lōʻihi koho
4
Dec
1
Waiwai koho
255.255.224.0
Nā laina
4
Helu koho
3
Dec
1
Ke koho e hāʻawi i ka mea kūʻai aku DHCP i kahi ʻīpuka paʻamau
Ka lōʻihi koho
4
Dec
1
Waiwai koho
172.16.12.1
Nā laina
4
Helu koho
6
Dec
1
Ke koho e hāʻawi i ka DHCP i ka mea kūʻai DNS
Ka lōʻihi koho
4
Dec
1
Waiwai koho
8.8.8.8
Nā laina
4
Helu koho
51
Dec
1
ʻO ke ola o nā ʻāpana pūnaewele i hoʻopuka ʻia i kekona, a laila pono ka mea kūʻai aku DHCP e noi hou iā lākou
Ka lōʻihi koho
4
Dec
1
Waiwai koho
86400
Dec
4
Helu koho
82
Dec
1
Koho 82, hana hou i ka mea i hiki mai ma DHCPDISCOVER
Ka lōʻihi koho
18
Dec
1
Waiwai koho
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18
Pau o ka pūʻolo
255
Dec
1
Hōʻike ka 255 i ka hopena o ka ʻeke
DHCPREQUEST
Ma hope o ka loaʻa ʻana o ka DHCPOFFER i ka mea kūʻai aku, hana ʻo ia i kahi ʻeke e noi ana i nā ʻāpana pūnaewele ʻaʻole i nā kikowaena DHCP āpau ma ka pūnaewele, akā i hoʻokahi wale nō kikoʻī, nona ka DHCPOFFER hāʻawi ʻo ia i makemake nui ai. Hiki ke ʻokoʻa nā pae hoʻohālike "like" a hilinaʻi i ka hoʻokō DHCP o ka mea kūʻai aku. Hōʻike ʻia ka mea i loaʻa i ka noi me ka hoʻohana ʻana i ka helu MAC o ka server DHCP. Eia kekahi, hiki ke hoʻouna ʻia kahi ʻeke DHCPREQUEST e ka mea kūʻai aku me ka hana ʻole ʻana i ka DHCPDISCOVER, inā ua loaʻa mua ka IP address o ka server.
ʻO DHCPREQUEST Papa Hoʻonohonoho Packet
Kau i loko o ka pūʻolo
Ka inoa o ka waiwai (maʻamau)
Pākuhi:
Hōʻike
Byte
Hōʻike
1
Noi Boot
1
Hex
1
ʻAno memo. 1 - noi mai ka mea kūʻai aku i ke kikowaena, 2 - pane mai ke kikowaena i ka mea kūʻai aku
2
ʻAno paʻahana
1
Hex
1
Ke ʻano o ka helu helu lako, ma kēia protocol 1 - MAC
3
ʻO ka lōʻihi o nā ʻōlelo huna
6
Hex
1
Ka lōʻihi o ka helu wahi MAC
4
Hops
1
Hex
1
Ka helu o nā ala waena
5
Kālepa ID
23:cf:de:1d
Hex
4
Mea hōʻike kūʻai kūʻokoʻa. Hana ʻia e ka mea kūʻai ma ka hoʻomaka ʻana o kahi hana noi
7
Ua hala ka lua
0
Hex
4
ʻO ka manawa i kekona mai ka hoʻomaka ʻana o ka loaʻa ʻana o kahi helu wahi
9
Nā hae kāmaʻa
8000
Hex
2
ʻO kekahi mau hae i hiki ke hoʻonohonoho ʻia e hōʻike i nā ʻāpana protocol. I kēia hihia, ua hoʻonohonoho ʻia ka "broadcast".
11
Helu IP mea kūʻai
0.0.0.0
Nā laina
4
Helu IP mea kūʻai (inā loaʻa)
15
ʻO kāu helu IP mea kūʻai aku
172.16.134.61
Nā laina
4
ʻO ka helu IP i hāʻawi ʻia e ke kikowaena (inā loaʻa)
19
Helu IP kikowaena aʻe
0.0.0.0
Nā laina
4
Helu IP kikowaena (inā ʻike ʻia)
23
Helu IP ʻelele relay
172.16.114.41
Nā laina
4
IP address o ka mea hoʻokuʻu (no ka laʻana, he hoʻololi)
27
Ka helu MAC mea kūʻai
14:d6:4d:a7:c9:55
Hex
6
ʻO ka helu MAC o ka mea hoʻouna packet (mea kūʻai aku)
31
ʻO ka hoʻopaʻa ʻana i ka helu wahi o nā mea kūʻai aku
Nā laina
128
Ka inoa faila ma ke kikowaena i hoʻohana ʻia e nā kikowaena diskless i ka wā e hoʻomaka ai
235
Kuki kupua
63: 82: 53: 63
Hex
4
"Magic" helu, e like me ia, incl. hiki iā ʻoe ke hoʻoholo aia kēia ʻeke i ka protocol DHCP
Nā koho DHCP. Hiki ke hele ma kekahi kauoha
236
Helu koho
53
Dec
3
Koho 53, e wehewehe ana i ke ano o ka packet DHCP 3 - DHCPREQUEST
Ka lōʻihi koho
1
Dec
1
Waiwai koho
3
Dec
1
Helu koho
61
Dec
1
ID mea kūʻai: 01 (no ka Ehernet) + ka helu MAC mea kūʻai aku
Ka lōʻihi koho
7
Dec
1
Waiwai koho
01:2c:ab:25:ff:72:a6
Hex
7
Helu koho
60
Dec
"Ka mea hoʻomaopopo papa kūʻai". I koʻu hihia, hōʻike ia i ka mana o ka mea kūʻai aku DHCP. Hoʻihoʻi paha nā mea hana ʻē aʻe i kahi mea ʻokoʻa. Hōʻike ʻo Windows i ka MSFT 5.0
Ka lōʻihi koho
11
Dec
Waiwai koho
udhcp 0.9.8
Nā laina
Helu koho
55
1
Ua noi ʻia nā ʻāpana pūnaewele e ka mea kūʻai aku. He ʻokoʻa paha ka haku mele
01 - ʻO ka mask pūnaewele
03 - ʻīpuka
06 - DNS
oc - inoa hoʻokipa
0f - inoa inoa pūnaewele
1c - helu wahi o ka noi hoʻolaha (hoʻolaha)
42 - inoa kikowaena TFTP
79 - Alanui Static Papa ole
Ka lōʻihi koho
8
1
Waiwai koho
01:03:06:0c:0f:1c:42:79
8
Helu koho
82
Dec
1
Koho 82, hana hou i ka mea i hiki mai ma DHCPDISCOVER
Ka lōʻihi koho
18
Dec
1
Waiwai koho
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18
Pau o ka pūʻolo
255
Dec
1
Hōʻike ka 255 i ka hopena o ka ʻeke
DHCPACK
E like me ka hōʻoia ʻana "ʻae, pololei, ʻo kāu IP address kēia, a ʻaʻole wau e hāʻawi i kekahi" mai ka server DHCP, kahi ʻeke ma ka format DHCPACK mai ke kikowaena i ka mea kūʻai aku. Hoʻouna ʻia e hoʻolaha e like me nā ʻeke ʻē aʻe. ʻOiai, ma ke code ma lalo nei no kahi kikowaena DHCP i hoʻokō ʻia ma Python, inā wale nō, hoʻopā wau i kekahi noi hoʻolaha ma ka hoʻouna ʻana i kahi ʻeke i kahi IP mea kūʻai aku, inā ʻike ʻia. Eia kekahi, ʻaʻole mālama iki ka server DHCP inā ua hōʻea ka ʻeke DHCPACK i ka mea kūʻai aku. Inā ʻaʻole i loaʻa ka DHCPACK i ka mea kūʻai aku, a laila ma hope o kekahi manawa e hana hou ia i ka DHCPREQUEST
DHCPACK Pākuʻi Kūʻai Papa
Kau i loko o ka pūʻolo
Ka inoa o ka waiwai (maʻamau)
Pākuhi:
Hōʻike
Byte
Hōʻike
1
Noi Boot
2
Hex
1
ʻAno memo. 1 - noi mai ka mea kūʻai aku i ke kikowaena, 2 - pane mai ke kikowaena i ka mea kūʻai aku
2
ʻAno paʻahana
1
Hex
1
Ke ʻano o ka helu helu lako, ma kēia protocol 1 - MAC
3
ʻO ka lōʻihi o nā ʻōlelo huna
6
Hex
1
Ka lōʻihi o ka helu wahi MAC
4
Hops
1
Hex
1
Ka helu o nā ala waena
5
Kālepa ID
23:cf:de:1d
Hex
4
Mea hōʻike kūʻai kūʻokoʻa. Hana ʻia e ka mea kūʻai ma ka hoʻomaka ʻana o kahi hana noi
7
Ua hala ka lua
0
Hex
4
ʻO ka manawa i kekona mai ka hoʻomaka ʻana o ka loaʻa ʻana o kahi helu wahi
9
Nā hae kāmaʻa
8000
Hex
2
ʻO kekahi mau hae i hiki ke hoʻonohonoho ʻia e hōʻike i nā ʻāpana protocol. I kēia hihia, ua hoʻonohonoho ʻia ka "broadcast".
11
Helu IP mea kūʻai
0.0.0.0
Nā laina
4
Helu IP mea kūʻai (inā loaʻa)
15
ʻO kāu helu IP mea kūʻai aku
172.16.134.61
Nā laina
4
ʻO ka helu IP i hāʻawi ʻia e ke kikowaena (inā loaʻa)
19
Helu IP kikowaena aʻe
0.0.0.0
Nā laina
4
Helu IP kikowaena (inā ʻike ʻia)
23
Helu IP ʻelele relay
172.16.114.41
Nā laina
4
IP address o ka mea hoʻokuʻu (no ka laʻana, he hoʻololi)
27
Ka helu MAC mea kūʻai
14:d6:4d:a7:c9:55
Hex
6
ʻO ka helu MAC o ka mea hoʻouna packet (mea kūʻai aku)
31
ʻO ka hoʻopaʻa ʻana i ka helu wahi o nā mea kūʻai aku
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 hoao hoao pydhcp koho_8.8.8.8_hex:sw_port82:1:20 koho_22_hex:sw_port82:2:16 koho_18_hex:sw_mac:82:26 40 koho ip, mask, router, dns mai nā mea hoʻohana ma kahi o luna (mac) = luna ('{option_3_AgentRemoteId_hex}') a me luna (port) = luna ('{option_1_AgentCircuitId_port_hex}') koho ip, mask, router, dns mai nā mea hoʻohana ma kahi o luna (mac) = luna ('{sw_mac}') a me luna (port) = luna ('{sw_port82}') koho ip, mask, router, dns mai nā mea hoʻohana ma kahi o luna (mac)= luna ('{ClientMacAddress}') hoʻokomo i loko o ka mōʻaukala (id,dt,mac,ip,comment) waiwai (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')
I kēia manawa i nā kikoʻī hou aku e pili ana i nā tag:
Hōʻike ka ʻāpana dhcpserver i nā hoʻonohonoho kumu no ka hoʻomaka ʻana i ke kikowaena, ʻo ia hoʻi:
host - he aha ka IP address e hoʻolohe ai ke kikowaena ma ke awa 67
hoʻolaha - ʻo ia ka ip ka hoʻolaha no DHCPOFFER a me DHCPACK
DHCPServer - he aha ka ip o ka server DHCP
LeaseTime manawa hoʻolimalima o ka helu IP i hoʻopuka ʻia
ThreadLimit - ehia mau lola e holo ana i ka manawa like no ka hooponopono ana i na pakeke UDP e komo mai ana ma ke awa 67. Manao ia e kokua i na papahana haawe nui 😉
defaultMask,defaultRouter,defaultDNS - he aha ka mea i hāʻawi ʻia i ka mea kūʻai aku ma ka paʻamau inā loaʻa kahi IP i ka waihona, akā ʻaʻole i kuhikuhi ʻia nā ʻāpana ʻē aʻe no ia.
ʻāpana mysql:
host, username, password, basename - ʻōlelo nā mea a pau nona iho. Hoʻopuka ʻia kahi hoʻonohonoho waihona waihona ma GitHub
Paukū nīnau: ua wehewehe ʻia nā noi no ka loaʻa ʻana o OFFER/ACK.
offer_count - ka helu o nā laina me nā noi e hoʻihoʻi i kahi hopena e like me ip, mask, router, dns
hāʻawi_n - ke kaula nīnau. Inā nele ka hoʻihoʻi ʻana, e hoʻokō i kēia noi hāʻawi
history_sql - he nīnau e kākau, no ka laʻana, i ka "moʻolelo mana" no ka mea kākau inoa
Hiki i nā noi ke hoʻokomo i nā mea hoʻololi mai ka ʻāpana koho a i ʻole nā koho mai ka protocol DHCP.
Māhele koho. ʻO kēia kahi e lilo ai i mea hoihoi. Maʻaneʻi hiki iā mākou ke hana i nā loli i hiki iā mākou ke hoʻohana ma hope ma ka ʻāpana nīnau.
Eia kekahi laʻana:
option_82_hex:sw_port1:20:22
, lawe kēia laina kauoha i ka laina holoʻokoʻa i hiki mai i ke koho noi DHCP 82, ma ka ʻano hex, ma ka laulā mai ka 20 a hiki i ka 22 bytes inclusive a hoʻokomo iā ia i ka sw_port1 hoʻololi hou (hoʻololi i ke awa mai kahi i hele mai ai ka noi)
option_82_hex:sw_mac:26:40
, wehewehe i ka sw_mac variable, e lawe ana i ka hex mai ka laulā 26:40
Hiki iā ʻoe ke ʻike i nā koho āpau i hiki ke hoʻohana ʻia i nā nīnau ma ka hoʻomaka ʻana i ke kikowaena me ka hoʻololi -d. E ʻike mākou i kahi mea e like me kēia log:
No laila, hiki iā mākou ke kāʻei i kekahi ʻano hoʻololi i {} a e hoʻohana ʻia ia i ka hulina SQL.
E hoʻopaʻa mākou no ka mōʻaukala i loaʻa i ka mea kūʻai aku ka helu IP:
Hoʻomaka i ke kikowaena
./pydhcpdb.py -d -c config.xml
— d ke ʻano hoʻopuka hoʻoluhi DEBUG
- c <filename> waihona hoʻonohonoho
ʻRieflelo hoʻopaneʻe
A i kēia manawa nā kikoʻī hou aku e pili ana i ka hoʻokō ʻana i ke kikowaena ma Python. He eha. Ua aʻo ʻia ʻo Python ma ka lele. Nui nā manawa i hana ʻia ma ke ʻano o "wow, i kekahi mea ua hana wau ia hana." ʻAʻole i hoʻopaʻa ʻia, a waiho ʻia ma kēia ʻano ma muli o ka ʻike liʻiliʻi i ka hoʻomohala Python. E noʻonoʻo wau i nā mea hoihoi loa o ka hoʻokō kikowaena ma "code".
ʻO ka parser file hoʻonohonoho XML
Hoʻohana ʻia ka module Python maʻamau xml.dom. He mea maʻalahi ia, akā i ka wā o ka hoʻokō ʻana, ʻike ʻia ka nele o nā palapala a me nā hiʻohiʻona ma ka pūnaewele e hoʻohana ana i kēia module.
lāʻau = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") no ka elem ma mconfig: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["mysql_username"]=elem.getElementsByTagName("mea hoʻohana")[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") no ka elem i 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] =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") no ka elem ma qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.data no ka helu ma laina(int(gconfig["offer_count")): gconfig["offer_"+str(num+0)]=elem.getElementsByTagName("offer_"+str(num+1))[1].firstChild.data gconfig ["history_sql"]=elem.getElementsByTagName("history_sql")[0] : optionsMod.append(options.firstChild.data)
Heluhelu nui
ʻO ka mea kupanaha, hoʻokō ʻia ka multithreading ma Python me ka maʻalahi a maʻalahi.
def PacketWork(data,addr): ... # ka hoʻokō ʻana i ka hoʻopau ʻana i ka ʻeke e komo mai ana a pane aku iā ia ... ʻoiai ʻOiaʻiʻo: data, addr = udp_socket.recvfrom(1024) # kali no ka UDP packet thread = threading.Thread( target=PacketWork, args=(data,addr,)).start() # e like me ka mea i hiki mai - hoʻomaka mākou i ka hana PacketWork i wehewehe mua ʻia ma hope me nā ʻāpana ʻoiai threading.active_count() >gconfig["dhcp_ThreadLimit"]: manawa. moe(1) # inā ka helu He nui nā loina e holo nei ma mua o nā hoʻonohonoho, kali mākou a emi mai ka nui o lākou.
Loaʻa / hoʻouna i ka ʻeke DHCP
No ka hoʻopaʻa ʻana i nā ʻeke UDP e hele mai ana ma ke kāleka pūnaewele, pono ʻoe e "hoʻokiʻekiʻe" i ke kumu:
ʻO AF_INET - ʻo ia hoʻi, ʻo ka ʻano helu helu he IP: port. Aia kekahi AF_UNIX - kahi i hāʻawi ʻia ai ka helu wahi ma ka inoa faila.
SOCK_DGRAM - ʻo ia hoʻi, ʻaʻole mākou e ʻae i kahi "packet maka", akā kahi i hala mua i ka pā ahi, a me kahi ʻeke ʻoki ʻoki ʻia. ʻO kēlā mau mea. loaʻa iā mākou kahi ʻeke UDP wale nō me ka ʻole o ka ʻāpana "kino" o ka ʻōwili packet UDP. Inā ʻoe e hoʻohana i ka hae SOCK_RAW, a laila pono ʻoe e pākuʻi i kēia "wrapper".
ʻO ka hoʻouna ʻana i kahi ʻeke e like me ka hoʻolaha:
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #e hoʻololi i ke kumu i ke ʻano hoʻolaha rz=udp_socket.sendto(packetack, (gconfig["broadcast"],68))
, a i ka helu wahi "mai hea mai ka pūʻolo":
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # hoʻololi i ke kumu i ke ʻano hoʻolohe lehulehu rz=udp_socket.sendto(packetack, addr)
, kahi ʻo SOL_SOCKET ʻo ia ka "pae kaʻina" no ka hoʻonohonoho ʻana i nā koho,
, SO_BROADCAST koho e "hoolaha" ka puolo mahiole.
, Hoʻololi ke koho SO_REUSEADDR i ke kumu i ke ʻano "nui ka poʻe hoʻolohe". Ma ke kumumanaʻo, ʻaʻole pono i kēia hihia, akā ma kekahi o nā kikowaena FreeBSD aʻu i hoʻāʻo ai, ʻaʻole i hana ke code me ka ʻole o kēia koho.
Hoʻopili i kahi ʻeke DHCP
ʻO kēia kahi aʻu i makemake nui ai iā Python. ʻIke ʻia ma waho o ka pahu e hiki ai iā ʻoe ke maʻalahi me ka bytecode. E ʻae iā ia e unuhi maʻalahi i nā waiwai decimal, nā kaula a me nā hex - ʻo ia. ʻo kēia ka mea e pono ai mākou e hoʻomaopopo i ke ʻano o ka pūʻolo. No laila, no ka laʻana, hiki iā ʻoe ke loaʻa i kahi ākea o nā bytes ma HEX a me nā bytes wale nō: