choval / whois
此包已被废弃且不再维护。未建议替换包。
PHP WHOIS包装器,支持异步,获取IP的国家、所有者和范围。
v1.3.0
2022-03-05 04:12 UTC
Requires
- choval/async: ^0.6
Requires (Dev)
- phpunit/phpunit: ^9
README
描述
PHP WHOIS包装器,支持异步,获取IP的国家、所有者和范围。
用途
- 获取WHOIS查询的原始响应
- 获取IP地址的国家
- 获取IP地址的所有者
- 获取分配给IP地址的范围
注意
此库不缓存结果。请相应地实现缓存以避免滥用WHOIS服务器。
对于IP查询,可以检索range
并将其保存到数据库中,以便在再次查询WHOIS服务器之前进行检查。
要求
- whois命令
- PHP 7.1+
安装
composer install choval\whois
使用
这可以与ReactPHP一起使用,也可以在常规阻塞模式下使用。
与ReactPHP一起使用
$loop = \React\EventLoop\Factory::create(); $whois = new \Choval\Whois\Factory($loop); $query = $whois->query('8.8.8.8'); $query->run() // Returns a promise ->then(function($query) { print_r( $query->getRaw() ); print_r( $query->getCountry() ); print_r( $query->getOwner() ); print_r( $query->getRange() ); }); $loop->run();
常规,阻塞模式
$query = new \Choval\Whois\Query('8.8.8.8'); $query->run(); print_r( $query->getRaw() ); print_r( $query->getCountry() ); print_r( $query->getOwner() ); print_r( $query->getRange() );
附加功能
此库包含一些用于处理IPv4和IPv6的额外函数。
is_ipv6
use function \Choval\Whois\is_ipv6; var_dump( is_ipv6('::1') ); // Returns true var_dump( is_ipv6('1.1.1.1') ); // Returns false
is_ipv4
use function \Choval\Whois\is_ipv4; var_dump( is_ipv4('1.1.1.1') ); // Returns true var_dump( is_ipv4('::1') ); // Returns false
ip_version
use function \Choval\Whois\ip_version; var_dump( ip_version('::1') ); // Returns string ipv6 var_dump( ip_version('1.1.1.1') ); // Returns string ipv4
ip_expand
此函数扩展压缩的IPv6地址。用于范围中的部分IPv4地址也进行了扩展,并去除了非重要的前导零。
use function \Choval\Whois\ip_expand; var_dump( ip_expand('::1') ); // Returns 0000:0000:0000:0000:0000:0000:0000:0001 var_dump( ip_expand('1::1') ); // Returns 0001:0000:0000:0000:0000:0000:0000:0001 var_dump( ip_expand('192.168.0') ); // Returns 192.168.0.0 var_dump( ip_expand('192.168.001.001') ); // Returns 192.168.1.1
ip2hex
将IP转换为十六进制表示形式。
use function \Choval\Whois\ip2hex; var_dump( ip2hex('196.11.31.255') ); // Returns c40b1fff var_dump( ip2hex('2a03:2880::') ); // Returns 2a032880000000000000000000000000
parse_range
此函数解析子网或范围(通常来自WHOIS响应),并返回IP、十六进制和二进制格式的起始和结束限制。
二进制格式建议用于数据库存储,十六进制格式建议用于比较。
use function \Choval\Whois\parse_range; print_r( parse_range( '186.19.128/18') ); /* Returns an array [range] => 186.19.128/18 [from] => 186.19.128.0 [to] => 186.19.191.255 [bin_from] => (BINARY) [bin_to] => (BINARY) [hex_from] => ba138000 [hex_to] => ba13bfff */ print_r( parse_range( '2a03:2880::/29') ); /* Returns an array [range] => 2a03:2880::/29 [from] => 2a03:2880:0000:0000:0000:0000:0000:0000 [to] => 2a03:2887:ffff:ffff:ffff:ffff:ffff:ffff [bin_from] => (BINARY) [bin_to] => (BINARY) [hex_from] => 2a032880000000000000000000000000 [hex_to] => 2a032887ffffffffffffffffffffffff */ print_r( parse_range( '196.11.31.0 - 196.11.31.255') ); /* Returns an array [range] => 196.11.31.0 - 196.11.31.255 [from] => 196.11.31.0 [to] => 196.11.31.255 [bin_from] => (BINARY) [bin_to] => (BINARY) [hex_from] => c40b1f00 [hex_to] => c40b1fff */
ip_in_range
检查IP是否在范围内。范围使用parse_range
计算。
use function \Choval\Whois\ip_in_range; var_dump( ip_in_range( '186.19.128.0', '186.19.128/18') ); // Returns true var_dump( ip_in_range( '186.19.192.0', '186.19.128/18') ); // Returns false
测试套件
git clone https://github.com/choval/whois.git --depth 1 composer install ./vendor/bin/phpunit --testdox