为什么一个 IP 对象有多个 IP 地址?
Why are there multiple IP addresses for a IP object?
在scapy中,我看到了以下内容。
>>> a=IP(dst="www.slashdot.org/30")
>>> [p for p in a]
[<IP dst=216.105.38.12 |>,
<IP dst=216.105.38.13 |>,
<IP dst=216.105.38.14 |>,
<IP dst=216.105.38.15 |>]
但我没有看到 dig
的多个目标。有谁知道为什么会这样?上面IP
命令中的“/30”是什么意思?
$ dig www.slashdot.org a +noall +answer
www.slashdot.org. 384 IN A 216.105.38.15
子网数学
/30
指的是CIDR notation。它相当于子网掩码 255.255.255.252。
本质上,它是一个掩码,用于确定 IPv4 地址的哪些位是网络位和主机位。
/30 和 216.105.38.15 二进制是
11111111.11111111.11111111.11111100
11011000.01101001.00100110.00001111
要获取网络地址,请使用二进制 &
获取 216.105.38.12。该子网由主机位可变的所有地址组合组成。所以最后两位可以是 00、01、10 或 11(即 0、1、2、3)。这转化为我们看到 scapy 输出的 .12、.13、.14、.15。
Scapy classes
根据 scapy IP class (scapy.layers.inet.IP), when you input a subnet for the dest IP (scapy.layers.inet.DestIPField) with dst=
, it's interpreted as a subnet (scapy.base_classes.Net),返回子网中的所有地址。
因此,如果我将子网传递给 Net
class,我将得到相同的结果。
>>> from scapy.base_classes import Net # if in Python and not Scapy
>>> a = Net("www.slashdot.net/30")
>>> [p for p in a]
['216.105.38.12', '216.105.38.13', '216.105.38.14', '216.105.38.15']
在scapy中,我看到了以下内容。
>>> a=IP(dst="www.slashdot.org/30")
>>> [p for p in a]
[<IP dst=216.105.38.12 |>,
<IP dst=216.105.38.13 |>,
<IP dst=216.105.38.14 |>,
<IP dst=216.105.38.15 |>]
但我没有看到 dig
的多个目标。有谁知道为什么会这样?上面IP
命令中的“/30”是什么意思?
$ dig www.slashdot.org a +noall +answer
www.slashdot.org. 384 IN A 216.105.38.15
子网数学
/30
指的是CIDR notation。它相当于子网掩码 255.255.255.252。
本质上,它是一个掩码,用于确定 IPv4 地址的哪些位是网络位和主机位。
/30 和 216.105.38.15 二进制是
11111111.11111111.11111111.11111100
11011000.01101001.00100110.00001111
要获取网络地址,请使用二进制 &
获取 216.105.38.12。该子网由主机位可变的所有地址组合组成。所以最后两位可以是 00、01、10 或 11(即 0、1、2、3)。这转化为我们看到 scapy 输出的 .12、.13、.14、.15。
Scapy classes
根据 scapy IP class (scapy.layers.inet.IP), when you input a subnet for the dest IP (scapy.layers.inet.DestIPField) with dst=
, it's interpreted as a subnet (scapy.base_classes.Net),返回子网中的所有地址。
因此,如果我将子网传递给 Net
class,我将得到相同的结果。
>>> from scapy.base_classes import Net # if in Python and not Scapy
>>> a = Net("www.slashdot.net/30")
>>> [p for p in a]
['216.105.38.12', '216.105.38.13', '216.105.38.14', '216.105.38.15']