choval/whois

此包已被废弃且不再维护。未建议替换包。

PHP WHOIS包装器,支持异步,获取IP的国家、所有者和范围。

安装: 80

依赖: 0

建议者: 0

安全: 0

星星: 5

观察者: 2

分支: 1

开放问题: 0

类型:项目

v1.3.0 2022-03-05 04:12 UTC

This package is auto-updated.

Last update: 2023-12-05 08:19:46 UTC


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