· 6 years ago · Mar 24, 2020, 05:16 PM
1<?php
2
3ini_set('memory_limit', '-1');
4
5$api_token = ''; // My Profile -> API Tokens (Not Global API Key)
6$zone_id = ''; // Cloudflare Hosed Zone ID
7$rule_id = ''; // Custom WAF Rule ID
8
9$ch = curl_init("https://api.cloudflare.com/client/v4/zones/$zone_id/security/events?rule_id=$rule_id&limit=1000");
10curl_setopt_array($ch, array(
11 CURLOPT_RETURNTRANSFER => true,
12 CURLOPT_HTTPHEADER => [
13 "Authorization: Bearer $api_token"
14 ]
15));
16echo "First Page ...\n";
17$i = 1;
18$iplist = '';
19$iplist_arr = array();
20$ips = array();
21Retry: //
22$raw = curl_exec($ch);
23Again: //
24$result = json_decode($raw);
25if (!is_object($result)) {
26 echo "Invalid Response, Retrying ...\n";
27 goto Retry;
28}
29
30if (empty($result->success)) {
31 echo "Failure: " . $raw . "\n";
32 exit;
33}
34
35$info = $result->result_info;
36$cursor = $info->cursors->before ?? null;
37
38foreach ($result->result as $r) {
39 if (in_array($r->ip, $ips)) continue;
40 array_push($ips, $r->ip);
41 $iplist .= "$r->ip|$r->country\n";
42 array_push($iplist_arr, [
43 'ip' => $r->ip,
44 'country' => $r->country
45 ]);
46}
47
48file_put_contents('results.txt', $iplist);
49
50if (!empty($cursor)) {
51 $i++;
52 echo "#$i: $cursor\n";
53 $ch = curl_init("https://api.cloudflare.com/client/v4/zones/$zone_id/security/events?rule_id=$rule_id&limit=1000&cursor=$cursor");
54 curl_setopt_array($ch, array(
55 CURLOPT_RETURNTRANSFER => true,
56 CURLOPT_HTTPHEADER => [
57 "Authorization: Bearer $api_token"
58 ]
59 ));
60 $raw = curl_exec($ch);
61 goto Again;
62}
63
64echo 'Complete!' . PHP_EOL;