File check_curl2 of Package nagios-plugins-various
1
#!/usr/bin/php -q
2
<?php
3
4
// Changeable variables
5
$Debug=0;
6
$Timeout=10;
7
// --------------------
8
9
$Continue=1;
10
$Agent="Mozilla/5.0 (X11; U; Linux i686; cs; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7";
11
$Status=0;
12
$InludePerf=1;
13
$Msg='';
14
$ShowPage=0;
15
16
$ch = curl_init();
17
$Pocet=count($argv);
18
if ($Pocet>1){
19
for ($i=1;$i<$Pocet;$i++){
20
switch ($argv[$i]){
21
case '-U':
22
if ($Pocet>$i+1){
23
curl_setopt($ch, CURLOPT_URL, $argv[++$i]);
24
if ($Debug)echo "\nDEBUG: -U ".$argv[$i];
25
}else{
26
echo "ERROR in parsing argument -U: missing value";
27
Manual();
28
exit(2);
29
}
30
break;
31
32
case '-A':
33
if ($Pocet>$i+1){
34
$Agent=$argv[++$i];
35
if ($Debug)echo "\nDEBUG: -A ".$argv[$i];
36
}else{
37
echo "ERROR in parsing argument -A: missing value";
38
Manual();
39
exit(2);
40
}
41
break;
42
43
case '-T':
44
if ($Pocet>$i+1){
45
$Timeout=$argv[++$i];
46
if ($Debug)echo "\nDEBUG: -T ".$argv[$i];
47
}else{
48
echo "ERROR in parsing argument -T: missing value";
49
Manual();
50
exit(2);
51
}
52
break;
53
54
case '-G':
55
if ($Pocet>$i+1){
56
$Grep=$argv[++$i];
57
if ($Debug)echo "\nDEBUG: -G ".$argv[$i];
58
}else{
59
echo "ERROR in parsing argument -G: missing value";
60
Manual();
61
exit(2);
62
}
63
break;
64
65
case '-L':
66
$ShowPage=1;
67
if ($Debug)echo "\nDEBUG: -L";
68
break;
69
70
case '-F':
71
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
72
if ($Debug)echo "\nDEBUG: -F";
73
break;
74
75
case '-X':
76
$InludePerf=0;
77
if ($Debug)echo "\nDEBUG: -X";
78
break;
79
80
case '-I':
81
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
82
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
83
if ($Debug)echo "\nDEBUG: -I";
84
break;
85
86
case '-Tc':
87
if ($Pocet>$i+1){
88
$Tc=$argv[++$i];
89
if ($Debug)echo "\nDEBUG: -Tc ".$argv[$i];
90
}else{
91
echo "ERROR in parsing argument -Tc: missing value";
92
Manual();
93
exit(2);
94
}
95
break;
96
97
case '-Tw':
98
if ($Pocet>$i+1){
99
$Tw=$argv[++$i];
100
if ($Debug)echo "\nDEBUG: -Tw ".$argv[$i];
101
}else{
102
echo "ERROR in parsing argument -Tw: missing value";
103
Manual();
104
exit(2);
105
}
106
break;
107
108
case '-Sbc':
109
if ($Pocet>$i+1){
110
$Sbc=$argv[++$i];
111
if ($Debug)echo "\nDEBUG: -Sbc ".$argv[$i];
112
}else{
113
echo "ERROR in parsing argument -Sbc: missing value";
114
Manual();
115
exit(2);
116
}
117
break;
118
119
case '-Sbw':
120
if ($Pocet>$i+1){
121
$Sbw=$argv[++$i];
122
if ($Debug)echo "\nDEBUG: -Sbw ".$argv[$i];
123
}else{
124
echo "ERROR in parsing argument -Sbw: missing value";
125
Manual();
126
exit(2);
127
}
128
break;
129
130
case '-Soc':
131
if ($Pocet>$i+1){
132
$Soc=$argv[++$i];
133
if ($Debug)echo "\nDEBUG: -Soc ".$argv[$i];
134
}else{
135
echo "ERROR in parsing argument -Soc: missing value";
136
Manual();
137
exit(2);
138
}
139
break;
140
141
case '-Sow':
142
if ($Pocet>$i+1){
143
$Sow=$argv[++$i];
144
if ($Debug)echo "\nDEBUG: -Sow ".$argv[$i];
145
}else{
146
echo "ERROR in parsing argument -Sow: missing value";
147
Manual();
148
exit(2);
149
}
150
break;
151
152
case '-S':
153
if ($Pocet>$i+2){
154
$String1=$argv[++$i];
155
$String2=$argv[++$i];
156
if ($Debug)echo "\nDEBUG: -S ".$String1.' '.$String2;
157
}else{
158
echo "ERROR in parsing argument -S: missing values";
159
Manual();
160
exit(2);
161
}
162
break;
163
164
case '-O':
165
$UseOutput=1;
166
if ($Debug)echo "\nDEBUG: -O";
167
break;
168
169
case '--help':
170
case '-h':
171
Manual();
172
exit(2);
173
break;
174
175
default:
176
echo "ERROR in argument parsing: ".$argv[$i];
177
Manual();
178
exit(2);
179
break;
180
}
181
}
182
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
183
curl_setopt($ch, CURLOPT_HEADER, 0);
184
curl_setopt($ch, CURLOPT_USERAGENT, $Agent );
185
curl_setopt($ch, CURLOPT_TIMEOUT, $Timeout);
186
187
if (isset($Tc) and isset($Tw) and ($Tw >= $Tc) ){
188
echo "ERROR in arguments Tw ($Tw) >= Tc ($Tc) !!!";
189
Manual();
190
exit(2);
191
}
192
if (isset($Sbc) and isset($Sbw) and ($Sbw >= $Sbc) ){
193
echo "ERROR in arguments Sbw ($Sbw) >= Sbc ($Sbc) !!!";
194
Manual();
195
exit(2);
196
}
197
if (isset($Soc) and isset($Sow) and ($Sow >= $Soc) ){
198
echo "ERROR in arguments Sbw ($Sow) >= Sbc ($Soc) !!!";
199
Manual();
200
exit(2);
201
}
202
203
// EXEC
204
$time_start = getmicrotime();
205
$Buff=@curl_exec($ch);
206
$Time = round(getmicrotime() - $time_start,3);
207
$Size=strlen($Buff);
208
$errnum=curl_errno($ch);
209
if ($errnum){
210
if ($errnum==28){
211
echo 'Timeout '.$Timeout.'sec exceeded.';
212
exit(2);
213
}else{
214
echo "ERROR in opening page! Err:".curl_error($ch);
215
exit(2);
216
}
217
}
218
@curl_close($ch);
219
220
if (isset($Sbc) and ($Size > $Sbc)){
221
$Status=2;
222
$Msg.='Size '.$Size.'B below limit '.$Sbc.'B';
223
}elseif (isset($Sbw) and ($Size > $Sbw)){
224
$Status=1;
225
$Msg.='Size '.$Size.'B below limit '.$Sbw.'B';
226
}
227
228
if (isset($Soc) and ($Size < $Soc)){
229
$Status=2;
230
$Msg.='Size '.$Size.'B over limit '.$Soc.'B';
231
}elseif (isset($Sow) and ($Size < $Sow)){
232
$Status=1;
233
$Msg.='Size '.$Size.'B over limit '.$Sow.'B';
234
}
235
236
if (isset($Tc) and ($Time > $Tc)){
237
$Status=2;
238
$Msg.='Download time '.$Time.'sec exceeded time limit '.$Tc.'sec';
239
}elseif (isset($Tw) and ($Time > $Tw)){
240
$Status=1;
241
$Msg.='Download time '.$Time.'sec exceeded time limit '.$Tw.'sec';
242
}
243
244
if (isset($Grep)){
245
if (!strstr($Buff,$Grep)){
246
$Status=2;
247
$Msg.='String '.$Grep.' not found!';
248
}
249
}
250
251
if (isset($String1) or isset($String2)){
252
if (isset($String1) and isset($String2)){
253
echo "\n".$String1."\n".$String2."\n";
254
$First=strpos($Buff,$String1);
255
if ($First){
256
$Last=strpos($Buff,$String2,($First+strlen($String1)));
257
if ($Last){
258
echo $First.'-'.$Last.' - '.substr($Buff,($First+strlen($String1)),($Last-$First-strlen($String1)) );
259
}else{
260
echo "ERROR in arguments -S. Second string ".$String2.' not found!!!';
261
Manual();
262
exit(2);
263
}
264
}else{
265
echo "ERROR in arguments -S. First string ".$String1.' not found!!!';
266
Manual();
267
exit(2);
268
}
269
}else{
270
echo "ERROR in arguments -S. Must be two strings! Before and after.";
271
Manual();
272
exit(2);
273
}
274
}
275
276
if (isset($UseOutput)){
277
$StatusHeader = "Status:";
278
$StatusSeperator = "-";
279
$First=strpos($Buff,$StatusHeader);
280
$Last=strpos($Buff,$StatusSeperator,($First+strlen($StatusHeader)));
281
$OutputStatus = trim(substr($Buff,($First+strlen($StatusHeader)),($Last-$First-strlen($StatusHeader)) ) );
282
if ( strtoupper($OutputStatus) == "CRITICAL" ) {
283
$Status=2;
284
$Msg.=substr($Buff,$First+8);
285
} elseif ( strtoupper($OutputStatus) == "WARNING" ){
286
$Status=1;
287
$Msg.=substr($Buff,$First+8);
288
} else {
289
$Status=0;
290
$Msg.=substr($Buff,$First+8);
291
}
292
}
293
294
295
296
if (empty($Msg))$Msg='Page OK';
297
if ($InludePerf)$Msg.= " |time=$Time size=$Size";
298
echo $Msg;
299
if ($ShowPage)echo "\n\n----------------------------- Page content ----------------------------\n\n".$Buff;
300
exit($Status);
301
302
}else{
303
Manual();
304
}
305
306
function getmicrotime(){
307
list($usec, $sec) = explode(" ",microtime());
308
return ((float)$usec + (float)$sec);
309
}
310
311
function Manual(){
312
echo "------- check_curl.php written by Vit Safar (CZ), v1.0, 20.10.2006 ---------
313
----------------- modified by Donald Fellow (US), v1.1, 08.06.2007 ---------\n
314
Syntax:
315
-U URL (s)
316
-A Agent (s)(default: Mozilla/5.0 ... )
317
-G Grep page on STRING (s)
318
-L Show page (-)
319
-F Follow redirects (-)
320
-I Ignore SSL certificate errors (-)
321
-X Exclude performance data (default: include)
322
-Tc Ccritical page return time (i)
323
-Tw Warning page return time (i)
324
-Sbc Critical page size below SIZE (i)
325
-Soc Critical page size over SIZE (i)
326
-Sbw Warning page size below SIZE (i)
327
-Sow Warning page size over SIZE (i)
328
-S Find string between ARG1 and ARG2, return first match (s s) (example: value=\" \" )
329
-T Timeout (i)(default: 10sec)
330
-O Output Driven Check - Page Should respond with \"Status: OK\" or otherwise
331
\n\n Example:
332
check_curl.php -U http://test.example.net\n\n";
333
}
334
335
?>
336
337
338