mantoufan / yzhanip
爬取,匹配,解析 IP 或 IP 范围,检查 IP 或范围是否在另一个范围内。支持 IPv4,IPv6,IP 区间,通配符和 CIDR。检查 IP 是否为 Cloudflare 节点 IP 或 Google 漫游器 IP
1.0.1
2022-09-16 19:44 UTC
Requires
- php: >=5.4
- mantoufan/yzhancache: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-17 00:19:26 UTC
README
爬取,匹配,解析 IP 或 IP 范围,检查 IP 或范围是否在另一个范围内
支持 IPv4,IPv6,IP 区间,通配符和 CIDR
检查 IP 是否为 Cloudflare 节点 IP 或 Google 漫游器 IP
爬取,匹配,解析 IP 和 IP 范围,检测 IP 或范围是否在另一个范围内
支持 IPv4,IPv6,区间、通配符或 CIDR 表示的 IP 范围
检测 IP 是否是 Cloudflare 节点或 Google 漫游器 IP
安装 安装
composer require mantoufan/yzhanip
使用 使用
包含 包含
use YZhanIP\YZhanIP;
检查一个 IP 是否被 IP 范围包含
检测一个 IP 是否被 IP 范围包含
(new YZhanIP('127.0.0.1'))->in(new YZhanIP('127.0.0.*')); // true, new YZhanIP can be omitted (new YZhanIP('127.0.0.1'))->in('127.0.0.1-127.0.0.30'); // true (new YZhanIP('127.0.0.1'))->in('127.0.0.*'); // true (new YZhanIP('127.0.0.1'))->in('127.0.0.1/21'); // true (new YZhanIP('2001:4860:4801::af88'))->in('2001:4860:4801::af88-2001:4860:4801::afff'); // true (new YZhanIP('2001:4860:4801::af88'))->in('2001:4860:*::af88'); // true (new YZhanIP('2001:4860:4801::af88'))->in('2001:4860:4801::af88/7'); // true
检查一个 IP 范围是否被另一个 IP 范围包含
检测一个 IP 范围被另一个 IP 范围包含
(new YZhanIP('127.0.0.1-127.0.0.30'))->in('127.0.0.*'); // true (new YZhanIP('127.0.0.*'))->in('127.0.0.1/21'); // true (new YZhanIP('2001:4860:4801::af88-2001:4860:4801::afff'))->in('2001:4860:*::af88'); // true (new YZhanIP('2001:4860:*::af88'))->in('2001:4860:4801::af88/7'); // true
检查一组 IP/IP 范围混合数组是否被另一组 IP/IP 范围混合数组包含
检测一组 IP/IP 范围混合数组被另一组 IP/IP 范围混合数组包含
(new YZhanIP(['127.0.0.1', '127.0.0.1-127.0.0.30', '127.0.0.*']))->in('127.0.0.1/21'); // true (new YZhanIP(['2001:4860:4801::af88', '2001:4860:4801::af88-2001:4860:4801::afff', '2001:4860:*::af88']))->in('2001:4860:4801::af88/7'); // true
转换为字符串 ToString
IP:转为最简形式,IP 范围:通配符/CIDR 转为区间
IP:转为最简形式,IP 范围:通配符/CIDR 转为区间
(new YZhanIP(['127.0.0.*', '127.0.0.1/21']))->toString(); // 127.0.0.0-127.0.0.255,127.0.0.0-127.0.7.255 (new YZhanIP('2001:4860:4801:0000:0000:0000:0000:af88'))->toString(); // 2001:4860:4801::af88 (new YZhanIP(['2001:4860:*::af88', '2001:4860:4801::af88/7']))->toString(); // 2001:4860::af88-2001:4860:ffff::af88,2000::-21ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
转换为原始字符串 To Raw String
返回原始字符串
(new YZhanIP('2001:4860:4801:0000:0000:0000:0000:af88'))->toRaw(); // 2001:4860:4801:0000:0000:0000:0000:af88 (new YZhanIP(['127.0.0.*', '127.0.0.1/21']))->toRaw(); // 127.0.0.*,127.0.0.1/21 (new YZhanIP(['2001:4860:*::af88', '2001:4860:4801::af88/7']))->toRaw(); // 2001:4860:*::af88,2001:4860:4801::af88/7
过滤 Filter
保留一组 IP/IP 范围中被另一组 IP/IP 范围中包含的项
保留一组 IP/IP 范围中被另一组 IP/IP 范围中包含的项
(new YZhanIP(['127.0.0.1', '65.0.0.1', '2001:4860:4801::af88', '3001::af88', '127.0.0.*', '2001:4860:4801::af88-2001:4860:4801::afff']))->filter(['127.0.0.1/21', '2001:4860:4801::af88/7'])->toRaw(); // 127.0.0.1,2001:4860:4801::af88,127.0.0.*,2001:4860:4801::af88-2001:4860:4801::afff
溯源 Tracer
use YZhanIP\Tool\IPTracer;
检查 IP/IP 范围是否是 Cloudflare 节点 IP
检测 IP/IP 范围 是否是 Cloudflare 节点 IP
IPTracer::IsCloudflareNode('173.245.48.1'); // true IPTracer::IsCloudflareNode('173.245.48.0/20'); // true IPTracer::IsCloudflareNode('2400:cb00::1'); // true IPTracer::IsCloudflareNode('2400:cb00::/32'); // true
检查 IP/IP 范围是否是 Google 漫游器 IP
检测 IP/IP 范围 是否是 Google 漫游器 IP
IPTracer::IsGoogleBot('66.249.64.97'); // true IPTracer::IsGoogleBot('66.249.64.0/27'); // true IPTracer::IsGoogleBot('2001:4860:4801:48::1'); // true IPTracer::IsGoogleBot('2001:4860:4801:10::/64'); // true
检查 IP/IP 范围是否在指定 URL 的内容中出现
检测 IP/IP 范围 是否在指定 URL 的内容中出现
IPTracer::IsInUrl(['173.245.48.1', '2400:cb00::1', '2400:cb00::/32'], ['https://www.cloudflare.com/ips-v4', 'https://www.cloudflare.com/ips-v6']); // true
爬取 Crawler
use YZhanIP\Tool\IPCrawler;
从 URL 中提取 IP/IP 范围为数组
从 URL 中提取 IP/IP 范围为数组
$url = '{URL with IP and IP range inside}'; $ipCrawler = new IPCrawler($url, array( // The following are Default Config, no Modification no Statement 'cacheDir' => sys_get_temp_dir(), 'cacheKey' => 'yzhanip' . md5($url), 'cacheMaxAge' => 86400, // Unit: s 'timeOut' => 6, )); // $ipCrawler = new IPCrawler($url); // use Default Config $ipCrawler->get() // array('{IP}', '{IP Range}' ...)
更新缓存 Update Cache
更新缓存
$ipCrawler->update();
解析 Parser
use YZhanIP\Tool\IPParser;
获取 IP/IP 范围的类型
检测 IP/IP 范围的类型
IPParser::GetType('127.0.0.1'); // IPV4 IPParser::GetType('127.0.0.1/21'); // IPV4CIDR IPParser::GetType('127.0.0.1-127.0.0.30'); // IPV4INTERVAL IPParser::GetType('127.0.0.*'); // IPV4WILDCARD IPParser::GetType('2001:4860:4801::af88'); // IPV6 IPParser::GetType('2001:4860:4801::af88/7'); // IPV6CIDR IPParser::GetType('2001:4860:4801::af88-2001:4860:4801::afff'); // IPV6INTERVAL IPParser::GetType('2001:4860:*::af88'); // IPV6WILDCARD
检查 IP/IP 范围的类型
判断 IP/IP 范围的类型
IPParser::IsIPv4('127.0.0.1'); // true IPParser::IsIPV4CIDR('127.0.0.1/21'); // true IPParser::IsIPv4Interval('127.0.0.1-127.0.0.30'); // true IPParser::IsIPv4Wildcard('127.0.0.*'); // true IPParser::IsIPv6('2001:4860:4801::af88'); // true IPParser::IsIPV6CIDR('2001:4860:4801::af88/7'); // true IPParser::IsIPv6Interval('2001:4860:4801::af88-2001:4860:4801::afff'); // true IPParser::IsIPv6Wildcard('2001:4860:*::af88'); // true IPParser::IsIP('127.0.0.1'); // true IPParser::IsIP('2001:4860:4801::af88'); // true IPParser::IsIPCIDR('127.0.0.1/21'); // true IPParser::IsIPCIDR('2001:4860:4801::af88/7'); // true IPParser::IsIPInterval('127.0.0.1-127.0.0.30'); // true IPParser::IsIPInterval('2001:4860:4801::af88-2001:4860:4801::afff'); // true IPParser::IsIPWildcard('127.0.0.*'); // true IPParser::IsIPWildcard('2001:4860:*::af88'); // true
从 HTML/TXT/JSON 等内容中提取 IP/IP 范围为数组
从 HTML/TXT/JSON 等内容中提取 IP/IP 范围为数组
/** $content is mixed content of IPv4 IPv6 IPRange */ IPParser::MatchAllIPv4($content); // array('127.0.0.1') IPParser::MatchAllIPv4CIDR($content); // array('127.0.0.1/21') IPParser::MatchAllIPv4Interval($content); // array('127.0.0.1-127.0.0.30') IPParser::MatchAllIPv4Wildcard($content); // array('127.0.0.*') IPParser::MatchAllIPv6($content); // array('2001:4860:4801::af88') IPParser::MatchAllIPv6CIDR($content); // array('2001:4860:4801::af88/7') IPParser::MatchAllIPv6Interval($content); // array('2001:4860:4801::af88-2001:4860:4801::afff') IPParser::MatchAllIPv6Wildcard($content); // array('2001:4860:*::af88') IPParser::MatchAllIP($content); // array('127.0.0.1', 2001:4860:4801::af88') IPParser::MatchAllIPCIDR($content); // array('127.0.0.1/21', '2001:4860:4801::af88/7') IPParser::MatchAllIPInterval($content); // array('127.0.0.1-127.0.0.30', '2001:4860:4801::af88-2001:4860:4801::afff') IPParser::MatchAllIPWildcard($content); // array('127.0.0.*', '2001:4860:*::af88') IPParser::MatchAll($content); // array('127.0.0.1', 2001:4860:4801::af88', '127.0.0.1/21', '2001:4860:4801::af88/7', '127.0.0.1-127.0.0.30', '2001:4860:4801::af88-2001:4860:4801::afff', '127.0.0.*', '2001:4860:*::af88')
转换 Converter
use YZhanIP\Tool\IPConverter;
将 IP 转换为二进制字符串
IP 转换为二进制字符串
IPConverter::IP2Bit('127.0.0.1'); // 01111111000000000000000000000001 IPConverter::IP2Bit('2001:4860:4801::af88'); // 00100000000000010100100001100000010010000000000100000000000000000000000000000000000000000000000000000000000000001010111110001000
将二进制字符串转换为 IP
二进制字符串转换为 IP
IPConverter::Bit2IP('01111111000000000000000000000001'); // 127.0.0.1 IPConverter::Bit2IP('00100000000000010100100001100000010010000000000100000000000000000000000000000000000000000000000000000000000000001010111110001000'); // 2001:4860:4801::af88
将 CIDR 转换为 IP 范围
CIDR 转 IP 范围
$ipv4Range = IPConverter::IPCIDR2IPRange('127.0.0.1/24'); $ipv4Range->getFirst(); // 127.0.0.0 $ipv4Range->getLast(); // 127.0.7.255 $ipv6Range = IPConverter::IPCIDR2IPRange('2001:4860:4801::af88/7'); $ipv6Range->getFirst(); // 2000:: $ipv6Range->getLast(); // 21ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff