DHCP+Mysql kikowaena ma Python

DHCP+Mysql kikowaena ma Python

ʻO ke kumu o kēia papahana:

  • E aʻo e pili ana i ka DHCP ma kahi pūnaewele IPv4
  • 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:

  1. 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.
  2. ʻ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.
  3. ʻ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ʻī.
  4. 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.

DHCP+Mysql kikowaena ma Python

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:

DHCP+Mysql kikowaena ma Python

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
 
Hex
10
Noho mālama ʻia. Hoʻopiha pinepine ʻia me nā zeros

41
Ka inoa hoʻokipa kikowaena
 
Nā laina
64
inoa kikowaena DHCP. ʻAʻole i hoʻouna pinepine ʻia

105
Kapa inoa faila
 
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 kuhikuhi ana i ke ano o ka packet DHCP

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

 
Ka lōʻihi koho
1
Dec
1

 
Waiwai koho
1
Dec
1

 
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

 
Ka lōʻihi koho
18
Dec
 

 
Waiwai koho
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
Hex
 

 
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
 
Hex
10
Noho mālama ʻia. Hoʻopiha pinepine ʻia me nā zeros

41
Ka inoa hoʻokipa kikowaena
 
Nā laina
64
inoa kikowaena DHCP. ʻAʻole i hoʻouna pinepine ʻia

105
Kapa inoa faila
 
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
 
Hex
10
Noho mālama ʻia. Hoʻopiha pinepine ʻia me nā zeros

41
Ka inoa hoʻokipa kikowaena
 
Nā laina
64
inoa kikowaena DHCP. ʻAʻole i hoʻouna pinepine ʻia

105
Kapa inoa faila
 
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
 
Hex
10
Noho mālama ʻia. Hoʻopiha pinepine ʻia me nā zeros

41
Ka inoa hoʻokipa kikowaena
 
Nā laina
64
inoa kikowaena DHCP. ʻAʻole i hoʻouna pinepine ʻia

105
Kapa inoa faila
 
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 5 - DHCPACK

 
Ka lōʻihi koho
1
Dec
1

 
Waiwai koho
5
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

Kāu Mau Koho Paʻamau

ʻO ka hoʻokomo maoli ʻana i ka hoʻokomo ʻana i nā modula python pono no ka hana. Ua manaʻo ʻia ua hoʻokomo ʻia a hoʻonohonoho ʻia ʻo MySQL.

FreeBSD

pkg hoʻokomo i ka python3 python3 -m ensurepip pip3 hoʻokomo i ka mysql-connector

Ubuntu

sudo apt-e hoʻokomo i ka python3 sudo apt-e hoʻokomo i ka pip3 sudo pip3 e hoʻokomo i ka mysql-connector

Hana mākou i kahi waihona MySQL, hoʻouka i ka pydhcp.sql dump i loko, a hoʻonohonoho i ka faila hoʻonohonoho.

Kauoa

Aia nā hoʻonohonoho kikowaena āpau i kahi faila xml. Waihona waihona:

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:

--ua hōʻea ʻia kahi pūʻolo DHCPINFORM ma ke awa 67, mai 0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': '0025224'764ad00cAddress. 7d' , ' HType': 'Ethernet', 'HostName': b'x91xa5xe0xa3xa5xa9-x8fx8a', 'ReqListDNS': ʻOiaʻiʻo, 'ReqListRomainName': ʻOiaʻiʻo, 'ReqListPerfowmRouterDiscover': ʻOiaʻiʻo, 'ReqListStatRouter': ʻOiaʻiʻo, 'ReqListRouterReq': 'Nīnau 'ReqListSubnetM': 'Oia'i'o, 'ReqListVendorSpecInfo': 43, 'RequestedIpAddress': '0.0.0.0', 'Vendor': b'MSFT 5.0', 'chaddr': '0025224ad764', '172.30.128.13ad00', '00' , 'flags': b'x172.30.114.25x308', 'giaddr': '6', 'gpoz': 1, 'hlen': 82, 'hops': 12, 'htype': 'MAC', 'magic_cookie': b'cx12Sc ', 'op': 'DHCPINFORM', 'option53': 53, 'option55': 55, 'option60': 60, 'option61': 61, 'option82': 82, 'option82': 12, ' option_01_byte': b'x06x00x04x00x01x00x06x02x08x00x06x00' b'x1x9x2eXx82exb12010600040001000602080006001xad', 'option_589_hex': '2e tion_82_len': 18 82, 'option_12_str': "b'x01x06x00x04x00x01x00x06x02x08x00x06x00x1x9eXx2exb768xad'", 'hopena': False, 'secs,' 'siaddr': '0.0.0.0', 'sw_mac': '001e589eb2ad', 'sw_port1': '06', 'xidbyte': b'

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:

DHCP+Mysql kikowaena ma Python

DHCP+Mysql kikowaena ma Python

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:

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

, aia nā hae:

  • ʻ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ō:

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

, e hoʻopili i nā bytes i kahi hoʻolālā:

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

E kiʻi i ka IP mai ka hale:

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

A ʻo ia hoʻi:

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

ʻO ia wale nō i kēia manawa 😉

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka