我無法找到一種快速/有效的方法來根據給定的路由器 IP 和網路遮罩來確定有效的 IP 範圍
我知道如何透過將所有 IP 和網路遮罩轉換為二進位並執行位元 AND/OR 來計算子網路 IP 和廣播 IP,但這種方法需要花費大量時間,並且很容易導致錯誤...
答案1
有各種網站和應用程式可以為您進行計算,例如http://www.subnet-calculator.com/cidr.php。
否則,使用網路遮罩計算子網路的大小(2 的網路遮罩中零位數的冪)。尋找恰好是子網路大小的倍數但小於路由器 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()