-
Notifications
You must be signed in to change notification settings - Fork 0
/
change_ip.php
126 lines (126 loc) · 4.09 KB
/
change_ip.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
/************************************\
| Telegram-канал: https://t.me/z_tds |
| Cloudflare API v.0.5 |
| Массовая замена IP в DNS записях |
| Список аккаунтов: data/cf.txt |
| Список доменов: data/domains.txt |
\************************************/
@error_reporting(-1);
@ini_set('display_errors', 1);
@set_time_limit(0);
$ip_old = '127.0.0.1';//ip который нужно заменить
$ip_new = '127.0.0.2';//новый ip
$num_domains = 200;//максимальное количество обрабатываемых доменов
$num_subdomains = 200;//... субдоменов (по докам максимум 100, по факту можно ставить больше)
/*Ниже ничего не изменяйте*/
echo "<!DOCTYPE html><html><head><title>CF API</title><script>window.stopScroll=0;scrollingElement=(document.scrollingElement||document.body);setTimeout(function(){scrollBottom();},1000*1);function scrollBottom(){if(window.stopScroll!=1){setTimeout(function(){scrollBottom();},1000*0.5);}scrollingElement.scrollTop=scrollingElement.scrollHeight;}</script></head><body>";
$success = '<span style="color:green">success</span>';
$error = '<span style="color:red">error</span>';
//список аккаунтов cf
$cf = file(__DIR__.'/data/cf.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if(empty($cf)){
output("Empty");
stop();
}
foreach($cf as $a){
$a = explode(';', $a);
$email = $a[0];
$api_key = $a[1];
//headers
$headers = array();
$headers[] = "X-Auth-Email: $email";
$headers[] = "X-Auth-Key: $api_key";
$headers[] = "Content-Type: application/json";
//проверяем авторизацию
$url = 'https://api.cloudflare.com/client/v4/user';
$type = 'get';
curl();
output($email.'<br>');
if($auth_code == 200 && $res->success){
output("authorization: $success<br><br>");
//получаем список доменов и их идентификаторы
$url = 'https://api.cloudflare.com/client/v4/zones?page=1&per_page=$num_domains';
$type = 'get';
curl();
output('domains: '.count($res->result).'<br>');
//меняем ip
$res1 = $res;
$t = '';
foreach($res1->result as $e1){
$name = $e1->name;
$id = $e1->id;
$x = 1;//номер страницы
while(true){
$url = "https://api.cloudflare.com/client/v4/zones/$id/dns_records?page=$x&per_page=$num_subdomains";
$type = 'get';
curl();
$res2 = $res;
$total_pages = $res2->result_info->total_pages;
foreach($res2->result as $e2){
$content_dns = $e2->content;
$id_dns = $e2->id;
$type_dns = $e2->type;
$name_dns = $e2->name;
$url = "https://api.cloudflare.com/client/v4/zones/$id/dns_records/$id_dns";
if($content_dns == $ip_old){
$t = 1;
$data = '{"type":"'.$type_dns.'", "name":"'.$name_dns.'", "content":"'.$ip_new.'", "proxied":true}';
$type = 'put';
curl();
}
}
if($x == $total_pages){
break;
}
$x++;
}
}
if(empty($t)){
output("not found<br>");
}
}
else{
output("authorization: $error<br>");
}
output('--------------------<br>');
}
stop();
//
function curl(){
global $url, $headers, $data, $name, $type_dns, $name_dns, $res, $success, $error, $type, $auth_code;
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if($type == 'put'){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$res = json_decode(curl_exec($ch));
$auth_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($type == 'put'){
if($res->success){
output("$name | type: $type_dns | name: $name_dns | $success<br>");
}
else{
output("$name | type: $type_dns | name: $name_dns | $error<br>");
}
}
}
//
function output($str){
echo $str;
ob_flush();
flush();
}
//
function stop(){
echo "<script>window.stopScroll=1;</script></body></html>";
exit();
}
?>