感觉cloudflare的百万IP+很快会被我们玩坏
测试环境:Centos7.7 x64 core 纯净环境(没安装web服务器/php/数据库之类的)
操作的目录环境本次是: /root,操作目录无特定要求,随便哪个目录下操作都行,本例中是/root

1.安装必要基础环境:

yum install wget cmake gmp-devel gengetopt libpcap-devel flex byacc json-c-devel libunistring-devel git gcc+ gcc-c++ -y

2.下载 zmap 扫描工具
git clone https://github.com/zmap/zmap

3.解决依赖问题,编译zmap前,原始纯净的Centos7缺少一个zmap的依赖,需要手动编译安装,否则缺少依赖会编译失败

wget ftp://ftp.gnu.org/gnu/gengetopt/gengetopt-2.22.6.tar.gz && tar -zvxf gengetopt-2.22.6.tar.gz && cd gengetopt-2.22.6 && ./configure && make install

4.编译zmap

cd zmap/ cmake . make -j4 make install

注意,如果你是只有1核CPU,那么 make -j4就改成make,如果是多核CPU,那么make -多核数目,如本例中我是4核VPS,那么就make -j4,多核CPU也可以只用make,不加参数,只是编译慢一些而已。

5.安装php环境,这里看了下php过滤源码的要求,必须是php7.0及更高版本的php,我这里选择安装php7.1

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install php71w php71w-fpm php71w-cli php71w-common php71w-devel php71w-gd php71w-pdo php71w-mysql php71w-mbstring php71w-bcmath php71w-curl service php-fpm start

6.去Cloudflare官网寻找公布的CDN节点的IP段,网址是:

https://www.cloudflare.com/ips/

这里简单复制粘贴下:

173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/12 172.64.0.0/13 131.0.72.0/22

把上面的IPv4的IP段复制粘贴到一个文本,文件名为full.txt

接着准备一个PHP扫描过滤源码,用它过滤cloudflare的IP段,筛选出可用IP,php过滤源码网络随便找的,烂大街,出处难以查找(如有侵权请联系tg: @twldyy)。

新建一个名为cff.php的文件,打开后粘贴下面代码,或者直接下载成品:https://www.lanzouw.com/i6vpuob

<?PHP ini_set('memory_limit', '-1'); function partition($list, $p) { $listlen = count($list); $partlen = floor($listlen / $p); $partrem = $listlen % $p; $partition = array(); $mark = 0; for ($px = 0; $px < $p; $px++) { $incr = ($px < $partrem) ? $partlen + 1 : $partlen; $partition[$px] = array_slice($list, $mark, $incr); $mark += $incr; } return $partition; } if ($argc < 4) { echo "CloudFlare filter\nVersion: 0.4\n"; echo "Usage: php {$argv[0]} <raw file> <Verification file> <threads> [verify domain] [verify path] [verify value]\n"; echo "Power by Kagurazaka Shira\n"; exit; } if (!file_exists("$argv[1]")) { exit("Invalid input file!\n"); } if (file_exists("$argv[2]")) { unlink($argv[2]); } $array = file($argv[1], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); //列表 $childcount = $argv[3]; //线程数 $array = array_unique($array); $part = array(); $part = partition($array, $childcount); //列表分割 $vname = $argv[2]; $domain = empty($argv[4]) ? "cfv.virtualizor.com" : $argv[4]; $vpath = empty($argv[5]) ? "/srk.css" : $argv[5]; $vvalue = empty($argv[6]) ? "srk_verify" : $argv[6]; for ($i = 0; $i < $childcount; $i++) { $pid = pcntl_fork(); if ($pid == -1) { echo "Forking failed on loop $i\n"; exit; } else if ($pid) { continue; } else { foreach ($part[$i] as $ip) { $url = "http://{$ip}/cdn-cgi/trace"; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, // CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5, // CURLOPT_PROXY => $ip, CURLOPT_TIMEOUT => 10, CURLOPT_HTTPHEADER => [ "Host: {$domain}", "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36", ], // CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36", ]); $return = curl_exec($ch); if (empty($return)) { echo "{$ip} down\n"; curl_close($ch); continue; } // var_dump($return); if (strpos($return, "h={$domain}")) { curl_setopt($ch, CURLOPT_URL, "http://{$ip}" . $vpath); $return = curl_exec($ch); // var_dump($return); if (strpos($return, $vvalue) !== false) { echo "{$ip} success\n"; file_put_contents($vname, $ip . "\n", FILE_APPEND | LOCK_EX); curl_close($ch); continue; } } echo "{$ip} bad\n"; curl_close($ch); } exit; } } for ($j = 0; $j < $childcount; $j++) { $pid = pcntl_wait($status); } $v_arr = file($vname, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); //列表 $v_arr = array_unique($v_arr); foreach ($v_arr as &$v) { $v = ip2long($v); } sort($v_arr); foreach ($v_arr as &$v) { $v = long2ip($v); } file_put_contents($vname, implode("\n", $v_arr)); ?>

然后保存
接着执行扫描:

php cff.php cdn_ip.txt v.txt 300

整个扫描筛选过程大概需要5分钟+,耐心等待一下,这里解释下,这行命令组成,php是部署php环境后就有的php主程序,用来执行php文件,cff.php是PHP 文件,文件内容就是那个过滤CloudFlare可用IP的代码,cdn_ip.txt是 CloudFlare公布的CDN节点IP段,v.txt是筛选之后的实际可用IP,以上的文件名都可以随便改,你喜欢就好,只要你知道它是干什么的。
接着目录下可以看到 一个 v.txt 的文件,整个文件大概有几十万行IP

然后那个v.txt的IP都是 cloudflare的可用IP,随便挑几个IP出来,追踪IP路由,哪个最近,不绕路,就用哪个IP,百万IP随意皮,没错,这几十上百万的IP都是可以用的,当成自己的服务器节点的IP,直接指定美滋滋。

具体怎么用呢,稍微说一下,v2的链接配置有关于主机地址配置地方是2个,一个是服务器地址,一个是http域名伪装地址,http域名伪装地址填写你的CloudFlare的代理的域名,服务器地址就是那几十万行IP了,随意换,http域名伪装地址必须填对,且是你的你的CloudFlare的代理的域名。连接时,CF连接过程是这样的,先连接到你填写的CDN服务器地址节点,因为你填写的域名是CF代理的流量,且你手动指定了入口CDN的节点,就会按照设定的IP来作为第一个路由,如果你不指定CDN节点IP,就按就近原则使用最近的CDN节点来作为路由入口,问题是CF的就近原则的判断基本都是绕圈的....,不是直连的!!可以说基本不准确。

本次更新时间:2020-4-7 17:49:33,增加一些细节说明
历史更新时间:
1>.2019-10-20 23:04:06
2>2019-10-21 21:20:41

最后修改:2022 年 07 月 20 日
如果觉得我的文章对你有用,请随意赞赏