쪽팔리면 질문하지 맙시다. 소중한 답변 댓글을 삭제하는건 부끄러운 일 입니다
DHCP 서버가 IP 할당한 목록을 보다 궁금한 부분이 생겨서 질문드립니다.
현재 DHCP 서버에서 사용 중인 대역은 [192.168.1.2 ~ 192.168.1.254] 1개입니다.
저는 IP 할당을 숫자가 작은 부분부터 사용할 줄 알았는데 아니어서요.
신기한 게 2부터 30까지, 190부터 199까지 사이로 나눠집니다.
물론 범위 안에 모든 IP를 할당받은 것은 아니긴 합니다.
뭔가 MAC 주소 기반으로 할당하는 알고리즘이 있지 않을까 하는 생각이 듭니다.
혹시 DHCP 서버도 IP 할당에 대한 규칙이 있을까요?
Ŭ¶óÀ̾ðÆ®Ãø¿¡¼ ±âÁ¸ IP »ç¿ë°¡´ÉÇÏ°Ô ÇØ´Þ¶ó°í Çϸé ÀÌÀü »ç¿ëÇÑ IPÀÇ ÇöÀç»óŸ¦ È®ÀÎÇؼ »ç¿ëÇÏÁö ¾Ê´Â°æ¿ì¿¡ ÇÑÇØ ÀÌÀü°ÍÀ¸·Î ÇÒ´çÇØÁÖ´Â °ÍÀº ÀÖ½À´Ï´Ù.
DHCP ÀÓ´ë½Ã°£ÀÌ Áö³ª¼ ¿äûÇصµ IP°¡ °°Àº °Íµµ ±Ã±ÝÇß¾ú´Âµ¥ °°ÀÌ ÇØ°áµÇ¾ú½À´Ï´Ù.
°¨»çÇÕ´Ï´Ù.
¸ÇóÀ½ °øÀ¯±â°¡ µ¿ÀÛÇÏ¸é¼ DHCP¼¹ö°¡ µ¿ÀÛÇϸé DHCP¼¹ö ¼ÂÆ𪿡¼ °¡Àå ÀÛÀº IP¹øÈ£ºÎÅÍ ¼ÂÆÃµÈ ³×Æ®¿öÅ© ¾È¿¡¼ ½ºÄ³´×Çϸç
ÁغñµÈ DHCP Ŭ¶óÀ̾ðÆ®ÀÇ ¸Æ¾îµå·¹½º¸¦ ¹øÈ£¿Í ¸ÅĪ½ÃŲ´Ù¶ó°í »ý°¢ÇÕ´Ï´Ù..
Çѹø µî·ÏµÈ ¸Æ¾îµå·¹½º´Â °øÀ¯±â°¡ ´Ù½Ã ½ÃÀÛÇÏÁö ¾Ê´Â ÇÑ ¹Ù²îÁö ¾Ê±â¿¡ Àåºñ¸¦ ²ô°Å³ª Á¦°ÅÇÑ ÈÄ¿¡ Á» ½Ã°£ÀÌ Áö³ª°í
´Ù½Ã ±× Àåºñ¸¦ µ¿ÀÛ½ÃÅ°¸é ±× ¸Æ¾îµå·¹½º¸¦ ±â¾ïÇÏ´Â °øÀ¯±âÀÇ DHCP ¼¹ö ¶§¹®¿¡ ±× IP ¹øÈ£´Â ¹Ù²îÁö ¾Ê½À´Ï´Ù..
ÇϳªÀÇ CŬ·¡½º IP ´ë¿ªÀ» °¡Áö´Â DHCP ¼¹ö¿¡¼ °¡²û IP¹øÈ£°¡ ²¿À̰ųª ÀæÀº DHCP ¼¹öÀÇ Àç½ÃÀÛÀ¸·Î ÀÎÇØ Å¬¶óÀ̾ðÆ®ÀÇ DHCP ¹øÈ£°¡
º¯ÇÏ¿© ¿Ô´Ù°¬´Ù ÇÏ´Â °æ¿ì°¡ Àִµ¥ ÀÌ·²¶§´Â Ŭ¶óÀ̾ðÆ® DHCP IP¹øÈ£¸¦ ¼öµ¿À¸·Î ÁöÁ¤ÇÏ¿© °íÁ¤ÇØÁÖ´Â ÆíÀÌ »ç¿ëÇϱâ ÆíÇÕ´Ï´Ù.. (ƯÈ÷³ª ÇÁ¸°Æ® ¼¹ö)
DHCP ¼¹öÀÇ IP ¹üÀ§µµ Ŭ¶óÀ̾ðÆ®°¡ ¸¹Áö ¾Ê´Ù¸é ¾î´À Á¤µµ °¹¼ö¸¦ ÁÙÀ̴°ÍÀÌ DHCP¼¹öÀÇ IP ½ºÄ³´×½Ã ½Ã°£À» ´ÜÃàÇϱ⿡
Á» ´õ ºü¸¥ °øÀ¯±âÀÇ µ¿ÀÛÀ» ±â´ëÇÒ ¼ö ÀÖ½À´Ï´Ù..
ÀÌ Áú¹® ¿Ã¸®°Ô µÈ °è±â°¡ iptime »ç¿ëÇßÀ» ¶§¶û ´Þ¶ó¼ ¿´½À´Ï´Ù.
iptime¿¡¼± Ŭ¶óÀ̾ðÆ® Àåºñ°¡ ¸¹¾Æµµ IP ¸Ç µÚ¿¡ ¼ýÀÚ°¡ 50ÀÌ ³ÑÀº ÀûÀÌ ¾ø¾ú´ø µíÇÕ´Ï´Ù.
dnsmasq ¶ó´Â ¼ÒÇü DHCP/DNS ¼¹ö ÇÁ·Î±×·¥ÀÌ ÀÖ½À´Ï´Ù. (¼Ò½º´Â https://thekelleys.org.uk/dnsmasq/ )
IP ÇÒ´çÇÏ´Â ºÎºÐÀ» ã¾Æº¸¸é dhcp.c ¿¡ address_allocate¶ó´Â ÇÔ¼ö¿¡¼ ó¸®ÇÏ´Â °Í °°½À´Ï´Ù.
HW MAC ¾îµå·¹½º¸¦ ÇؽÃÇÔ¼ö(sdbm hash) µ¹¸° ÈÄ À̸¦ ±â¹ÝÀ¸·Î IP¸¦ ÇÒ´çÇÏ´Â ºÎºÐÀÌ ÀÖ½À´Ï´Ù.
°£´ÜÇÏ°Ô ½Å±Ô ÇÒ´çÇÒ ¶§¸¸ º¸¸é ¾Æ·¡ °úÁ¤À¸·Î ÀÌ·ç¾îÁö´Â±º¿ä.
(Àç ÇÒ´ç ½Ã¿¡´Â netid·Î ÇÒ´çµÈ ±âÁ¸ ÇÒ´çµÈ ip¸¦ ´Ù½Ã ¸®ÅÏ)
1. ·£Ä«µåÀÇ MAC address¸¦ Seed °ªÀ¸·Î »ç¿ë
00:03:47:B2:59:3C
2. sdmb ¶ó´Â Çؽà ¾Ë°í¸®ÁòÀ» µ¹¸² (string --> int)
5644212570012911586919917584275020807673170692121545560107482439325811798923254
3. 2ÀÇ °á°ú¸¦ ÇÒ´çÇÒ ¼ö ÀÖ´Â »çÀÌÁî·Î ³ª´« ³ª¸ÓÁö °ªÀ» ¾òÀ½
2ÀÇ °ª mod 254
4. ½ÃÀÛ ÁÖ¼Ò°ª¿¡ 3ÀÇ °ªÀ» ´õÇÔ
192.168.0.1 + 14
5. °á°ú°ª 192.168.0.15
¸®ÅÏÇϱâ Àü¿¡ »ç¿ë ÁßÀÎÁö ÇÎÀ¸·Î üũÇÏ°í »ç¿ë ÁßÀÌ¸é ¹Ì»ç¿ë ip°¡ ³ª¿Ã¶§±îÁö °ªÀ» Áõ°¡.
Ãß°¡·Î ¾Ë°Ô µÈ °Íµé...
1. sdmb¶ó´Â Çؽà ¾Ë°í¸®ÁòÀÌ »ý°¢º¸´Ù ¸¹ÀÌ ¾²ÀÌ´Â °ÍÀ» ¾Ë°Ô µÊ.
2. ³»ºÎÀûÀ¸·Î´Â ipÁÖ¼Ò(str)¸¦ int·Î º¯È¯Çؼ ¸¹ÀÌ ¾²´Âµ¥, socket.inet_aton, inet_ntoa °°Àº ÇÔ¼öµéÀÌ À¯¿ëÇÔ.
ÆÄÀ̽ãÀ¸·Î ´ëÃæ ...
ÄÚµå :
from socket import *
import struct
import getmac
def sdbm(plain_text: str) -> int:
hash_value = 0
for plain_chr in plain_text:
hash_value = (
ord(plain_chr) + (hash_value << 6) + (hash_value << 16) - hash_value
)
return hash_value
HWADDR = getmac.get_mac_address()
b_ip = '192.168.0.1'
pool_size = 254
s_addr = int.from_bytes(inet_aton(b_ip)) + (sdbm(HWADDR) % pool_size)
t_addr = inet_ntoa(struct.pack('!L', s_addr))
print(f"MAC address: {HWADDR}")
print(f"Hash Value : {sdbm(HWADDR)}")
print(f"Temp Value : {(sdbm(HWADDR) % pool_size)}")
print(f"ip address : {t_addr}")
Ãâ·Â :
MAC address: 0e:c9:b6:33:ea:41
Hash Value : 5644307572320518795668905132228045064013545965067596936257857263082430642659208
Temp Value : 22
ip address : 192.168.0.23