주어진 라우터 IP 및 넷마스크를 기반으로 유효한 IP 범위를 결정하는 빠르고 효과적인 방법을 찾는 데 어려움을 겪고 있습니다.
모든 IP와 넷마스크를 바이너리로 변환하고 비트 단위 AND/OR을 수행하여 서브넷 IP와 브로드캐스트 IP를 계산하는 방법을 알고 있지만 이러한 접근 방식은 시간이 많이 걸리고 쉽게 실수로 이어질 수 있습니다.
답변1
다음과 같이 계산을 수행해 주는 다양한 웹사이트와 애플리케이션이 있습니다.http://www.subnet-calculator.com/cidr.php.
그렇지 않은 경우에는 넷마스크를 사용하여 서브넷 크기를 계산합니다(2의 넷마스크에 있는 0비트 수의 거듭제곱). 서브넷 크기의 정확한 배수이지만 라우터의 IP 주소보다 낮은 가장 높은 IP 주소를 찾습니다. 해당 IP 주소는 네트워크 주소이고, IP 주소에 서브넷 크기 - 1을 더한 값이 브로드캐스트 주소입니다.
답변2
시간이 걸리면 스크립트를 작성하세요.
Python에는 다음 모듈이 있습니다 ipaddress
.
$ python
Python 3.4.2 (default, Oct 8 2014, 13:44:52)
>>> import ipaddress
>>> x = ipaddress.IPv6Interface("2001:470:709a:107::1a2b:3c/64")
>>> x.network
IPv6Network('2001:470:709a:107::/64')
>>> y = ipaddress.IPv4Interface("194.219.181.195/26")
>>> y.network
IPv4Network('194.219.181.192/26')
>>> y.network.network_address
IPv4Address('194.219.181.192')
>>> y.network.broadcast_address
IPv4Address('194.219.181.255')
결과는 다음과 같습니다.
#!/usr/bin/env python
import ipaddress
import sys
for arg in sys.argv[1:]:
addr = ipaddress.ip_interface(arg)
print("address =", addr)
print("network =", addr.network)
if addr.version == 4:
print("netmask =", addr.netmask)
print("broadcast =", addr.network.broadcast_address)
print()