ãã®ãããžã§ã¯ãã®ç®çã¯æ¬¡ã®ãšããã§ãã
- 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 ãµãŒã㌠(è€æ°ã® 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
16é²æ³
1
ã¡ãã»ãŒãžã®çš®é¡ã 1 - ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®ãªã¯ãšã¹ãã2 - ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®å¿ç
2
ããŒããŠã§ã¢ã¿ã€ã
1
16é²æ³
1
ãã®ãããã³ã«ã®ããŒããŠã§ã¢ ã¢ãã¬ã¹ã®ã¿ã€ã 1 - MAC
3
ããŒããŠã§ã¢ã¢ãã¬ã¹ã®é·ã
6
16é²æ³
1
ããã€ã¹ã®MACã¢ãã¬ã¹é·
4
ããã
1
16é²æ³
1
äžéã«ãŒãæ°
5
ãã©ã³ã¶ã¯ã·ã§ã³ID
23:cf:de:1d
16é²æ³
4
äžæã®ãã©ã³ã¶ã¯ã·ã§ã³èå¥åã ãªã¯ãšã¹ãæäœã®éå§æã«ã¯ã©ã€ã¢ã³ãã«ãã£ãŠçæãããŸã
7
XNUMX çªç®ã®çµé
0
16é²æ³
4
ã¢ãã¬ã¹ååŸããã»ã¹ã®éå§ããã®æéïŒç§ïŒ
9
ããŒããã©ã°
0
16é²æ³
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
16é²æ³
6
ãã±ããéä¿¡è
ïŒã¯ã©ã€ã¢ã³ãïŒã®MACã¢ãã¬ã¹
31
ã¯ã©ã€ã¢ã³ãããŒããŠã§ã¢ã¢ãã¬ã¹ããã£ã³ã°
16é²æ³
10
æå®åžã éåžžã¯ãŒãã§åããããŸã
41
ãµãŒããŒã®ãã¹ãå
ã²ã
64
DHCPãµãŒããŒåã éåžžã¯äŒãããªã
105
ããŒããã¡ã€ã«å
ã²ã
128
ãã£ã¹ã¯ã¬ã¹ã¹ããŒã·ã§ã³ãèµ·åæã«äœ¿çšãããµãŒããŒäžã®ãã¡ã€ã«å
235
éæ³ã®ã¯ãããŒ
63ïŒ82ïŒ53ïŒ63
16é²æ³
4
ãéæ³ã®ãæ°åã«ãããšã ãã®ãã±ããã DHCP ãããã³ã«ã«å±ããŠãããšå€æã§ããŸãã
DHCP ãªãã·ã§ã³ã ã©ã®é çªã§ãæ§ããŸãã
236
ãªãã·ã§ã³çªå·
53
12æ
1
ãªãã·ã§ã³ 53ãDHCP ãã±ãã ã¿ã€ããæå®ããŸãã
1 - DHCPãã£ã¹ã«ããŒ
3 - DHCPREQUEST
2 - DHCPãªãã¡ãŒ
5 - DHCPããã¯
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 ã¯ã©ã€ã¢ã³ããå®è¡ãããã¹ã€ããã®ããŒãã§ãããã®ãªãã·ã§ã³ã«ã¯è¿œå ãã©ã¡ãŒã¿ãå«ãŸããŸããæåã®ãã€ãã¯ããµããªãã·ã§ã³ãã®çªå·ãXNUMX çªç®ã®ãã€ãã¯ãã®é·ãã次ã«ãã®å€ã§ãã
ãã®å Žåããªãã·ã§ã³ 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
16é²æ³
ããã±ãŒãžã®çµãã
255
12æ
1
255 ã¯ãã±ããã®çµãããè¡šããŸã
DHCPãªãã¡ãŒ
ãµãŒããŒã¯ DHCPDISCOVER ãã±ãããåä¿¡ããèŠæ±ããããã®ããã¯ã©ã€ã¢ã³ãã«äœããæäŸã§ãããšå€æãããšãããã«å¯Ÿããå¿ç (DHCPDISCOVER) ãçæããŸãã å¿çã¯ãããŒããã£ã¹ãã«ãã£ãŠãéä¿¡å ãã®ããŒãã«éä¿¡ãããŸãã çŸæç¹ã§ã¯ãã¯ã©ã€ã¢ã³ãã¯ãŸã IP ã¢ãã¬ã¹ãæã£ãŠããªãããããããŒããã£ã¹ãã§éä¿¡ããããã±ããã®ã¿ãåãå ¥ããããšãã§ããŸãã ã¯ã©ã€ã¢ã³ãã¯ãããã±ãŒãžå ã®èªåã® MAC ã¢ãã¬ã¹ãšãæåã®ããã±ãŒãžã®äœææã«çæãããã©ã³ã¶ã¯ã·ã§ã³çªå·ã«ãã£ãŠããããèªåå®ãŠã®ããã±ãŒãžã§ããããšãèªèããŸãã
DHCPOFFER ãã±ããæ§é ããŒãã«
ããã±ãŒãžå
ã®äœçœ®
å€ã®ååïŒå
±éïŒ
äŸ
ã¯ããã«
ãã€ã
æ確å
1
ããŒããªã¯ãšã¹ã
1
16é²æ³
1
ã¡ãã»ãŒãžã®çš®é¡ã 1 - ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®ãªã¯ãšã¹ãã2 - ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®å¿ç
2
ããŒããŠã§ã¢ã¿ã€ã
1
16é²æ³
1
ãã®ãããã³ã«ã®ããŒããŠã§ã¢ ã¢ãã¬ã¹ã®ã¿ã€ã 1 - MAC
3
ããŒããŠã§ã¢ã¢ãã¬ã¹ã®é·ã
6
16é²æ³
1
ããã€ã¹ã®MACã¢ãã¬ã¹é·
4
ããã
1
16é²æ³
1
äžéã«ãŒãæ°
5
ãã©ã³ã¶ã¯ã·ã§ã³ID
23:cf:de:1d
16é²æ³
4
äžæã®ãã©ã³ã¶ã¯ã·ã§ã³èå¥åã ãªã¯ãšã¹ãæäœã®éå§æã«ã¯ã©ã€ã¢ã³ãã«ãã£ãŠçæãããŸã
7
XNUMX çªç®ã®çµé
0
16é²æ³
4
ã¢ãã¬ã¹ååŸããã»ã¹ã®éå§ããã®æéïŒç§ïŒ
9
ããŒããã©ã°
0
16é²æ³
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
16é²æ³
6
ãã±ããéä¿¡è
ïŒã¯ã©ã€ã¢ã³ãïŒã®MACã¢ãã¬ã¹
31
ã¯ã©ã€ã¢ã³ãããŒããŠã§ã¢ã¢ãã¬ã¹ããã£ã³ã°
16é²æ³
10
æå®åžã éåžžã¯ãŒãã§åããããŸã
41
ãµãŒããŒã®ãã¹ãå
ã²ã
64
DHCPãµãŒããŒåã éåžžã¯äŒãããªã
105
ããŒããã¡ã€ã«å
ã²ã
128
ãã£ã¹ã¯ã¬ã¹ã¹ããŒã·ã§ã³ãèµ·åæã«äœ¿çšãããµãŒããŒäžã®ãã¡ã€ã«å
235
éæ³ã®ã¯ãããŒ
63ïŒ82ïŒ53ïŒ63
16é²æ³
4
ãéæ³ã®ãæ°åã«ãããšã ãã®ãã±ããã DHCP ãããã³ã«ã«å±ããŠãããšå€æã§ããŸãã
DHCP ãªãã·ã§ã³ã ã©ã®é çªã§ãæ§ããŸãã
236
ãªãã·ã§ã³çªå·
53
12æ
1
ãªãã·ã§ã³ 53ãDHCP 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 ãªãã¡ãŒãæããæ°ã«å ¥ã£ããXNUMX ã€ã®ç¹å®ã® DHCP ãµãŒããŒã«ã®ã¿ããããã¯ãŒã¯ ãã©ã¡ãŒã¿ãŒãèŠæ±ãããã±ãããäœæããŸãã ãããããåºæºã¯ç°ãªãå Žåããããã¯ã©ã€ã¢ã³ãã® DHCP å®è£ ã«ãã£ãŠç°ãªããŸãã ãªã¯ãšã¹ãã®åä¿¡è ã¯ãDHCP ãµãŒããŒã® MAC ã¢ãã¬ã¹ã䜿çšããŠæå®ãããŸãã ãŸãããµãŒããŒã® IP ã¢ãã¬ã¹ããã§ã«ååŸãããŠããå Žåã¯ãæåã« DHCPDISCOVER ãçæããã«ãã¯ã©ã€ã¢ã³ããã DHCPREQUEST ãã±ãããéä¿¡ã§ããŸãã
DHCPREQUEST ãã±ããæ§é ããŒãã«
ããã±ãŒãžå
ã®äœçœ®
å€ã®ååïŒå
±éïŒ
äŸ
ã¯ããã«
ãã€ã
æ確å
1
ããŒããªã¯ãšã¹ã
1
16é²æ³
1
ã¡ãã»ãŒãžã®çš®é¡ã 1 - ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®ãªã¯ãšã¹ãã2 - ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®å¿ç
2
ããŒããŠã§ã¢ã¿ã€ã
1
16é²æ³
1
ãã®ãããã³ã«ã®ããŒããŠã§ã¢ ã¢ãã¬ã¹ã®ã¿ã€ã 1 - MAC
3
ããŒããŠã§ã¢ã¢ãã¬ã¹ã®é·ã
6
16é²æ³
1
ããã€ã¹ã®MACã¢ãã¬ã¹é·
4
ããã
1
16é²æ³
1
äžéã«ãŒãæ°
5
ãã©ã³ã¶ã¯ã·ã§ã³ID
23:cf:de:1d
16é²æ³
4
äžæã®ãã©ã³ã¶ã¯ã·ã§ã³èå¥åã ãªã¯ãšã¹ãæäœã®éå§æã«ã¯ã©ã€ã¢ã³ãã«ãã£ãŠçæãããŸã
7
XNUMX çªç®ã®çµé
0
16é²æ³
4
ã¢ãã¬ã¹ååŸããã»ã¹ã®éå§ããã®æéïŒç§ïŒ
9
ããŒããã©ã°
8000
16é²æ³
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
16é²æ³
6
ãã±ããéä¿¡è
ïŒã¯ã©ã€ã¢ã³ãïŒã®MACã¢ãã¬ã¹
31
ã¯ã©ã€ã¢ã³ãããŒããŠã§ã¢ã¢ãã¬ã¹ããã£ã³ã°
16é²æ³
10
æå®åžã éåžžã¯ãŒãã§åããããŸã
41
ãµãŒããŒã®ãã¹ãå
ã²ã
64
DHCPãµãŒããŒåã éåžžã¯äŒãããªã
105
ããŒããã¡ã€ã«å
ã²ã
128
ãã£ã¹ã¯ã¬ã¹ã¹ããŒã·ã§ã³ãèµ·åæã«äœ¿çšãããµãŒããŒäžã®ãã¡ã€ã«å
235
éæ³ã®ã¯ãããŒ
63ïŒ82ïŒ53ïŒ63
16é²æ³
4
ãéæ³ã®ãæ°åã«ãããšã ãã®ãã±ããã DHCP ãããã³ã«ã«å±ããŠãããšå€æã§ããŸãã
DHCP ãªãã·ã§ã³ã ã©ã®é çªã§ãæ§ããŸãã
236
ãªãã·ã§ã³çªå·
53
12æ
3
ãªãã·ã§ã³ 53ãDHCP ãã±ãã ã¿ã€ã 3 - DHCPREQUEST ãå®çŸ©ããŸãã
ãªãã·ã§ã³ã®é·ã
1
12æ
1
ãªãã·ã§ã³ã®å€
3
12æ
1
ãªãã·ã§ã³çªå·
61
12æ
1
ã¯ã©ã€ã¢ã³ã ID: 01 (Ehernet ã®å Žå) + ã¯ã©ã€ã¢ã³ã MAC ã¢ãã¬ã¹
ãªãã·ã§ã³ã®é·ã
7
12æ
1
ãªãã·ã§ã³ã®å€
01:2c:ab:25:ff:72:a6
16é²æ³
7
ãªãã·ã§ã³çªå·
60
12æ
ããã³ããŒã¯ã©ã¹èå¥åãã ç§ã®å ŽåãDHCP ã¯ã©ã€ã¢ã³ãã®ããŒãžã§ã³ãå ±åãããŸãã ããããä»ã®ããã€ã¹ã¯ç°ãªããã®ãè¿ãã§ãããã ããšãã°ãWindows 㯠MSFT 5.0 ãã¬ããŒãããŸãã
ãªãã·ã§ã³ã®é·ã
11
12æ
ãªãã·ã§ã³ã®å€
udhcp0.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 ããã§ã«ããã£ãŠããå Žåã¯ããã® IP ã«ãã±ãããéä¿¡ããŠãããŒããã£ã¹ã ãªã¯ãšã¹ããè€è£œããŸãã ããã«ãDHCP ãµãŒããŒã¯ãDHCPACK ãã±ãããã¯ã©ã€ã¢ã³ãã«å°éãããã©ããããŸã£ããæ°ã«ããŸããã ã¯ã©ã€ã¢ã³ãã DHCPACK ãåä¿¡ããªãå Žåã¯ããã°ããããŠããåã« DHCPREQUEST ãç¹°ãè¿ããŸãã
DHCPACK ãã±ããæ§é ããŒãã«
ããã±ãŒãžå
ã®äœçœ®
å€ã®ååïŒå
±éïŒ
äŸ
ã¯ããã«
ãã€ã
æ確å
1
ããŒããªã¯ãšã¹ã
2
16é²æ³
1
ã¡ãã»ãŒãžã®çš®é¡ã 1 - ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®ãªã¯ãšã¹ãã2 - ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®å¿ç
2
ããŒããŠã§ã¢ã¿ã€ã
1
16é²æ³
1
ãã®ãããã³ã«ã®ããŒããŠã§ã¢ ã¢ãã¬ã¹ã®ã¿ã€ã 1 - MAC
3
ããŒããŠã§ã¢ã¢ãã¬ã¹ã®é·ã
6
16é²æ³
1
ããã€ã¹ã®MACã¢ãã¬ã¹é·
4
ããã
1
16é²æ³
1
äžéã«ãŒãæ°
5
ãã©ã³ã¶ã¯ã·ã§ã³ID
23:cf:de:1d
16é²æ³
4
äžæã®ãã©ã³ã¶ã¯ã·ã§ã³èå¥åã ãªã¯ãšã¹ãæäœã®éå§æã«ã¯ã©ã€ã¢ã³ãã«ãã£ãŠçæãããŸã
7
XNUMX çªç®ã®çµé
0
16é²æ³
4
ã¢ãã¬ã¹ååŸããã»ã¹ã®éå§ããã®æéïŒç§ïŒ
9
ããŒããã©ã°
8000
16é²æ³
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
16é²æ³
6
ãã±ããéä¿¡è
ïŒã¯ã©ã€ã¢ã³ãïŒã®MACã¢ãã¬ã¹
31
ã¯ã©ã€ã¢ã³ãããŒããŠã§ã¢ã¢ãã¬ã¹ããã£ã³ã°
16é²æ³
10
æå®åžã éåžžã¯ãŒãã§åããããŸã
41
ãµãŒããŒã®ãã¹ãå
ã²ã
64
DHCPãµãŒããŒåã éåžžã¯äŒãããªã
105
ããŒããã¡ã€ã«å
ã²ã
128
ãã£ã¹ã¯ã¬ã¹ã¹ããŒã·ã§ã³ãèµ·åæã«äœ¿çšãããµãŒããŒäžã®ãã¡ã€ã«å
235
éæ³ã®ã¯ãããŒ
63ïŒ82ïŒ53ïŒ63
16é²æ³
4
ãéæ³ã®ãæ°åã«ãããšã ãã®ãã±ããã DHCP ãããã³ã«ã«å±ããŠãããšå€æã§ããŸãã
DHCP ãªãã·ã§ã³ã ã©ã®é çªã§ãæ§ããŸãã
236
ãªãã·ã§ã³çªå·
53
12æ
3
ãªãã·ã§ã³ 53ãDHCP ãã±ãã ã¿ã€ã 5 - DHCPACK ãå®çŸ©ããŸãã
ãªãã·ã§ã³ã®é·ã
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 ensurepip pip3 install 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 40 ãŠãŒã¶ãŒãã ipããã¹ã¯ãã«ãŒã¿ãŒãDNS ãéžæããŸã (upper(mac)=upper('{option_3_AgentRemoteId_hex}') ããã³ upper(port)=upper('{option_1_AgentCircuitId_port_hex}') ãŠãŒã¶ãŒãã ipããã¹ã¯ãã«ãŒã¿ãŒãDNS ãéžæããŸããupper(mac)=upper('{sw_mac}') ããã³ upper(port)=upper('{sw_port82}') ãŠãŒã¶ãŒãã IPããã¹ã¯ãã«ãŒã¿ãŒãDNS ãéžæããŸãã ããã§ãupper(mac)=upper('{ClientMacAddress}') å±¥æŽ (id,dt,mac,ip,comment) å€ (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM') ã«æ¿å ¥ããŸãã
ã¿ã°ã«ã€ããŠããã«è©³ãã説æããŸãã
dhcpserver ã»ã¯ã·ã§ã³ã§ã¯ããµãŒããŒãèµ·åããããã®åºæ¬èšå®ã«ã€ããŠèª¬æããŸããã€ãŸãã次ã®ãšããã§ãã
- host - ãµãŒããŒãããŒã 67 ã§ãªãã¹ã³ãã IP ã¢ãã¬ã¹
- ãããŒããã£ã¹ã - DHCPOFFER ããã³ DHCPACK ã®ãããŒããã£ã¹ã IP ã¯ã©ãã§ãã
- DHCPServer - DHCP ãµãŒããŒã® IP ã¯äœã§ãã
- LeaseTime çºè¡ãããIPã¢ãã¬ã¹ã®ãªãŒã¹æé
- ThreadLimit - ããŒã 67 ã§åä¿¡ãã UDP ãã±ãããåŠçããããã«åæã«å®è¡ããŠããã¹ã¬ããã®æ°ãé«è² è·ã®ãããžã§ã¯ãã«åœ¹ç«ã€ã¯ãã§ã ð
- defaultMaskãdefaultRouterãdefaultDNS - IP ãããŒã¿ããŒã¹å ã§èŠã€ãã£ãããè¿œå ã®ãã©ã¡ãŒã¿ãŒãæå®ãããŠããªãå Žåã«ãããã©ã«ãã§å å ¥è ã«æäŸãããå 容
mysqlã»ã¯ã·ã§ã³:
ãã¹ãããŠãŒã¶ãŒåããã¹ã¯ãŒããããŒã¹å - ãã¹ãŠãç©èªããŸãã ããããã®ããŒã¿ããŒã¹æ§é ã¯æ¬¡ã®å Žæã«æ²èŒãããŠããŸãã
ã¯ãšãªã»ã¯ã·ã§ã³: ããã§ã¯ãOFFER/ACK ãåä¿¡ããããã®ãªã¯ãšã¹ãã«ã€ããŠèª¬æããŸãã
- offer_count â ipãmaââskãrouterãdns ã®ãããªçµæãè¿ããªã¯ãšã¹ãã®è¡æ°
- offer_n â ã¯ãšãªæååã return ã空ã®å Žåã次ã®ãªãã¡ãŒãªã¯ãšã¹ããå®è¡ããŸãã
- History_sql - ããšãã°ããµãã¹ã¯ã©ã€ãã®ãæ¿èªå±¥æŽãã«æžã蟌ãã¯ãšãª
ãªã¯ãšã¹ãã«ã¯ããªãã·ã§ã³ ã»ã¯ã·ã§ã³ã®å€æ°ãŸã㯠DHCP ãããã³ã«ã®ãªãã·ã§ã³ãå«ããããšãã§ããŸãã
ãªãã·ã§ã³ã»ã¯ã·ã§ã³ã ãããããããã«é¢çœããªããŸãã ããã§ãåŸã§ã¯ãšãª ã»ã¯ã·ã§ã³ã§äœ¿çšã§ããå€æ°ãäœæã§ããŸãã
ããšãã°ã次ã®ããã«
option_82_hex:sw_port1:20:22
ããã®ã³ãã³ã ã©ã€ã³ã¯ãDHCP ãªã¯ãšã¹ã ãªãã·ã§ã³ 82 ã«å«ãŸããè¡å šäœã 20 é²åœ¢åŒã§ 22 ïœ 1 ãã€ãã®ç¯å²ã§ååŸãããããæ°ããå€æ° sw_portXNUMX (ãªã¯ãšã¹ãã®éä¿¡å ã®ã¹ã€ãã ããŒã) ã«å ¥ããŸãã
option_82_hex:sw_mac:26:40
ã26:40 ã®ç¯å²ãã XNUMX é²æ°ãååŸããŠãsw_mac å€æ°ãå®çŸ©ããŸãã
-d ã¹ã€ããã䜿çšããŠãµãŒããŒãèµ·åãããšãã¯ãšãªã§äœ¿çšã§ãããã¹ãŠã®ãªãã·ã§ã³ã確èªã§ããŸãã 次ã®ãããªãã°ã衚瀺ãããŸãã
--DHCPINFORM ãã±ãããããŒã 67 ã«å°çããŸããã 0025224ad764 ã b'x91xa5xe0xa3xa5xa9-x8fx8a' ã ('172.30.114.25', 68) {'ClientMacAddress': '0025224ad764', 'ClientMacAddressByte': b'x00 7% ãïŒïŒ€ã ã' HType': 'ã€ãŒãµããã'ã'ãã¹ãå': b'x91xa5xe0xa3xa5xa9-x8fx8a'ã'ReqListDNS': Trueã'ReqListDomainName': Trueã'ReqListPerfowmRouterDiscover': Trueã'ReqListRouter': Trueã'ReqListStaticRoute': Trueã 'ReqListSubnetM ask ': Trueã'ReqListVendorSpecInfo': 43ã'RequestedIpAddress': '0.0.0.0'ã'Vendor': b'MSFT 5.0'ã'chaddr': '0025224ad764'ã'ciaddr': '172.30.128.13' ã'flags ': b'x00x00'ã'giaddr': '172.30.114.25'ã'gpoz': 308ã'hlen': 6ã'hops': 1ã'htype': 'MAC'ã'magic_cookie': b'cx82Sc 'ã'op': 'DHCPINFORM'ã'option12': 12ã'option53': 53ã'option55': 55ã'option60': 60ã'option61': 61ã'option82': 82ã' option_82_byte': b'x12x01x06x00x04x00x01x00x06x02x08x00' b'x06x00x1eXx9exb2xad', 'option_82_hex': '12010600040001000602080006001e589eb2ad', 'option_82_len': 18 82ã'option_12_str': "b'x01x06x00x04x00x01x00x06x02x08x00x06x00x1x9eXx2exb768xad'"ã'result': Falseã'secs': 0.0.0.0ã 'siaddr': '001'ã'sw_mac': '589e2eb1ad'ã'sw_port06': '89'ã'xidbyte': b'
ãããã£ãŠãä»»æã®å€æ°ã {} ã§å²ãããšãã§ããããã SQL ã¯ãšãªã§äœ¿çšãããŸãã
ã¯ã©ã€ã¢ã³ãã IP ã¢ãã¬ã¹ãåä¿¡ããããšãå±¥æŽãšããŠèšé²ããŸãããã
ãµãŒããŒã®èµ·å
./pydhcpdb.py -d -c config.xml
â d ã³ã³ãœãŒã«åºåã¢ãŒã DEBUG
- c <ãã¡ã€ã«å> æ§æãã¡ã€ã«
å ±åäŒ
次ã«ãPython ã§ã®ãµãŒããŒã®å®è£ ã«ã€ããŠè©³ãã説æããŸãã ããã¯èŠçã§ãã Python ã¯ãã®å Žã§åŠã³ãŸããã å€ãã®ç¬éã¯ããããããªããšãããŸããã£ãããšããã¹ã¿ã€ã«ã§äœãããŸãã ãŸã£ããæé©åãããŠãããã䞻㫠Python éçºã®çµéšãå°ãªãããããã®åœ¢åŒã®ãŸãŸã«ãªã£ãŠããŸãã ãã³ãŒããã«ããããµãŒããŒå®è£ ã®æãèå³æ·±ãåŽé¢ã«ã€ããŠè©³ãã説æããŸãã
XMLèšå®ãã¡ã€ã«ããŒãµãŒ
æšæºã® Python ã¢ãžã¥ãŒã« xml.dom ã䜿çšãããŸãã åçŽããã«èŠããŸãããå®è£ äžã«ããã®ã¢ãžã¥ãŒã«ã䜿çšãããããã¯ãŒã¯äžã®æ確ãªããã¥ã¡ã³ããšäŸãèããäžè¶³ããŠããŸããã
Tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") mconfig ã®èŠçŽ : gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["mysql_username"]=elem.getElementsByTagName("username")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("password")[0].firstChild.data gconfig["mysql_basename"] =elem.getElementsByTagName("basename")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") dconfig ã® elem: 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(" qconfig ã®èŠçŽ ã®å Žåã¯ãdefaultDNS")[0].firstChild.data qconfig=tree.getElementsByTagName("query"): 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") ãªãã·ã§ã³å ã®èŠçŽ : ããŒã = 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() # ãã®ãŸãŸ - threading.active_count() >gconfig["dhcp_ThreadLimit"]: time ã®éã«ããã©ã¡ãŒã¿ã䜿çšããŠã以åã«å®çŸ©ãã PacketWork é¢æ°ãããã¯ã°ã©ãŠã³ãã§èµ·åããŸãã 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 ãµãŒããŒã® XNUMX ã€ã§ã¯ããã®ãªãã·ã§ã³ãªãã§ã¯ã³ãŒããæ©èœããŸããã§ããã
DHCP ãã±ããã®è§£æ
ãããç§ã Python ã®æ°ã«å ¥ã£ãç¹ã§ãã ç®±ããåºããŠããã«ããã€ãã³ãŒããéåžžã«æè»ã«æ±ããããšãããããŸããã ããã XNUMX é²æ°å€ãæååãXNUMX é²æ°å€ã«éåžžã«ç°¡åã«å€æã§ããããã«ããŸãã ããã¯ãããã±ãŒãžã®æ§é ãç解ããããã«å®éã«å¿ èŠãªãã®ã§ãã ãããã£ãŠãããšãã°ãXNUMX é²æ°ã®ãã€ãç¯å²ãšãã€ãã ããååŸã§ããŸãã
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