Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:将IP地址拆分为hostid和netid_Perl_Networking_Ip_Subnet_Netmask - Fatal编程技术网

Perl:将IP地址拆分为hostid和netid

Perl:将IP地址拆分为hostid和netid,perl,networking,ip,subnet,netmask,Perl,Networking,Ip,Subnet,Netmask,非常简单,我想将给定的IP地址拆分为netid(由netmask定义)和Perl中的hostid。例如: $network = NetAddr::IP->new('192.168.255.255/29') || die "invalid space $_"; 现在$network->mask返回255.255.255.248。但是中没有方法应用掩码将地址拆分为/29空间中的netid和hostid部分 提到运营商这样做,但它的文件是一团乱 至少可以使用以下方法提取netid: 这

非常简单,我想将给定的IP地址拆分为netid(由netmask定义)和Perl中的hostid。例如:

    $network = NetAddr::IP->new('192.168.255.255/29') || die "invalid space $_";
现在
$network->mask
返回
255.255.255.248
。但是中没有方法应用掩码将地址拆分为
/29
空间中的netid和hostid部分

提到运营商这样做,但它的文件是一团乱

至少可以使用以下方法提取netid:

这将产生
192.168.255.248
。同样,没有方法获取主机部分
0.0.0.7
。也许最好是将IP打包/解包成32位int,然后简单地
&
将其取出。然后打印IP地址的二进制表示也会更容易,我发现这对调试和文档编制非常有用。

使用hostmask()方法


为什么要
0.0.0.7
?听起来像是XY问题,其实不是。提取hostid的方法根本不存在,可能在Perl中的其他地方也有
NetAddr::IP::Util
看起来很有希望,但不知道如何使用它。这并不能回答我的问题……因为对于192.168.255.255/29,网络id(又称子网掩码)是255.255.255.248,主机id是0.0.0.7。对于127.0.0.1/8,网络id为255.0.0.0,主机id为0.0.0.1。换句话说,hostid是应用子网掩码时IP地址的剩余部分。如何在Perl中获得它?我知道你想要什么。我问为什么,我不这么认为<代码>主机掩码返回掩码,而不是值。在我的示例中,它们碰巧是相同的(0.0.0.7),但是,在192.168.255.254等的情况下不是。也许我的示例IP有点误导。对不起。
    $netid = Net::Netmask->new('192.168.255.255/29')->base;
$host_wildcard = Net::Netmask->new('192.168.255.255/29')->hostmask;