vi check_nrpe_wss_login.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <sys/select.h>
#define OK 0
#define WARNING 1
#define CRITICAL 2
#define UNKNOWN 3
//#define LEN 1023
#define LEN 4000
#define HIS_PORT 80
//#define HIS_IPADDR "114.66.80.122"
#define HIS_IPADDR "114.66.80.126"
//second
int sec_num=0;
//cookie
char Cookie_JSESSIONID[LEN];
//safe sleep
void safe_sleep(unsigned int sec) {
while(sec=sleep(sec));
}
int get_url(char url_request[LEN],char url_response[LEN]) {
int ret,i;
// char readbuf[40960];
char readbuf[LEN];
int mark=0;
char *p,*str;
fd_set rfds;
struct timeval time;
int sd;
struct sockaddr_in his_end;
// printf("------------------------------\n");
// printf("%s\n",url_request);
sd=socket(AF_INET,SOCK_STREAM,0);
printf("------------------------sd=%d\n",sd);
if(sd==-1) {
fprintf(stderr,"socket error.\n");
return -1;
}
his_end.sin_family=AF_INET;
his_end.sin_port=htons(HIS_PORT);
his_end.sin_addr.s_addr=inet_addr(HIS_IPADDR);
ret=connect(sd,(struct sockaddr *)&his_end,sizeof(his_end));
if(ret==-1) {
perror("connect()");
return -1;
}
//send data
ret=write(sd,url_request,strlen(url_request));
if(ret<0) {
perror("write() error");
return -1;
}
else {
// printf("client write %d bytes .\n",ret);
}
while(1) {
memset(readbuf,0,LEN);
FD_ZERO(&rfds);
FD_SET(sd,&rfds);
time.tv_sec=1;
time.tv_usec=0;
ret=select(sd+1,&rfds,NULL,NULL,&time);
if(ret<0) {
fprintf(stderr,"select() error,ret=%d.\n",ret);
return -1;
// continue;
}
else if(ret>0) {
ret=read(sd,readbuf,LEN);
if(ret<0){
fprintf(stderr,"read() error.\n");
return -1;
// close(sd);
return -1;
}
else if(ret>0) {
printf("readbuf start--------------------\n");
// printf("%s\n",readbuf);
// strcpy(url_response,readbuf);
strcat(url_response,readbuf);
printf("readbuf end--------------------\n");
}
else {
break;
}
// printf("------------------test---------------------\n");
/*
// for(p=strtok(readbuf,"^M$\r\n");p;p=strtok(NULL,"^M$\r\n")) {
for(p=strtok(readbuf,"\r\n");p;p=strtok(NULL,"\r\n")) {
str=p;
mark++;
// if(mark==13)
if(mark==7)
break;
}
// printf("%s\n",str);
strcpy(url_response,str);
*/
// break;
// }
}
else {
sec_num++;
// break;
}
// sleep(2);
}
ret=close(sd);
if(ret==-1) {
fprintf(stderr,"close() error.\n");
return -1;
}
return 0;
}
int parse_url(char get_url_respons[LEN]) {
int ret;
int mark=0;
char *p,*str;
char readbuf[LEN];
char readbuf_cookie[LEN];
strcpy(readbuf,get_url_respons);
/*
for(p=strtok(readbuf,"\r\n");p;p=strtok(NULL,"\r\n")) {
str=p;
mark++;
*/
if(str=strstr(readbuf,"Set-Cookie: JSESSIONID=")) {
// printf("1111111111111111111111\n");
ret=sscanf(str,"Set-Cookie: JSESSIONID=%32s;",Cookie_JSESSIONID);
// printf("ret=%d\n",ret);
// sscanf(str,"Set-Cookie: JSESSIONID=%[^;]",JSESSIONID);
// for(p=strtok(get_url_respons,"=;");p;p=strtok(NULL,"=;")) {
}
/*
// if(mark==13)
if(mark==7) {
strcpy(readbuf_cookie,str);
for(p=strtok(get_url_respons,"=;");p;p=strtok(NULL,"=;")) {
}
break;
}
*/
// }
printf("JSESSIONID=%s\n",JSESSIONID);
return 0;
}
int main(int argc, char *argv[]) {
int ret,i;
int exitstatus=OK;
char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};
char status_information[LEN];
char performance_data[LEN];
//------------------------------------------------------------------------------
//wss login.action
char http_url_login_action_request[LEN];
char http_url_login_action_response[LEN];
memset(http_url_login_action_request,0,LEN);
memset(http_url_login_action_response,0,LEN);
strcat(http_url_login_action_request,"POST /csp/login/login.action HTTP/1.1\n");
strcat(http_url_login_action_request,"Accept: image/jpeg, image/gif, image/pjpeg, */*\n");
strcat(http_url_login_action_request,"Referer: http://114.66.80.122/csp/login/init.action\n");
strcat(http_url_login_action_request,"Accept-Language: zh-CN\n");
strcat(http_url_login_action_request,"User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727)\n");
strcat(http_url_login_action_request,"Content-Type: application/x-www-form-urlencoded\n");
strcat(http_url_login_action_request,"Accept-Encoding: gzip, deflate\n");
strcat(http_url_login_action_request,"Host: 114.66.80.122\n");
strcat(http_url_login_action_request,"Content-Length: 31\n");
strcat(http_url_login_action_request,"Connection: Keep-Alive\n");
strcat(http_url_login_action_request,"Cache-Control: no-cache\n");
strcat(http_url_login_action_request,"Cookie: JSESSIONID=337E3862BB20E7B21C298CB923061A07\n\r\n");
strcat(http_url_login_action_request,"username=XXXXXX&password=xxxxxx");
printf("login.action request=%s",http_url_login_action_request);
printf("\n----------------------------------------------------------\n");
//get_url
ret=get_url(http_url_login_action_request,http_url_login_action_response);
if(ret!=0) {
printf("get_url ret=%d\n",ret);
fprintf(stderr,"get_url() error.\n");
}
printf("login.action response=%s\n",http_url_login_action_response);
printf("\n----------------------------------------------------------\n");
//parse_url
ret=parse_url(http_url_login_action_response);
if(ret!=0) {
fprintf(stderr,"parse_url() error.\n");
}
printf("JSESSIONID=%s\n",Cookie_JSESSIONID);
printf("\n----------------------------------------------------------\n");
printf("\n----------------------------------------------------------\n");
//------------------------------------------------------------------------------
//get_url
if(strlen(http_url_login_action_response)>32 && sec_num<=5) {
// printf("login ok, sec_sum=0\n",sec_num);
exitstatus=OK;
sprintf(status_information,"WSS Login Time_sec=%d, JSESSIONID=%s",sec_num,Cookie_JSESSIONID);
sprintf(performance_data,"Login_Time_Sec=%d;;;;",sec_num);
}
else if(strlen(http_url_login_action_response)>32 && sec_num>5 && sec_num<=10) {
// printf("warning, login ok, sec_num=0\n",sec_num);
exitstatus=WARNING;
sprintf(status_information,"WSS Login Time_sec=%d, JSESSIONID=%s",sec_num,Cookie_JSESSIONID);
sprintf(performance_data,"Login_Time_Sec=%d;;;;",sec_num);
}
// else if(sec_num<=20) {
else {
// printf("critical, login error, sec_num=0\n",sec_num);
exitstatus=CRITICAL;
sprintf(status_information,"WSS Login Time_sec=%d, JSESSIONID=%s",sec_num,Cookie_JSESSIONID);
sprintf(performance_data,"Login_Time_Sec=%d;;;;",sec_num);
}
printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
return exitstatus;
}