์ด ํ๋ก์ ํธ์ ๋ชฉ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- IPv4 ๋คํธ์ํฌ์ DHCP์ ๋ํด ์์๋ณด๊ธฐ
- Python ๋ฐฐ์ฐ๊ธฐ (์ฒ์๋ถํฐ ์์ํ๋ ๊ฒ๋ณด๋ค ์กฐ๊ธ ๋ ๐)
- ์๋ฒ ๊ต์ฒด
DB2DHCP (๋ด ํฌํฌ), ์๋ณธ์ฌ๊ธฐ์ , ์๋ก์ด OS์ฉ์ผ๋ก ์กฐ๋ฆฝํ๊ธฐ๊ฐ ์ ์ ๋ ์ด๋ ค์์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ "์ง๊ธ ๋น์ฅ ๋ฐ๊ฟ ์ ์๋" ๋ฐ์ด๋๋ฆฌ๋ผ๋ ์ ์ด ๋ง์์ ๋ค์ง ์์ต๋๋ค. - ๊ฐ์ ์์ mac ๋๋ ์ค์์น mac+ํฌํธ ์กฐํฉ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ์์ IP ์ฃผ์๋ฅผ ์ ํํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์๋ ์ค์ธ DHCP ์๋ฒ ํ๋ณด(์ต์ 82)
- ๋ค๋ฅธ ์์ ๊ฑฐ ์ฐ๊ธฐ(์! ์ด๊ฑด ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ํ๋์ด์ผ)
- Habrahabr์์ ๊ทํ์ ํด๋ฝ ๊ด๋ฆฌ์ ๋ํ ์๊ฒฌ์ ๋ฐ์ต๋๋ค(๋๋ ์ด๋๋ฅผ ๋ฐ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค) ๐
๊ฒฐ๊ณผ: ์๋ํฉ๋๋ค ๐ FreeBSD ๋ฐ Ubuntu OS์์ ํ
์คํธ๋์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ฝ๋๋ ๋ชจ๋ OS์์ ์๋ํ๋๋ก ์์ฒญ๋ ์ ์์ต๋๋ค. ์ฝ๋์๋ ํน์ ๋ฐ์ธ๋ฉ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฃผ์ํ์ฌ! ์์ผ๋ก ๋ ๋ง์ ๊ฒ์ด ์์ต๋๋ค.
์๋ง์ถ์ด๋ฅผ ์ํ ์ ์ฅ์ ๋งํฌ
"ํ๋์จ์ด ์ฐ๊ตฌ"์ ๊ฒฐ๊ณผ๋ฅผ ์ค์น, ๊ตฌ์ฑ ๋ฐ ์ฌ์ฉํ๋ ๊ณผ์ ์ ํจ์ฌ ๋ฎ๊ณ DHCP ํ๋กํ ์ฝ์ ๋ํ ์ฝ๊ฐ์ ์ด๋ก ์ ๋๋ค. ๋ ์์ ์ ์ํด. ๊ทธ๋ฆฌ๊ณ ์ญ์ฌ๋ฅผ ์ํด ๐
์ฝ๊ฐ์ ์ด๋ก
DHCP ๋ ๋ฌด์์ ๋๊น?
์ด๋ ์ฅ์น๊ฐ DHCP ์๋ฒ์์ IP ์ฃผ์(๋ฐ ๊ฒ์ดํธ์จ์ด, DNS ๋ฑ๊ณผ ๊ฐ์ ๊ธฐํ ๋งค๊ฐ๋ณ์)๋ฅผ ์ฐพ์ ์ ์๋๋ก ํ๋ ๋คํธ์ํฌ ํ๋กํ ์ฝ์ ๋๋ค. ํจํท์ UDP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๊ตํ๋ฉ๋๋ค. ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์๋ฅผ ์์ฒญํ ๋ ์ฅ์น์ ์ผ๋ฐ์ ์ธ ์๋ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฅ์น(ํด๋ผ์ด์ธํธ)๋ "๋๊ตฐ๊ฐ IP ์ฃผ์๋ฅผ ์๋ ค์ฃผ์ธ์."๋ผ๋ ์์ฒญ๊ณผ ํจ๊ป ๋คํธ์ํฌ ์ ์ฒด์ UDP ๋ธ๋ก๋์บ์คํธ ์์ฒญ(DHCPDISCOVER)์ ๋ณด๋ ๋๋ค. ๋ํ ํญ์ ๊ทธ๋ฐ ๊ฒ์ ์๋์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ์ ํฌํธ 68(์์ค)์์ ๋ฐ์ํ๋ฉฐ ๋์์ ํฌํธ 67(๋์)์ ๋๋ค. ์ผ๋ถ ์ฅ์น๋ ํฌํธ 67์์๋ ํจํท์ ๋ณด๋ ๋๋ค. ํด๋ผ์ด์ธํธ ์ฅ์น์ MAC ์ฃผ์๋ DHCPDISCOVER ํจํค์ง ๋ด์ ํฌํจ๋์ด ์์ต๋๋ค.
- ๋คํธ์ํฌ์ ์๋ ๋ชจ๋ DHCP ์๋ฒ(์ฌ๋ฌ ๊ฐ๊ฐ ์์ ์ ์์)๋ DHCPDISCOVER๋ฅผ ๋ณด๋ธ ์ฅ์น์ ๋ํ ๋คํธ์ํฌ ์ค์ ์ผ๋ก DHCPOFFER ์ ์์ ํ์ฑํ๊ณ ์ด๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ธ๋ก๋์บ์คํธํฉ๋๋ค. ์ด ํจํท์ ๋์์ด ๋๊ตฌ์ธ์ง ์๋ณํ๋ ๊ฒ์ ์์ DHCPDISCOVER ์์ฒญ์์ ์ ๊ณต๋ ํด๋ผ์ด์ธํธ์ MAC ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๋คํธ์ํฌ ์ค์ ์ ๋ํ ์ ์์ด ํฌํจ๋ ํจํท์ ์๋ฝํ๊ณ ๊ฐ์ฅ ๋งค๋ ฅ์ ์ธ ํจํท์ ์ ํํ๊ณ (์: ํจํท ์ ๋ฌ ์๊ฐ, ์ค๊ฐ ๊ฒฝ๋ก ์ ๋ฑ ๊ธฐ์ค์ด ๋ค๋ฅผ ์ ์์) ๋คํธ์ํฌ ์ค์ ์ ์ฌ์ฉํ์ฌ "๊ณต์ ์์ฒญ" DHCPREQUEST๋ฅผ ๋ณด๋ ๋๋ค. ์ข์ํ๋ DHCP ์๋ฒ์์. ์ด ๊ฒฝ์ฐ ํจํท์ ํน์ DHCP ์๋ฒ๋ก ์ด๋ํฉ๋๋ค.
- DHCPREQUEST๋ฅผ ์์ ํ ์๋ฒ๋ DHCPACK ํ์ ํจํท์ ๋ณด๋ ๋๋ค. ์ด ํจํท์๋ ์ด ํด๋ผ์ด์ธํธ์ ๋ํ ๋คํธ์ํฌ ์ค์ ์ด ๋ค์ ํ ๋ฒ ๋์ด๋ฉ๋๋ค.
๋ํ ํด๋ผ์ด์ธํธ์์ ์ค๋ DHCPINFORM ํจํท๋ ์๋๋ฐ, ๊ทธ ๋ชฉ์ ์ DHCP ์๋ฒ์ "ํด๋ผ์ด์ธํธ๊ฐ ์ด์์๋ค"๋ ์ฌ์ค์ ์๋ฆฌ๊ณ ๋ฐ๊ธ๋ ๋คํธ์ํฌ ์ค์ ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์
๋๋ค. ์ด ์๋ฒ ๊ตฌํ์์๋ ์ด๋ฌํ ํจํท์ด ๋ฌด์๋ฉ๋๋ค.
ํจํค์ง ํ์
์ผ๋ฐ์ ์ผ๋ก ์ด๋๋ท ํจํท ํ๋ ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ OSI ๊ณ์ธต ํ๋กํ ์ฝ ํค๋, ์ฆ DHCP ๊ตฌ์กฐ ์์ด UDP ํจํท์ ๋ด์ฉ์์ ์ง์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ง ๊ณ ๋ คํ ๊ฒ์
๋๋ค.
DHCP๋์ค์ปค๋ฒ
๋ฐ๋ผ์ ์ฅ์น์ IP ์ฃผ์๋ฅผ ์ป๋ ํ๋ก์ธ์ค๋ DHCP ํด๋ผ์ด์ธํธ๊ฐ ํฌํธ 68์์ 255.255.255.255:67๋ก ๋ธ๋ก๋์บ์คํธ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ์ด ํจํค์ง์๋ ํด๋ผ์ด์ธํธ๊ฐ MAC ์ฃผ์์ DHCP ์๋ฒ๋ก๋ถํฐ ์ ํํ ์์ ํ๋ ค๋ ์ฃผ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ํจํค์ง ๊ตฌ์กฐ๋ ์๋ ํ์ ์ค๋ช ๋์ด ์์ต๋๋ค.
DHCPDISCOVER ํจํท ๊ตฌ์กฐ ํ ์ด๋ธ
ํจํค์ง ๋ด ์์น
๊ฐ ์ด๋ฆ
์
์๊ฐ
๋ฐ์ดํธ
์ค๋ช
1
๋ถํ
์์ฒญ
1
๋ง๋
1
๋ฉ์์ง ์ ํ. 1 - ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก์ ์์ฒญ, 2 - ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก์ ์๋ต
2
ํ๋์จ์ด ์ ํ
1
๋ง๋
1
์ด ํ๋กํ ์ฝ์ ํ๋์จ์ด ์ฃผ์ ์ ํ 1 - MAC
3
ํ๋์จ์ด ์ฃผ์ ๊ธธ์ด
6
๋ง๋
1
์ฅ์น MAC ์ฃผ์ ๊ธธ์ด
4
์ฌ๋ฆฌ์ฃ
1
๋ง๋
1
์ค๊ฐ ๊ฒฝ๋ก ์
5
๊ฑฐ๋ ID
23:cf:de:1d
๋ง๋
4
๊ณ ์ ํ ๊ฑฐ๋ ์๋ณ์์
๋๋ค. ์์ฒญ ์์
์์ ์ ํด๋ผ์ด์ธํธ์ ์ํด ์์ฑ๋จ
7
๋ ๋ฒ์งธ ๊ฒฝ๊ณผ
0
๋ง๋
4
์ฃผ์ ํ๋ ํ๋ก์ธ์ค๊ฐ ์์๋ ํ์ ์๊ฐ(์ด)
9
๋ถํ
ํ๋๊ทธ
0
๋ง๋
2
ํ๋กํ ์ฝ ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ค์ ํ ์ ์๋ ํน์ ํ๋๊ทธ
11
ํด๋ผ์ด์ธํธ IP ์ฃผ์
0.0.0.0
์
4
ํด๋ผ์ด์ธํธ IP ์ฃผ์(์๋ ๊ฒฝ์ฐ)
15
๊ทํ์ ํด๋ผ์ด์ธํธ IP ์ฃผ์
0.0.0.0
์
4
์๋ฒ์์ ์ ๊ณตํ๋ IP ์ฃผ์(์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ)
19
๋ค์ ์๋ฒ IP ์ฃผ์
0.0.0.0
์
4
์๋ฒ IP ์ฃผ์(์๋ ค์ง ๊ฒฝ์ฐ)
23
๋ฆด๋ ์ด ์์ด์ ํธ IP ์ฃผ์
172.16.114.41
์
4
๋ฆด๋ ์ด ์์ด์ ํธ์ IP ์ฃผ์(์: ์ค์์น)
27
ํด๋ผ์ด์ธํธ MAC ์ฃผ์
14:d6:4d:a7:c9:55
๋ง๋
6
ํจํท ์ก์ ์(ํด๋ผ์ด์ธํธ)์ MAC ์ฃผ์
31
ํด๋ผ์ด์ธํธ ํ๋์จ์ด ์ฃผ์ ํจ๋ฉ
๋ง๋
10
์์ฝ์. ์ผ๋ฐ์ ์ผ๋ก XNUMX์ผ๋ก ์ฑ์์ง๋๋ค.
41
์๋ฒ ํธ์คํธ ์ด๋ฆ
์
64
DHCP ์๋ฒ ์ด๋ฆ. ์ผ๋ฐ์ ์ผ๋ก ์ ์ก๋์ง ์์
105
๋ถํ
ํ์ผ ์ด๋ฆ
์
128
๋ถํ
์ ๋์คํฌ ์๋ ์คํ
์ด์
์์ ์ฌ์ฉํ๋ ์๋ฒ์ ํ์ผ ์ด๋ฆ
235
๋งค์ง ์ฟ ํค
63 : 82 : 53 : 63
๋ง๋
4
"๋งค์ง"๋ฒํธ์ ๋ฐ๋ผ ๋ค์์ด ํฌํจ๋ฉ๋๋ค. ์ด ํจํท์ด DHCP ํ๋กํ ์ฝ์ ์ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค
DHCP ์ต์ . ์์ ์๊ด์์ด ๊ฐ ์ ์์
236
์ต์
๋ฒํธ
53
12์
1
DHCP ํจํท ์ ํ์ ์ง์ ํ๋ ์ต์
53
1 - DHCP ๊ฒ์
3 - DHCP์์ฒญ
2 - DHCP ์ ์
5 - DHCPACK
8 - DHCPINFORM
์ต์
๊ธธ์ด
1
12์
1
์ต์
๊ฐ
1
12์
1
์ต์
๋ฒํธ
50
12์
1
ํด๋ผ์ด์ธํธ๊ฐ ์์ ํ๋ ค๋ IP ์ฃผ์๋ ๋ฌด์์
๋๊น?
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
172.16.134.61
์
4
์ต์
๋ฒํธ
55
1
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์์
๋๋ค. ๊ตฌ์ฑ์ ๋ค์ํ ์ ์์ต๋๋ค
01 - ๋คํธ์ํฌ ๋ง์คํฌ
03 - ๊ฒ์ดํธ์จ์ด
06 - DNS
oc โ ํธ์คํธ ์ด๋ฆ
0f - ๋คํธ์ํฌ ๋๋ฉ์ธ ์ด๋ฆ
1c - ๋ฐฉ์ก ์์ฒญ ์ฃผ์(๋ฐฉ์ก)
42 - TFTP ์๋ฒ ์ด๋ฆ
79 - ํด๋์ค ์๋ ์ ์ ๊ฒฝ๋ก
์ต์
๊ธธ์ด
8
1
์ต์
๊ฐ
01:03:06:0c:0f:1c:42:79
8
์ต์
๋ฒํธ
82
12์
์ต์
82๋ ์ค๊ณ๊ธฐ ์ฅ์น์ MAC ์ฃผ์์ ์ผ๋ถ ์ถ๊ฐ ๊ฐ์ ์ ์กํฉ๋๋ค.
๋๊ฐ ์ด๋ ์ต์ข DHCP ํด๋ผ์ด์ธํธ๊ฐ ์คํ๋๋ ์ค์์น์ ํฌํธ์ ๋๋ค. ์ด ์ต์ ์๋ ์ถ๊ฐ ๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ "ํ์ ์ต์ "์ ๋ฒํธ์ด๊ณ , ๋ ๋ฒ์งธ ๋ฐ์ดํธ๋ ํด๋น ๊ธธ์ด, ๊ทธ ๋ค์ ๊ฐ์ ๋๋ค.
์ด ๊ฒฝ์ฐ ์ต์
82์๋ ํ์ ์ต์
์ด ์ค์ฒฉ๋์ด ์์ต๋๋ค.
์์ด์ ํธ ํ๋ก ID = 00:04:00:01:00:04, ์ฌ๊ธฐ์ ๋ง์ง๋ง XNUMX๋ฐ์ดํธ๋ ์์ฒญ์ด ๋ฐ์ํ DHCP ํด๋ผ์ด์ธํธ ํฌํธ์
๋๋ค.
์์ด์ ํธ ์๊ฒฉ ID = 00:06:c8:be:19:93:11:48 - DHCP ๋ฆฌํผํฐ ์ฅ์น์ MAC ์ฃผ์
์ต์
๊ธธ์ด
18
12์
์ต์
๊ฐ
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
๋ง๋
ํจํค์ง ๋
255
12์
1
255๋ ํจํท์ ๋์ ์์งํฉ๋๋ค.
DHCP ์ ์
์๋ฒ๊ฐ DHCPDISCOVER ํจํท์ ์์ ํ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์์ฒญํ ๊ฒ ์ค ๋ฌด์ธ๊ฐ๋ฅผ ์ ๊ณตํ ์ ์์์ ํ์ธํ๋ฉด ์ด์ ๋ํ ์๋ต(DHCPDISCOVER)์ ์์ฑํฉ๋๋ค. ์๋ต์ ๋ธ๋ก๋์บ์คํธ๋ฅผ ํตํด "์๋์" ํฌํธ๋ก ์ ์ก๋ฉ๋๋ค. ํ์ฌ ํด๋ผ์ด์ธํธ์๋ ์์ง IP ์ฃผ์๊ฐ ์์ผ๋ฏ๋ก ๋ธ๋ก๋์บ์คํธ๋ก ์ ์ก๋ ํจํท๋ง ์๋ฝํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ํจํค์ง ๋ด๋ถ์ MAC ์ฃผ์์ ์ฒซ ๋ฒ์งธ ํจํค์ง ์์ฑ ์ ์์ฑํ ํธ๋์ญ์ ๋ฒํธ๋ฅผ ํตํด ์ด๊ฒ์ด ์์ ์ ์ํ ํจํค์ง์์ ์ธ์ํฉ๋๋ค.
DHCPOFFER ํจํท ๊ตฌ์กฐ ํ ์ด๋ธ
ํจํค์ง ๋ด ์์น
๊ฐ ์ด๋ฆ(๊ณตํต)
์
์๊ฐ
๋ฐ์ดํธ
์ค๋ช
1
๋ถํ
์์ฒญ
1
๋ง๋
1
๋ฉ์์ง ์ ํ. 1 - ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก์ ์์ฒญ, 2 - ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก์ ์๋ต
2
ํ๋์จ์ด ์ ํ
1
๋ง๋
1
์ด ํ๋กํ ์ฝ์ ํ๋์จ์ด ์ฃผ์ ์ ํ 1 - MAC
3
ํ๋์จ์ด ์ฃผ์ ๊ธธ์ด
6
๋ง๋
1
์ฅ์น MAC ์ฃผ์ ๊ธธ์ด
4
์ฌ๋ฆฌ์ฃ
1
๋ง๋
1
์ค๊ฐ ๊ฒฝ๋ก ์
5
๊ฑฐ๋ ID
23:cf:de:1d
๋ง๋
4
๊ณ ์ ํ ๊ฑฐ๋ ์๋ณ์์
๋๋ค. ์์ฒญ ์์
์์ ์ ํด๋ผ์ด์ธํธ์ ์ํด ์์ฑ๋จ
7
๋ ๋ฒ์งธ ๊ฒฝ๊ณผ
0
๋ง๋
4
์ฃผ์ ํ๋ ํ๋ก์ธ์ค๊ฐ ์์๋ ํ์ ์๊ฐ(์ด)
9
๋ถํ
ํ๋๊ทธ
0
๋ง๋
2
ํ๋กํ ์ฝ ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ค์ ํ ์ ์๋ ํน์ ํ๋๊ทธ์
๋๋ค. ์ด ๊ฒฝ์ฐ 0์ ์ ๋์บ์คํธ ์์ฒญ ์ ํ์ ์๋ฏธํฉ๋๋ค.
11
ํด๋ผ์ด์ธํธ IP ์ฃผ์
0.0.0.0
์
4
ํด๋ผ์ด์ธํธ IP ์ฃผ์(์๋ ๊ฒฝ์ฐ)
15
๊ทํ์ ํด๋ผ์ด์ธํธ IP ์ฃผ์
172.16.134.61
์
4
์๋ฒ์์ ์ ๊ณตํ๋ IP ์ฃผ์(์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ)
19
๋ค์ ์๋ฒ IP ์ฃผ์
0.0.0.0
์
4
์๋ฒ IP ์ฃผ์(์๋ ค์ง ๊ฒฝ์ฐ)
23
๋ฆด๋ ์ด ์์ด์ ํธ IP ์ฃผ์
172.16.114.41
์
4
๋ฆด๋ ์ด ์์ด์ ํธ์ IP ์ฃผ์(์: ์ค์์น)
27
ํด๋ผ์ด์ธํธ MAC ์ฃผ์
14:d6:4d:a7:c9:55
๋ง๋
6
ํจํท ์ก์ ์(ํด๋ผ์ด์ธํธ)์ MAC ์ฃผ์
31
ํด๋ผ์ด์ธํธ ํ๋์จ์ด ์ฃผ์ ํจ๋ฉ
๋ง๋
10
์์ฝ์. ์ผ๋ฐ์ ์ผ๋ก XNUMX์ผ๋ก ์ฑ์์ง๋๋ค.
41
์๋ฒ ํธ์คํธ ์ด๋ฆ
์
64
DHCP ์๋ฒ ์ด๋ฆ. ์ผ๋ฐ์ ์ผ๋ก ์ ์ก๋์ง ์์
105
๋ถํ
ํ์ผ ์ด๋ฆ
์
128
๋ถํ
์ ๋์คํฌ ์๋ ์คํ
์ด์
์์ ์ฌ์ฉํ๋ ์๋ฒ์ ํ์ผ ์ด๋ฆ
235
๋งค์ง ์ฟ ํค
63 : 82 : 53 : 63
๋ง๋
4
"๋งค์ง"๋ฒํธ์ ๋ฐ๋ผ ๋ค์์ด ํฌํจ๋ฉ๋๋ค. ์ด ํจํท์ด DHCP ํ๋กํ ์ฝ์ ์ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค
DHCP ์ต์ . ์์ ์๊ด์์ด ๊ฐ ์ ์์
236
์ต์
๋ฒํธ
53
12์
1
DHCP 53 ํจํท ์ ํ์ ์ ์ํ๋ ์ต์
2 - DHCPOFFER
์ต์
๊ธธ์ด
1
12์
1
์ต์
๊ฐ
2
12์
1
์ต์
๋ฒํธ
1
12์
1
DHCP ํด๋ผ์ด์ธํธ์ ๋คํธ์ํฌ ๋ง์คํฌ๋ฅผ ์ ๊ณตํ๋ ์ต์
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
255.255.224.0
์
4
์ต์
๋ฒํธ
3
12์
1
DHCP ํด๋ผ์ด์ธํธ์ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ ๊ณตํ๋ ์ต์
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
172.16.12.1
์
4
์ต์
๋ฒํธ
6
12์
1
DNS ํด๋ผ์ด์ธํธ์ DHCP๋ฅผ ์ ๊ณตํ๋ ์ต์
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
8.8.8.8
์
4
์ต์
๋ฒํธ
51
12์
1
๋ฐํ๋ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์์ ์๋ช
(์ด). ๊ทธ ์ดํ์๋ DHCP ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ๋งค๊ฐ๋ณ์๋ฅผ ๋ค์ ์์ฒญํด์ผ ํฉ๋๋ค.
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
86400
12์
4
์ต์
๋ฒํธ
82
12์
1
์ต์
82, DHCPDISCOVER์ ์ ๊ณต๋ ๋ด์ฉ์ ๋ฐ๋ณตํฉ๋๋ค.
์ต์
๊ธธ์ด
18
12์
1
์ต์
๊ฐ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
12์
18
ํจํค์ง ๋
255
12์
1
255๋ ํจํท์ ๋์ ์์งํฉ๋๋ค.
DHCP์์ฒญ
ํด๋ผ์ด์ธํธ๋ DHCPOFFER๋ฅผ ์์ ํ ํ ๋คํธ์ํฌ์ ๋ชจ๋ DHCP ์๋ฒ๊ฐ ์๋ DHCPOFFER ์ ์์ด ๊ฐ์ฅ "์ข์์"์ธ ํน์ ์๋ฒ์๋ง ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์๋ฅผ ์์ฒญํ๋ ํจํท์ ๊ตฌ์ฑํฉ๋๋ค. "์ข์์" ๊ธฐ์ค์ ํด๋ผ์ด์ธํธ์ DHCP ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์์ฒญ ์์ ์๋ DHCP ์๋ฒ์ MAC ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ฉ๋๋ค. ๋ํ ์๋ฒ์ IP ์ฃผ์๊ฐ ์ด์ ์ ์ด๋ฏธ ํ๋๋ ๊ฒฝ์ฐ DHCPDISCOVER๋ฅผ ๋จผ์ ์์ฑํ์ง ์๊ณ ๋ ํด๋ผ์ด์ธํธ์์ DHCPREQUEST ํจํท์ ๋ณด๋ผ ์ ์์ต๋๋ค.
DHCPREQUEST ํจํท ๊ตฌ์กฐ ํ ์ด๋ธ
ํจํค์ง ๋ด ์์น
๊ฐ ์ด๋ฆ(๊ณตํต)
์
์๊ฐ
๋ฐ์ดํธ
์ค๋ช
1
๋ถํ
์์ฒญ
1
๋ง๋
1
๋ฉ์์ง ์ ํ. 1 - ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก์ ์์ฒญ, 2 - ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก์ ์๋ต
2
ํ๋์จ์ด ์ ํ
1
๋ง๋
1
์ด ํ๋กํ ์ฝ์ ํ๋์จ์ด ์ฃผ์ ์ ํ 1 - MAC
3
ํ๋์จ์ด ์ฃผ์ ๊ธธ์ด
6
๋ง๋
1
์ฅ์น MAC ์ฃผ์ ๊ธธ์ด
4
์ฌ๋ฆฌ์ฃ
1
๋ง๋
1
์ค๊ฐ ๊ฒฝ๋ก ์
5
๊ฑฐ๋ ID
23:cf:de:1d
๋ง๋
4
๊ณ ์ ํ ๊ฑฐ๋ ์๋ณ์์
๋๋ค. ์์ฒญ ์์
์์ ์ ํด๋ผ์ด์ธํธ์ ์ํด ์์ฑ๋จ
7
๋ ๋ฒ์งธ ๊ฒฝ๊ณผ
0
๋ง๋
4
์ฃผ์ ํ๋ ํ๋ก์ธ์ค๊ฐ ์์๋ ํ์ ์๊ฐ(์ด)
9
๋ถํ
ํ๋๊ทธ
8000
๋ง๋
2
ํ๋กํ ์ฝ ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ค์ ํ ์ ์๋ ํน์ ํ๋๊ทธ์
๋๋ค. ์ด ๊ฒฝ์ฐ '๋ฐฉ์ก'์ด ์ค์ ๋ฉ๋๋ค.
11
ํด๋ผ์ด์ธํธ IP ์ฃผ์
0.0.0.0
์
4
ํด๋ผ์ด์ธํธ IP ์ฃผ์(์๋ ๊ฒฝ์ฐ)
15
๊ทํ์ ํด๋ผ์ด์ธํธ IP ์ฃผ์
172.16.134.61
์
4
์๋ฒ์์ ์ ๊ณตํ๋ IP ์ฃผ์(์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ)
19
๋ค์ ์๋ฒ IP ์ฃผ์
0.0.0.0
์
4
์๋ฒ IP ์ฃผ์(์๋ ค์ง ๊ฒฝ์ฐ)
23
๋ฆด๋ ์ด ์์ด์ ํธ IP ์ฃผ์
172.16.114.41
์
4
๋ฆด๋ ์ด ์์ด์ ํธ์ IP ์ฃผ์(์: ์ค์์น)
27
ํด๋ผ์ด์ธํธ MAC ์ฃผ์
14:d6:4d:a7:c9:55
๋ง๋
6
ํจํท ์ก์ ์(ํด๋ผ์ด์ธํธ)์ MAC ์ฃผ์
31
ํด๋ผ์ด์ธํธ ํ๋์จ์ด ์ฃผ์ ํจ๋ฉ
๋ง๋
10
์์ฝ์. ์ผ๋ฐ์ ์ผ๋ก XNUMX์ผ๋ก ์ฑ์์ง๋๋ค.
41
์๋ฒ ํธ์คํธ ์ด๋ฆ
์
64
DHCP ์๋ฒ ์ด๋ฆ. ์ผ๋ฐ์ ์ผ๋ก ์ ์ก๋์ง ์์
105
๋ถํ
ํ์ผ ์ด๋ฆ
์
128
๋ถํ
์ ๋์คํฌ ์๋ ์คํ
์ด์
์์ ์ฌ์ฉํ๋ ์๋ฒ์ ํ์ผ ์ด๋ฆ
235
๋งค์ง ์ฟ ํค
63 : 82 : 53 : 63
๋ง๋
4
"๋งค์ง"๋ฒํธ์ ๋ฐ๋ผ ๋ค์์ด ํฌํจ๋ฉ๋๋ค. ์ด ํจํท์ด DHCP ํ๋กํ ์ฝ์ ์ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค
DHCP ์ต์ . ์์ ์๊ด์์ด ๊ฐ ์ ์์
236
์ต์
๋ฒํธ
53
12์
3
DHCP ํจํท ์ ํ 53 - DHCPREQUEST๋ฅผ ์ ์ํ๋ ์ต์
3
์ต์
๊ธธ์ด
1
12์
1
์ต์
๊ฐ
3
12์
1
์ต์
๋ฒํธ
61
12์
1
ํด๋ผ์ด์ธํธ ID: 01(Ehernet์ฉ) + ํด๋ผ์ด์ธํธ MAC ์ฃผ์
์ต์
๊ธธ์ด
7
12์
1
์ต์
๊ฐ
01:2c:ab:25:ff:72:a6
๋ง๋
7
์ต์
๋ฒํธ
60
12์
"๊ณต๊ธ์
์ฒด ํด๋์ค ์๋ณ์". ์ ๊ฒฝ์ฐ์๋ DHCP ํด๋ผ์ด์ธํธ ๋ฒ์ ์ ๋ณด๊ณ ํฉ๋๋ค. ์๋ง๋ ๋ค๋ฅธ ์ฅ์น๊ฐ ๋ค๋ฅธ ๊ฒ์ ๋ฐํํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Windows์์๋ MSFT 5.0์ ๋ณด๊ณ ํฉ๋๋ค.
์ต์
๊ธธ์ด
11
12์
์ต์
๊ฐ
UDP 0.9.8
์
์ต์
๋ฒํธ
55
1
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์์
๋๋ค. ๊ตฌ์ฑ์ ๋ค์ํ ์ ์์ต๋๋ค
01 - ๋คํธ์ํฌ ๋ง์คํฌ
03 - ๊ฒ์ดํธ์จ์ด
06 - DNS
oc โ ํธ์คํธ ์ด๋ฆ
0f - ๋คํธ์ํฌ ๋๋ฉ์ธ ์ด๋ฆ
1c - ๋ฐฉ์ก ์์ฒญ ์ฃผ์(๋ฐฉ์ก)
42 - TFTP ์๋ฒ ์ด๋ฆ
79 - ํด๋์ค ์๋ ์ ์ ๊ฒฝ๋ก
์ต์
๊ธธ์ด
8
1
์ต์
๊ฐ
01:03:06:0c:0f:1c:42:79
8
์ต์
๋ฒํธ
82
12์
1
์ต์
82, DHCPDISCOVER์ ์ ๊ณต๋ ๋ด์ฉ์ ๋ฐ๋ณตํฉ๋๋ค.
์ต์
๊ธธ์ด
18
12์
1
์ต์
๊ฐ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
12์
18
ํจํค์ง ๋
255
12์
1
255๋ ํจํท์ ๋์ ์์งํฉ๋๋ค.
DHCPACK
DHCP ์๋ฒ์์ "์, ๋ง์ต๋๋ค. ์ด๊ฒ์ด ๊ทํ์ IP ์ฃผ์์ ๋๋ค. ๋ค๋ฅธ ๋๊ตฌ์๊ฒ๋ ์๋ ค์ฃผ์ง ์์ต๋๋ค."๋ผ๋ ํ์ธ์ผ๋ก ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก DHCPACK ํ์์ ํจํท์ด ์๋น์ค๋ฉ๋๋ค. ๋ค๋ฅธ ํจํท๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ธ๋ก๋์บ์คํธ๋ก ์ ์ก๋ฉ๋๋ค. ํ์ง๋ง Python์ผ๋ก ๊ตฌํ๋ DHCP ์๋ฒ์ ๋ํ ์๋ ์ฝ๋์์๋ ๋ง์ฝ์ ๋๋นํด ์ด๋ฏธ ์๋ ค์ง ๊ฒฝ์ฐ ํน์ ํด๋ผ์ด์ธํธ IP๋ก ํจํท์ ๋ณด๋ด ๋ธ๋ก๋์บ์คํธ ์์ฒญ์ ๋ณต์ ํฉ๋๋ค. ๋์ฑ์ด, DHCP ์๋ฒ๋ DHCPACK ํจํท์ด ํด๋ผ์ด์ธํธ์ ๋๋ฌํ๋์ง ์ฌ๋ถ๋ฅผ ์ ํ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ DHCPACK์ ์์ ํ์ง ๋ชปํ๋ฉด ์ ์ ํ DHCPREQUEST๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
DHCPACK ํจํท ๊ตฌ์กฐ ํ ์ด๋ธ
ํจํค์ง ๋ด ์์น
๊ฐ ์ด๋ฆ(๊ณตํต)
์
์๊ฐ
๋ฐ์ดํธ
์ค๋ช
1
๋ถํ
์์ฒญ
2
๋ง๋
1
๋ฉ์์ง ์ ํ. 1 - ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก์ ์์ฒญ, 2 - ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก์ ์๋ต
2
ํ๋์จ์ด ์ ํ
1
๋ง๋
1
์ด ํ๋กํ ์ฝ์ ํ๋์จ์ด ์ฃผ์ ์ ํ 1 - MAC
3
ํ๋์จ์ด ์ฃผ์ ๊ธธ์ด
6
๋ง๋
1
์ฅ์น MAC ์ฃผ์ ๊ธธ์ด
4
์ฌ๋ฆฌ์ฃ
1
๋ง๋
1
์ค๊ฐ ๊ฒฝ๋ก ์
5
๊ฑฐ๋ ID
23:cf:de:1d
๋ง๋
4
๊ณ ์ ํ ๊ฑฐ๋ ์๋ณ์์
๋๋ค. ์์ฒญ ์์
์์ ์ ํด๋ผ์ด์ธํธ์ ์ํด ์์ฑ๋จ
7
๋ ๋ฒ์งธ ๊ฒฝ๊ณผ
0
๋ง๋
4
์ฃผ์ ํ๋ ํ๋ก์ธ์ค๊ฐ ์์๋ ํ์ ์๊ฐ(์ด)
9
๋ถํ
ํ๋๊ทธ
8000
๋ง๋
2
ํ๋กํ ์ฝ ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ค์ ํ ์ ์๋ ํน์ ํ๋๊ทธ์
๋๋ค. ์ด ๊ฒฝ์ฐ '๋ฐฉ์ก'์ด ์ค์ ๋ฉ๋๋ค.
11
ํด๋ผ์ด์ธํธ IP ์ฃผ์
0.0.0.0
์
4
ํด๋ผ์ด์ธํธ IP ์ฃผ์(์๋ ๊ฒฝ์ฐ)
15
๊ทํ์ ํด๋ผ์ด์ธํธ IP ์ฃผ์
172.16.134.61
์
4
์๋ฒ์์ ์ ๊ณตํ๋ IP ์ฃผ์(์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ)
19
๋ค์ ์๋ฒ IP ์ฃผ์
0.0.0.0
์
4
์๋ฒ IP ์ฃผ์(์๋ ค์ง ๊ฒฝ์ฐ)
23
๋ฆด๋ ์ด ์์ด์ ํธ IP ์ฃผ์
172.16.114.41
์
4
๋ฆด๋ ์ด ์์ด์ ํธ์ IP ์ฃผ์(์: ์ค์์น)
27
ํด๋ผ์ด์ธํธ MAC ์ฃผ์
14:d6:4d:a7:c9:55
๋ง๋
6
ํจํท ์ก์ ์(ํด๋ผ์ด์ธํธ)์ MAC ์ฃผ์
31
ํด๋ผ์ด์ธํธ ํ๋์จ์ด ์ฃผ์ ํจ๋ฉ
๋ง๋
10
์์ฝ์. ์ผ๋ฐ์ ์ผ๋ก XNUMX์ผ๋ก ์ฑ์์ง๋๋ค.
41
์๋ฒ ํธ์คํธ ์ด๋ฆ
์
64
DHCP ์๋ฒ ์ด๋ฆ. ์ผ๋ฐ์ ์ผ๋ก ์ ์ก๋์ง ์์
105
๋ถํ
ํ์ผ ์ด๋ฆ
์
128
๋ถํ
์ ๋์คํฌ ์๋ ์คํ
์ด์
์์ ์ฌ์ฉํ๋ ์๋ฒ์ ํ์ผ ์ด๋ฆ
235
๋งค์ง ์ฟ ํค
63 : 82 : 53 : 63
๋ง๋
4
"๋งค์ง"๋ฒํธ์ ๋ฐ๋ผ ๋ค์์ด ํฌํจ๋ฉ๋๋ค. ์ด ํจํท์ด DHCP ํ๋กํ ์ฝ์ ์ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค
DHCP ์ต์ . ์์ ์๊ด์์ด ๊ฐ ์ ์์
236
์ต์
๋ฒํธ
53
12์
3
DHCP ํจํท ์ ํ 53 - DHCPACK๋ฅผ ์ ์ํ๋ ์ต์
5
์ต์
๊ธธ์ด
1
12์
1
์ต์
๊ฐ
5
12์
1
์ต์
๋ฒํธ
1
12์
1
DHCP ํด๋ผ์ด์ธํธ์ ๋คํธ์ํฌ ๋ง์คํฌ๋ฅผ ์ ๊ณตํ๋ ์ต์
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
255.255.224.0
์
4
์ต์
๋ฒํธ
3
12์
1
DHCP ํด๋ผ์ด์ธํธ์ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ ๊ณตํ๋ ์ต์
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
172.16.12.1
์
4
์ต์
๋ฒํธ
6
12์
1
DNS ํด๋ผ์ด์ธํธ์ DHCP๋ฅผ ์ ๊ณตํ๋ ์ต์
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
8.8.8.8
์
4
์ต์
๋ฒํธ
51
12์
1
๋ฐํ๋ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์์ ์๋ช
(์ด). ๊ทธ ์ดํ์๋ DHCP ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ๋งค๊ฐ๋ณ์๋ฅผ ๋ค์ ์์ฒญํด์ผ ํฉ๋๋ค.
์ต์
๊ธธ์ด
4
12์
1
์ต์
๊ฐ
86400
12์
4
์ต์
๋ฒํธ
82
12์
1
์ต์
82, DHCPDISCOVER์ ์ ๊ณต๋ ๋ด์ฉ์ ๋ฐ๋ณตํฉ๋๋ค.
์ต์
๊ธธ์ด
18
12์
1
์ต์
๊ฐ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
12์
18
ํจํค์ง ๋
255
12์
1
255๋ ํจํท์ ๋์ ์์งํฉ๋๋ค.
์ค์น
์ค์น๋ ์ค์ ๋ก ์์ ์ ํ์ํ Python ๋ชจ๋์ ์ค์นํ๋ ๊ฒ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. MySQL์ด ์ด๋ฏธ ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
FreeBSD์
pkg install python3 python3 -m verifypip pip3 mysql-connector ์ค์น
Ubuntu
sudo apt-get ์ค์น python3 sudo apt-get ์ค์น pip3 sudo pip3 ์ค์น mysql-connector
MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๊ณ , ์ฌ๊ธฐ์ pydhcp.sql ๋คํ๋ฅผ ์ ๋ก๋ํ๊ณ , ๊ตฌ์ฑ ํ์ผ์ ๊ตฌ์ฑํฉ๋๋ค.
๊ตฌ์ฑ
๋ชจ๋ ์๋ฒ ์ค์ ์ xml ํ์ผ์ ์์ต๋๋ค. ์ฐธ์กฐ ํ์ผ:
1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 ๋ก์ปฌํธ์คํธ ์ํ ์ํ 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 ์ผ upper(mac)=upper('{option_40_AgentRemoteId_hex}') ๋ฐ upper(port)=upper('{option_3_AgentCircuitId_port_hex}')์ธ ์ฌ์ฉ์๋ก๋ถํฐ ip,mask,router,dns๋ฅผ ์ ํํฉ๋๋ค. upper(mac)=upper('{sw_mac}') ๋ฐ upper(port)=upper('{sw_port1}')์ธ ์ฌ์ฉ์๋ก๋ถํฐ ip,mask,router,dns๋ฅผ ์ ํํฉ๋๋ค. upper(mac)=upper('{ClientMacAddress}')์ธ ์ฌ์ฉ์๋ก๋ถํฐ ip,mask,router,dns๋ฅผ ์ ํํฉ๋๋ค. ๊ธฐ๋ก(id,dt,mac,ip,comment) ๊ฐ์ ์ฝ์ โโ(null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')
์ด์ ํ๊ทธ์ ๋ํด ๋ ์์ธํ ์ค๋ช ํฉ๋๋ค.
dhcpserver ์น์ ์์๋ ์๋ฒ ์์์ ์ํ ๊ธฐ๋ณธ ์ค์ ์ ์ค๋ช ํฉ๋๋ค.
- ํธ์คํธ - ์๋ฒ๊ฐ ํฌํธ 67์์ ์์ ํ๋ IP ์ฃผ์
- ๋ฐฉ์ก - DHCPOFFER ๋ฐ DHCPACK์ ๋ํ ๋ฐฉ์ก IP๋ ๋ฌด์์ ๋๊น?
- DHCPServer - DHCP ์๋ฒ์ IP๋ ๋ฌด์์ ๋๊น
- LeaseTime ๋ฐ๊ธ๋ IP ์ฃผ์์ ์๋ ์๊ฐ
- ThreadLimit - ํฌํธ 67์์ ๋ค์ด์ค๋ UDP ํจํท์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋์์ ์คํ๋๋ ์ค๋ ๋ ์. ๋ก๋๊ฐ ๋ง์ ํ๋ก์ ํธ์ ๋์์ด ๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค ๐
- defaultMask,defaultRouter,defaultDNS - IP๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ๊ฒฌ๋์์ง๋ง ์ถ๊ฐ ๋งค๊ฐ๋ณ์๊ฐ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ๋ ์์๊ฒ ์ ๊ณต๋๋ ๊ฒ
mysql ์น์ :
ํธ์คํธ, ์ฌ์ฉ์ ์ด๋ฆ, ๋น๋ฐ๋ฒํธ, ๊ธฐ๋ณธ ์ด๋ฆ - ๋ชจ๋ ๊ฒ์ด ๊ทธ ์์ฒด๋ก ๋ํ๋ฉ๋๋ค. ๋๋ต์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ ๋ค์ ์ฌ์ดํธ์ ๊ฒ์๋์ด ์์ต๋๋ค.
์ฟผ๋ฆฌ ์น์ : OFFER/ACK ์์ ์์ฒญ์ ์ฌ๊ธฐ์ ์ค๋ช ๋์ด ์์ต๋๋ค.
- Offer_count โ ip,mask,router,dns์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์์ฒญ์ด ์๋ ์ค ์
- Offer_n โ ์ฟผ๋ฆฌ ๋ฌธ์์ด. return์ด ๋น์ด ์์ผ๋ฉด ๋ค์ ์ ์ ์์ฒญ์ ์คํํฉ๋๋ค.
- History_sql - ์๋ฅผ ๋ค์ด ๊ตฌ๋ ์์ "์ธ์ฆ ๋ด์ญ"์ ์ฐ๋ ์ฟผ๋ฆฌ์ ๋๋ค.
์์ฒญ์๋ ์ต์ ์น์ ์ ๋ณ์๋ DHCP ํ๋กํ ์ฝ์ ์ต์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
์ต์ ์น์ . ์ด๊ฒ์ด ๋ ํฅ๋ฏธ๋ก์์ง๋ ๊ณณ์ ๋๋ค. ์ฌ๊ธฐ์์ ๋์ค์ ์ฟผ๋ฆฌ ์น์ ์์ ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค
option_82_hex:sw_port1:20:22
, ์ด ๋ช ๋ น์ค์ 82~20๋ฐ์ดํธ ๋ฒ์์ 22์ง์ ํ์์ผ๋ก DHCP ์์ฒญ ์ต์ 1์ ํฌํจ๋ ์ ์ฒด ์ค์ ๊ฐ์ ธ์ ์ ๋ณ์ sw_portXNUMX(์์ฒญ์ด ๋ฐ์ํ ์ค์์น ํฌํธ)์ ๋ฃ์ต๋๋ค.
option_82_hex:sw_mac:26:40
, 26:40 ๋ฒ์์์ XNUMX์ง์๋ฅผ ์ฌ์ฉํ์ฌ sw_mac ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค.
-d ์ค์์น๋ก ์๋ฒ๋ฅผ ์์ํ๋ฉด ์ฟผ๋ฆฌ์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์ต์ ์ ๋ณผ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๊ฐ ํ์๋ฉ๋๋ค.
--a DHCPINFORM ํจํท์ด 67ad0025224 , b'x764xa91xe5xa0xa3xa5-x9fx8a' , ('8', 172.30.114.25) {'ClientMacAddress': '68ad0025224', 'ClientMacAddressByte': b'x764 00%"Jxd7d์์ ํฌํธ 91์ ๋์ฐฉํ์ต๋๋ค. ' , ' HType': 'Ethernet', 'HostName': b'x5xa0xe3xa5xa9xa8-x8fx43a', 'ReqListDNS': True, 'ReqListDomainName': True, 'ReqListPerfowmRouterDiscover': True, 'ReqListRouter': True, 'ReqListStaticRoute': True, 'ReqListSubnetM ์ง๋ฌธ': True, 'ReqListVendorSpecInfo': 0.0.0.0, 'RequestedIpAddress': '5.0', 'Vendor': b'MSFT 0025224', 'chaddr': '764ad172.30.128.13', 'ciaddr': '00' , 'ํ๋๊ทธ': b'x00x172.30.114.25', 'giaddr': '308', 'gpoz': 6, 'hlen': 1, 'hops': 82, 'htype': 'MAC', 'magic_cookie': b'cx12Sc ', 'op': 'DHCPINFORM', 'option12': 53, 'option53': 55, 'option55': 60, 'option60': 61, 'option61': 82, 'option82': 82, ' option_12_byte': b'x01x06x00x04x00x01x00x06x02x08x00x06' b'x00x1x9eXx2exb82xad', 'option_12010600040001000602080006001_hex': '589e2eb82ad', 'option_ 18_len': 82 12, 'option_01_str': "b'x06x00x04x00x01x00x06x02x08x00x06x00x1x9x2eXx768exb0.0.0.0xad'", '๊ฒฐ๊ณผ': ๊ฑฐ์ง, '์ด': 001, 'siaddr': '589', 'sw_mac': '2e1eb06ad', 'sw_port89': '8', 'xidbyte': b'
๋ฐ๋ผ์ ๋ชจ๋ ๋ณ์๋ฅผ {}๋ก ๋ํํ ์ ์์ผ๋ฉฐ ์ด๋ SQL ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ IP ์ฃผ์๋ฅผ ์์ ํ ๊ธฐ๋ก์ ๊ธฐ๋กํด ๋ณด๊ฒ ์ต๋๋ค.
์๋ฒ ์์
./pydhcpdb.py -d -c config.xml
โ d ์ฝ์ ์ถ๋ ฅ ๋ชจ๋ DEBUG
- c <ํ์ผ ์ด๋ฆ> ๊ตฌ์ฑ ํ์ผ
๋ฐ ๋ธ๋ฆฌํ
์ด์ Python์์ ์๋ฒ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์ค๋ช ํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ณ ํต์ด๋ค. Python์ ์ฆ์์์ ๋ฐฐ์ ์ต๋๋ค. ๋ง์ ์๊ฐ๋ค์ด โ์, ์ด๋ป๊ฒ๋ ํด๋๊ตฌ๋โ๋ผ๋ ์คํ์ผ๋ก ๋ง๋ค์ด์ง๋๋ค. ์ ํ ์ต์ ํ๋์ง ์์์ผ๋ฉฐ ์ฃผ๋ก Python ๊ฐ๋ฐ ๊ฒฝํ์ด ๊ฑฐ์ ์๊ธฐ ๋๋ฌธ์ ์ด ํ์์ผ๋ก ๋จ์ ์์ต๋๋ค. ๋๋ "์ฝ๋"์์ ์๋ฒ ๊ตฌํ์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ์ธก๋ฉด์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
XML ๊ตฌ์ฑ ํ์ผ ํ์
ํ์ค Python ๋ชจ๋ xml.dom์ด ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ๋จํด ๋ณด์ด์ง๋ง ๊ตฌํ ์ค์ ์ด ๋ชจ๋์ ์ฌ์ฉํ๋ ๋คํธ์ํฌ์ ๋ํ ๋ช ํํ ๋ฌธ์์ ์์ ๊ฐ ๋์ ๋๊ฒ ๋ถ์กฑํ์ต๋๋ค.
mconfig์ ์์์ ๋ํ tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql"): 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") for 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_defaultMask"] =elem.getElementsByTagName("defaultMask")[0].firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data gconfig["dhcp_defaultDNS"]=elem.getElementsByTagName(" defaultDNS")[0].firstChild.data qconfig=tree.getElementsByTagName("query") for elem in qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_count")[0].firstChild.data for num in range(int(gconfig["offer_count"])): gconfig["offer_"+str(num+1)]=elem.getElementsByTagName("offer_"+str(num+1))[0].firstChild.data gconfig ์ต์ ์ ์์์ ๋ํ ["history_sql"]=elem.getElementsByTagName("history_sql")[0].firstChild.data options=tree.getElementsByTagName("options"): ๋ ธ๋์ ์ต์ ์ ๋ํ node=elem.getElementsByTagName("option") : optionsMod.append(options.firstChild.data)
๋ฉํฐ์ค๋ ๋ฉ
์ด์ํ๊ฒ๋ Python์ ๋ฉํฐ์ค๋ ๋ฉ์ ๋งค์ฐ ๋ช ํํ๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํ๋์์ต๋๋ค.
def PacketWork(data,addr): ... # ๋ค์ด์ค๋ ํจํท์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ์ด์ ์๋ตํ๋ ๊ตฌํ ... while True: data, addr = udp_socket.recvfrom(1024) # UDP ํจํท์ ๊ธฐ๋ค๋ฆฌ๋ ์ค thread = threading.Thread( target=PacketWork , args=(data,addr,)).start() # ๊ทธ๋๋ก - ์ด์ ์ ์ ์ํ PacketWork ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํฉ๋๋ค while threading.active_count() >gconfig["dhcp_ThreadLimit"]: time. sleep(1) # ์ค์ ๋ณด๋ค ์ด๋ฏธ ์คํ ์ค์ธ ์ค๋ ๋๊ฐ ๋ ๋ง์ ๊ฒฝ์ฐ ์ค๋ ๋ ์๊ฐ ์ค์ด๋ค ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
DHCP ํจํท ์์ /์ ์ก
๋คํธ์ํฌ ์นด๋๋ฅผ ํตํด ๋ค์ด์ค๋ UDP ํจํท์ ๊ฐ๋ก์ฑ๋ ค๋ฉด ์์ผ์ "์ฌ๋ ค์ผ" ํฉ๋๋ค.
udp_socket = ์์ผ.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP) udp_socket.bind((gconfig["dhcp_host"],67))
, ์ฌ๊ธฐ์ ํ๋๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- AF_INET - ์ฃผ์ ํ์์ด IP: ํฌํธ์์ ์๋ฏธํฉ๋๋ค. AF_UNIX๋ ์์ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฃผ์๋ ํ์ผ ์ด๋ฆ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค.
- SOCK_DGRAM - "์์ ํจํท"์ด ์๋๋ผ ์ด๋ฏธ ๋ฐฉํ๋ฒฝ์ ํต๊ณผํ๊ณ ๋ถ๋ถ์ ์ผ๋ก ๋ค๋ฌ์ด์ง ํจํท์ ํ์ฉํ๋ค๋ ์๋ฏธ์ ๋๋ค. ์ ๊ฒ๋ค. UDP ํจํท ๋ํผ์ "๋ฌผ๋ฆฌ์ " ๊ตฌ์ฑ ์์ ์์ด UDP ํจํท๋ง ์์ ํฉ๋๋ค. SOCK_RAW ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด "๋ํผ"๋ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํฉ๋๋ค.
ํจํท์ ๋ณด๋ด๋ ๊ฒ์ ๋ธ๋ก๋์บ์คํธ์ ๋น์ทํ ์ ์์ต๋๋ค.
udp_socket.setsockopt(socket.SOL_SOCKET, ์์ผ.SO_BROADCAST, 1) # ์์ผ์ ๋ธ๋ก๋์บ์คํธ ๋ชจ๋๋ก ์ ํ rz=udp_socket.sendto(packetack, (gconfig["broadcast"],68))
, ๊ทธ๋ฆฌ๊ณ "ํจํค์ง๊ฐ ์ด๋์์ ์๋์ง" ์ฃผ์๋ก:
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # ์์ผ์ ๋ค์ค ์์ ๊ธฐ ๋ชจ๋๋ก ์ ํ rz=udp_socket.sendto(packetack, addr)
, ์ฌ๊ธฐ์ SOL_SOCKET์ ์ต์ ์ค์ ์ ์ํ "ํ๋กํ ์ฝ ์์ค"์ ์๋ฏธํฉ๋๋ค.
, ํฌ๋ฉง ํจํค์ง๊ฐ "๋ธ๋ก๋์บ์คํธ"๋๋ SO_BROADCAST ์ต์
,SO_REUSEADDR ์ต์ ์ ์์ผ์ "๋ค์ ๋ฆฌ์ค๋" ๋ชจ๋๋ก ์ ํํฉ๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ด ๊ฒฝ์ฐ์๋ ํ์ํ์ง ์์ง๋ง ํ ์คํธํ FreeBSD ์๋ฒ ์ค ํ๋์์๋ ์ด ์ต์ ์ด ์์ผ๋ฉด ์ฝ๋๊ฐ ์๋ํ์ง ์์์ต๋๋ค.
DHCP ํจํท ๊ตฌ๋ฌธ ๋ถ์
์ ๊ฐ ํ์ด์ฌ์ ์ ๋ง ์ข์ํ๋ ๊ณณ์ด ๋ฐ๋ก ์ด๊ณณ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋งค์ฐ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์ด๋ฅผ XNUMX์ง์ ๊ฐ, ๋ฌธ์์ด ๋ฐ XNUMX์ง์๋ก ๋งค์ฐ ์ฝ๊ฒ ๋ณํํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ํจํค์ง์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๋ฐ ์ค์ ๋ก ํ์ํ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, HEX ํ์์ ๋ฐ์ดํธ ๋ฒ์์ ๋ฐ์ดํธ๋ง ์ป์ ์ ์์ต๋๋ค.
res["xidhex"]=data[4:8].hex() res["xidbyte"]=data[4:8]
, ๋ฐ์ดํธ๋ฅผ ๊ตฌ์กฐ๋ก ์์ถํฉ๋๋ค.
res["flags"]=pack('BB',data[10],data[11])
๊ตฌ์กฐ์์ IP๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
res["ciaddr"]=socket.inet_ntoa(pack('BBBB',data[12],data[13],data[14],data[15]));
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
res=res+socket.inet_pton(socket.AF_INET, gconfig["dhcp_Server"])
์ง๊ธ์ ๊ทธ๊ฒ ์ ๋ถ์
๋๋ค ๐
์ถ์ฒ : habr.com