vi volkswagen_https_host_2.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define OK 0
#define WARNING 1
#define CRITICAL 2
#define UNKNOWN 3
#define LEN 1000
#define LEN_SHORT 512
int exitstatus=OK;
char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};
//char *power_status[4]={"active","deactive","not_install","unsupport"};
char status_information[LEN];
char performance_data[LEN];
/*
int sum_conn;
char sum_conn_all[LEN_SHORT];
char sum_conn_170_241[LEN_SHORT];
char sum_conn_170_243[LEN_SHORT];
char sum_conn_171_241[LEN_SHORT];
char sum_conn_171_243[LEN_SHORT];
*/
//line=1,readbuf=http_code:200:size_download:6340:time_total:0.430
char http_code[10]={0};
char size_download[10]={0};
char time_total[10]={0};
char error_code[10]={"0"};
char error_string[100]={0};
/*
void print_usage(char str[32]) {
printf("Usage: %s [options]\n",str);
printf(" e.g. %s -H 1.1.1.1 -o .1.3.6...\n",str);
printf("Options:\n");
printf("\t -H ip address\n");
printf("\t -o snmp oid\n");
}
*/
void print_usage(char str[100]) {
printf("Usage: %s RESP_PAGE_SIZE URL\n",str);
printf(" e.g. %s 2300 https://www.baidu.com\n",str);
exit(-1);
}
/*
int check_argv() {
while((ch=getopt(argc,argv,"H:o:"))!=-1) {
switch(ch) {
case 'H':
// printf("option H:%s\n",optarg);
break;
case 'o':
// printf("option o:%s\n",optarg);
break;
default:
// printf("other option :%c\n",ch);
break;
}
}
return -1;
}
*/
int parse_status(char *sh_cmd) {
int ret;
int line=0;
FILE *fp;
char readbuf[LEN_SHORT];
// fp=popen("/usr/bin/snmpwalk -v2c -c zb.186.nms 114.66.80.55 1.3.6.1.4.1.2011.2.23.1.9.1.2.1.2","r");
// fp=popen(command,"r");
fp=popen(sh_cmd,"r");
if(fp==NULL) {
fprintf(stderr,"fopen() error.\n");
exitstatus=CRITICAL;
return exitstatus;
/*
sprintf(status_information,"active_status=%s",active_status);
sprintf(performance_data,"active_status=%s;;;0;100","0");
sprintf(status_information,"conn_170_245=%s conn_171_245=%s all_conn=%s",sum_conn_170_245,sum_conn_171_245,sum_conn_all);
sprintf(performance_data,"conn_170_245=%s;;;0;100 conn_171_245=%s;;;0;100 all_conn=%s;;;0;100",sum_conn_170_245,sum_conn_171_245,sum_conn_all);
printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
*/
}
/*
str=fgets(readbuf,LEN_SHORT,fp);
if(str==NULL) {
perror("fgets() error");
}
printf("readbuf=%s",readbuf);
ret=sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.1.1.1.19.0 = INTEGER: %s",active_status);
if(ret<0) {
fprintf(stderr,"sscanf() error.\n");
exitstatus=UNKNOWN;
sprintf(status_information,"active_status=%s",active_status);
sprintf(performance_data,"active_status=%s;;;0;100","0");
printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
return exitstatus;
}
//SNMPv2-SMI::enterprises.3375.2.1.1.1.1.19.0 = INTEGER:
*/
// printf("error_code=%s\n",error_code);
while(fgets(readbuf,LEN_SHORT,fp)!=NULL) {
line++;
// if(line==62 || line==68 || line==212) {
// printf("line=%d,readbuf=%s",line,readbuf);
if(strstr(readbuf,"SSL read")) {
sscanf(readbuf,"%*[^(](%[^)]",error_code);
strcpy(error_string,readbuf);
error_string[strlen(error_string)-1]='\0';
// printf("error_code=%s\n",error_code);
// printf("error_string=%s\n",error_string);
}
if(strstr(readbuf,"http_code")) {
sscanf(readbuf,"http_code:%[^,],size_download:%[^,],time_total:%s",http_code,size_download,time_total);
// line=1,readbuf=http_code:200:size_download:6340:time_total:0.430
// printf("---------------------------------------\n");
// printf("http_code=%s,size_download=%s,time_total=%s\n",http_code,size_download,time_total);
}
// }
// printf("%s",readbuf);
/* if(line==1) {
// sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.1 = INTEGER: %s",power1_value);
// sscanf("SNMPv2-SMI::enterprises.3375.2.2.5.4.3.1.9.7.77.81.65.95.73.78.84.1.4.103.4.170.245.8021 = Counter64: 23","%*[^=]%*[^:]: %s",str1);
sscanf(readbuf,"%*[^=]%*[^:]: %s",sum_conn_170_241);
}
else if (line==2) {
// sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.2 = INTEGER: %s",power2_value);
sscanf(readbuf,"%*[^=]%*[^:]: %s",sum_conn_170_243);
}
else if (line==3) {
// sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.2 = INTEGER: %s",power2_value);
sscanf(readbuf,"%*[^=]%*[^:]: %s",sum_conn_171_241);
}
else if (line==4) {
// sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.2 = INTEGER: %s",power2_value);
sscanf(readbuf,"%*[^=]%*[^:]: %s",sum_conn_171_243);
}
*/
/*
if(line==2) {
break;
}
*/
}
// printf("line=%d\n",line);
ret=pclose(fp);
if(ret==-1) {
perror("pclose");
}
return 0;
}
int main(int argc,char *argv[]) {
int ret;
int ch;
int mark=0;
char *str;
char command[LEN];
int response_size=0;
/*
if(argc==1 || argc!=5) {
printf("%s -H host -o oid\n",argv[0]);
print_usage(argv[0]);
return -1;
}
*/
if(argc!=3) {
// printf("%s url\n",argv[0]);
printf("%s is error, need parameter\n",argv[0]);
print_usage(argv[0]);
}
response_size=atoi(argv[1]);
// printf("response_size=%d\n",response_size);
/*
while((ch=getopt(argc,argv,"H:o:"))!=-1) {
switch(ch) {
case 'H':
// printf("option H:%s\n",optarg);
break;
case 'o':
// printf("option o:%s\n",optarg);
break;
default:
// printf("other option :%c\n",ch);
mark=1;
break;
}
}
if(mark==1) {
return -1;
}
*/
// sprintf(command,"/usr/bin/snmpwalk -v2c -c public %s %s | grep 245.6717",argv[2],argv[4]);
// sprintf(command,"/usr/bin/snmpwalk -v2c -c zb.186.nms %s %s | grep 112.111.111.108.*8080",argv[2],argv[4]);
// sprintf(command,"/usr/bin/curl -v -s -w '%%%{time_connect%}:%%%{time_starttransfer%}:%%%{time_total%}' %s",argv[1]);
// sprintf(command,"/usr/bin/curl -v -s -w \'%%\{time_connect\}:%%\{time_starttransfer\}:%%\{time_total\}\' %s 2>&1",argv[1]);
// sprintf(command,"/usr/bin/curl --silent --write-out \'%%\{time_connect\}:%%\{time_starttransfer\}:%%\{time_total\}\' --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 %s 2>&1",argv[1]);
// sprintf(command,"/usr/bin/curl --silent -o /dev/null --write-out http_code:%%\{http_code\}:size_download:%%\{size_download\}:time_total:%%\{time_total\} --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 %s 2>&1",argv[1]);
// sprintf(command,"/usr/bin/curl --connect-timeout 10 --max-time 20 --silent -o /dev/null --write-out http_code:%%\{http_code\},size_download:%%\{size_download\},time_total:%%\{time_total\}\"\\n\" --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 %s",argv[1]);
// sprintf(command,"/usr/bin/curl --connect-timeout 10 --max-time 20 --silent -o /dev/null --write-out http_code:%%{http_code},size_download:%%{size_download},time_total:%%{time_total}\"\\n\" --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 %s",argv[1]);
sprintf(command,"/usr/bin/curl --connect-timeout 10 --max-time 20 -o /dev/null --write-out \"\\n\"http_code:%%{http_code},size_download:%%{size_download},time_total:%%{time_total}\"\\n\" --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*xxxx*CN:a694224a209d97785cb60e1554ba9528 \"%s\" 2>&1",argv[2]);
//size_download:%{size_download}:http_code:%{http_code}:time_connect:%{time_connect}:time_starttransfer:%{time_starttransfer}:time_total:%{time_total}"\n"
///usr/bin/curl -v --insecure -w ‘%{time_connect}:%{time_starttransfer}:%{time_total}’ --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 'https://env09-mbbservices03.audi-connect.cn/mbb/applist/v2/zh_CN'
// snmpwalk -v 2c -c zb.186.nms 114.66.80.53 1.3.6.1.4.1.3375.2.2.5.4.3.1.11 | grep "50.52.53.6717"
// printf("command=%s\n",command);
ret=parse_status(command);
if(ret!=0) {
fprintf(stderr,"parse_status() error.\n");
}
// sum_conn=atoi(sum_conn_170_241)+atoi(sum_conn_170_243)+atoi(sum_conn_171_241)+atoi(sum_conn_171_243);
// sprintf(sum_conn_all,"%d",sum_conn);
/*
printf("sum_conn_170_245=%s\n",sum_conn_170_245);
printf("sum_conn_171_245=%s\n",sum_conn_171_245);
printf("sum_conn_all=%s\n",sum_conn_all);
*/
//status_information && performance_data
if(atoi(error_code)==0) {
if(!strcmp(http_code,"200") && atoi(size_download)>=response_size && atof(time_total)<2) {
exitstatus=OK;
sprintf(status_information,"http_code=%s, response_size=%s, response_time=%s", http_code,size_download,time_total);
sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
}
else if(!strcmp(http_code,"200") && atoi(size_download)<response_size && atof(time_total)<2 ) {
exitstatus=WARNING;
sprintf(status_information,"http_code=%s, response_size=%s, response_time=%s", http_code,size_download,time_total);
sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
}
else if(!strcmp(http_code,"200") && atoi(size_download)>=response_size && atof(time_total)>=2 && atof(time_total)<=6) {
exitstatus=WARNING;
sprintf(status_information,"http_code=%s, response_size=%s, response_time=%s", http_code,size_download,time_total);
sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
}
else if(strcmp(http_code,"200") || atoi(size_download)<=response_size && atof(time_total)>6) {
exitstatus=CRITICAL;
sprintf(status_information,"http_code=%s, response_size=%s, response_time=%s", http_code,size_download,time_total);
sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
}
}
else {
exitstatus=CRITICAL;
sprintf(status_information,"%s", error_string);
sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
}
//char http_code[10]={0};
//char size_download[10]={0};
//char time_total[10]={0};
//http_code=200,size_download=6340,time_total=0.382
printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
return exitstatus;
}