强大PHP工具库用处理IPv4和IPv6网络地址

用于处理网络地址(IPv4和IPv6)的PHP库。

安装

composer require s1lentium/iptools

使用

IP运营

IPv4

$ip = new IP(\\\'192.168.1.1\\\');
echo $ip->version;// IPv4

IPv6

$ip = new IP(\\\'fc00::\\\');
echo $ip->version; // IPv6

从整数、二进制和十六进制解析IP

echo (string)IP::parse(2130706433); // 127.0.0.1
echo (string)IP::parse(\\\'0b11000000101010000000000100000001\\\') // 192.168.1.1
echo (string)IP::parse(\\\'0x0a000001\\\'); // 10.0.0.1

或者

echo (string)IP::parseLong(2130706433); // 127.0.0.1
echo (string)IP::parseBin(\\\'11000000101010000000000100000001\\\'); // 192.168.1.1
echo (string)IP::parseHex(\\\'0a000001\\\'); // 10.0.0.1

将IP转换为其他格式

echo IP::parse(\\\'192.168.1.1\\\')->bin // 11000000101010000000000100000001
echo IP::parse(\\\'10.0.0.1\\\')->hex // 0a000001
echo IP::parse(\\\'127.0.0.1\\\')->long // 2130706433

其他

  • maxPrefixLength 地址表示中的最大位数:IPv4为32,IPv6为128。
  • octetsCount IP地址中的八位字节数:IPv4为4,IPv6为16
  • reversePointer 地址的反向DNS PTR的名称:
echo new IP::parse(\\\'192.0.2.5\\\')->reversePointer // 5.2.0.192.in-addr.arpa
echo new IP::parse(\\\'2001:db8::567:89ab\\\')->reversePointer // b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa

网络操作

echo Network::parse(\\\'192.0.0.1 255.0.0.0\\\')->CIDR; // 192.0.0.0/8
echo (string)Network::parse(\\\'192.0.0.1/8\\\')->netmask; // 255.0.0.0
echo (string)Network::parse(\\\'192.0.0.1\\\'); // 192.0.0.1/32

网络中的IP地址

$excluded = Network::parse(\\\'192.0.0.0/8\\\')->exclude(new IP(\\\'192.168.1.1\\\'));
foreach($excluded as $network) {
 echo (string)$network . \\\'<br>\\\';
}
192.0.0.0/9
192.128.0.0/11
192.160.0.0/13
192.168.0.0/24
192.168.1.0/32
192.168.1.2/31
...
192.192.0.0/10

网络中的子网

$excluded = Network::parse(\\\'192.0.0.0/8\\\')->exclude(new Network(\\\'192.168.1.0/24\\\'));
foreach($excluded as $network) {
 echo (string)$network . \\\'<br>\\\';
}
192.0.0.0/9
192.128.0.0/11
192.160.0.0/13
192.168.0.0/24
192.168.2.0/23
...
192.192.0.0/10

将网络拆分为相等的网络

$networks = Network::parse(\\\'192.168.0.0/22\\\')->moveTo(\\\'24\\\');
foreach ($networks as $network) {
 echo (string)$network . \\\'<br>\\\';
}
192.168.0.0/24
192.168.1.0/24
192.168.2.0/24
192.168.3.0/24

迭代网络IP地址

$network = Network::parse(\\\'192.168.1.0/24\\\');
foreach($network as $ip) {
 echo (string)$ip . \\\'<br>\\\';
}
192.168.1.0
...
192.168.1.255

获取网络主机地址范围:

$hosts = Network::parse(\\\'192.168.1.0/24\\\')->hosts // Range(192.168.1.1, 192.168.1.254);
foreach($hosts as $ip) {
echo (string)$ip . \\\'<br>\\\';
}
192.168.1.1
...
192.168.1.254
计算网络IP地址
echo count(Network::parse(\\\'192.168.1.0/24\\\')) // 254

靶场作业

以不同格式定义范围

$range = new Range(new IP(\\\'192.168.1.0\\\'), new IP(\\\'192.168.1.255\\\'));
$range = Range::parse(\\\'192.168.1.0-192.168.1.255\\\');
$range = Range::parse(\\\'192.168.1.*\\\');
$range = Range::parse(\\\'192.168.1.0/24\\\');

检查IP是否在范围内

echo Range::parse(\\\'192.168.1.1-192.168.1.254\\\')->contains(new IP(\\\'192.168.1.5\\\')); // true
echo Range::parse(\\\'::1-::ffff\\\')->contains(new IP(\\\'::1234\\\')); // true

迭代范围IP地址

$range = Range::parse(\\\'192.168.1.1-192.168.1.254\\\');
foreach($range as $ip) {
echo (string)$ip . \\\'<br>\\\';
}
192.168.1.1
...
192.168.1.254

获取适合指定IP地址范围的网络

$networks = Range::parse(\\\'192.168.1.1-192.168.1.254\\\')->getNetworks();

foreach($networks as $network) {
 echo (string)$network . \\\'<br>\\\';
}
192.168.1.1/32
192.168.1.2/31
192.168.1.4/30
192.168.1.8/29
192.168.1.16/28
192.168.1.32/27
192.168.1.64/26
192.168.1.128/26
192.168.1.192/27
192.168.1.224/28
192.168.1.240/29
192.168.1.248/30
192.168.1.252/31
192.168.1.254/32

计算范围内的IP地址

echo count(Range::parse(\\\'192.168.1.1-192.168.1.254\\\')) // 254

原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49746.html

(0)
网络技术联盟站's avatar网络技术联盟站
上一篇 2024年5月16日 上午3:12
下一篇 2024年5月16日 上午3:14

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注