#include "SS5Main.h"
int Stat_Err( void );
int Stat_Menu( void );
int Stat_Conn( char *addr );
int Stat_Bind( char *addr );
int Stat_Udp( char *addr );
int Stat_Authen( char *addr );
int Stat_Author( char *addr );
int main( int argc, char *argv[] )
{
if( argc > 1 ) {
if( !strncmp(argv[1],"CONNECT",sizeof("CONNECT")) )
Stat_Conn( "127.0.0.1" );
else if( !strncmp(argv[1],"BIND",sizeof("BIND")) )
Stat_Bind( "127.0.0.1" );
else if( !strncmp(argv[1],"UDP",sizeof("UDP")) )
Stat_Udp( "127.0.0.1" );
else if( !strncmp(argv[1],"AUTHEN",sizeof("AUTHEN")) )
Stat_Authen( "127.0.0.1" );
else if( !strncmp(argv[1],"AUTHOR",sizeof("AUTHOR")) )
Stat_Author( "127.0.0.1" );
else
Stat_Err();
}
else
Stat_Menu();
return 0;
}
int Stat_Err( void )
{
printf("Content-type: text/html\n\n");
printf("<HTML> <HEAD> <TITLE>SS5 statistics manager</TITLE></HEAD>\n");
printf("<body> <hr>");
printf("<p><b> BAD parameter: </p> <br>");
printf("</BODY>\n</HTML>");
return 0;
}
int Stat_Menu( void )
{
printf("Content-type: text/html\n\n");
printf("<HTML> <HEAD> <TITLE>SS5 statistics manager menu</TITLE></HEAD>\n");
printf("<body>");
printf("<p><img src=/SS5Logo.jpg width=50 height=50 align=left><b> Statistics Manager Menu: </p> <hr> <br>");
printf("<p><LI type=square><b><a href=statmgr.cgi?CONNECT><font size=-1> CONNECT counters </font> </p>");
printf("<p><LI type=square><b><a href=statmgr.cgi?BIND><font size=-1> BIND counters </font> </p>");
printf("<p><LI type=square><b><a href=statmgr.cgi?UDP><font size=-1> UDP counters </font> </p>");
printf("<p><LI type=square><b><a href=statmgr.cgi?AUTHEN><font size=-1> AUTHEN counters </font> </p>");
printf("<p><LI type=square><b><a href=statmgr.cgi?AUTHOR><font size=-1> AUTHOR counters </font> </p>");
printf("</BODY>\n</HTML>");
return 0;
}
int Stat_Conn( char *addr )
{
unsigned long int v5tc,v4tc,v5nc,v4nc,v5fc,v4fc,v5cc,v4cc;
struct sockaddr_in da_sin;
int s;
char *buf="GET /counter=CONNECT HTTP/1.1";
char resp[32];
if ( (s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
return 1;
}
memset((char *)&da_sin, 0, sizeof(struct sockaddr_in));
da_sin.sin_family = AF_INET;
da_sin.sin_port = htons(1080);
da_sin.sin_addr.s_addr = inet_addr(addr);
if( connect(s,(struct sockaddr *)&da_sin,sizeof(struct sockaddr_in)) != -1 ) {
if( send(s,buf,strlen(buf),SS5_SEND_OPT) == -1) {
perror("Sending error: ");
return -1;
}
if( (recv(s,resp,sizeof(resp),0)) <= 0 ) {
perror("Receiving error: ");
return -1;
}
}
else
perror("Connecting error: ");
sscanf(resp,"%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n",&v5tc,&v4tc,&v5nc,&v4nc,&v5fc,&v4fc,&v5cc,&v4cc);
printf("Content-type: text/html\n\n");
printf("<HTML> <HEAD> <TITLE>SS5 statistics manager</TITLE></HEAD>\n");
printf("<body>");
printf("<p><img src=/SS5Logo.jpg width=50 height=50 align=left><b> CONNECT command counters: </p> <hr> <br>");
printf("<TABLE border=1; padding:0 cellpadding=2 cellspacing=2>\n");
printf("<tr><td><b>V4</td><td><b>Number</td><td><b>V5</td><td><b>Number</td></tr>\n");
printf("<tr><td>total</td><td>%lu</td><td>total</td><td>%lu</td></tr>",v4tc,v5tc);
printf("<tr><td>normal</td><td>%lu</td><td>normal</td><td>%lu</td></tr>",v4nc,v5nc);
printf("<tr><td>failed</td><td>%lu</td><td>failed</td><td>%lu</td></tr>",v4fc,v5fc);
printf("<tr><td>current</td><td>%lu</td><td>current</td><td>%lu</td></tr>",v4cc,v5cc);
printf("</TABLE>\n");
printf("</BODY>\n</HTML>");
return 0;
}
int Stat_Bind( char *addr )
{
unsigned long int v5tb,v4tb,v5nb,v4nb,v5fb,v4fb,v5cb,v4cb;
struct sockaddr_in da_sin;
int s;
char *buf="GET /counter=BIND HTTP/1.1";
char resp[32];
if ( (s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
return 1;
}
memset((char *)&da_sin, 0, sizeof(struct sockaddr_in));
da_sin.sin_family = AF_INET;
da_sin.sin_port = htons(1080);
da_sin.sin_addr.s_addr = inet_addr(addr);
if( connect(s,(struct sockaddr *)&da_sin,sizeof(struct sockaddr_in)) != -1 ) {
if( send(s,buf,strlen(buf),SS5_SEND_OPT) == -1) {
perror("Sending error: ");
return -1;
}
if( (recv(s,resp,sizeof(resp),0)) <= 0 ) {
perror("Receiving error: ");
return -1;
}
}
else
perror("Connecting error: ");
sscanf(resp,"%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n",&v5tb,&v4tb,&v5nb,&v4nb,&v5fb,&v4fb,&v5cb,&v4cb);
printf("Content-type: text/html\n\n");
printf("<HTML> <HEAD> <TITLE>SS5 statistics manager</TITLE></HEAD>\n");
printf("<body>");
printf("<p><img src=/SS5Logo.jpg width=50 height=50 align=left><b> BIND command counters: </p> <hr> <br>");
printf("<TABLE border=1; padding:0 cellpadding=2 cellspacing=2>\n");
printf("<tr><td><b>V4</td><td><b>Number</td><td><b>V5</td><td><b>Number</td></tr>\n");
printf("<tr><td>total</td><td>%lu</td><td>total</td><td>%lu</td></tr>",v4tb,v5tb);
printf("<tr><td>normal</td><td>%lu</td><td>normal</td><td>%lu</td></tr>",v4nb,v5nb);
printf("<tr><td>failed</td><td>%lu</td><td>failed</td><td>%lu</td></tr>",v4fb,v5fb);
printf("<tr><td>current</td><td>%lu</td><td>current</td><td>%lu</td></tr>",v4cb,v5cb);
printf("</TABLE>\n");
printf("</BODY>\n</HTML>");
return 0;
}
int Stat_Udp( char *addr )
{
unsigned long int v5tu,v5nu,v5fu,v5cu;
struct sockaddr_in da_sin;
int s;
char *buf="GET /counter=UDP HTTP/1.1";
char resp[32];
if ( (s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
return 1;
}
memset((char *)&da_sin, 0, sizeof(struct sockaddr_in));
da_sin.sin_family = AF_INET;
da_sin.sin_port = htons(1080);
da_sin.sin_addr.s_addr = inet_addr(addr);
if( connect(s,(struct sockaddr *)&da_sin,sizeof(struct sockaddr_in)) != -1 ) {
if( send(s,buf,strlen(buf),SS5_SEND_OPT) == -1) {
perror("Sending error: ");
return -1;
}
if( (recv(s,resp,sizeof(resp),0)) <= 0 ) {
perror("Receiving error: ");
return -1;
}
}
else
perror("Connecting error: ");
sscanf(resp,"%lu\n%lu\n%lu\n%lu\n",&v5tu,&v5nu,&v5fu,&v5cu);
printf("Content-type: text/html\n\n");
printf("<HTML> <HEAD> <TITLE>SS5 statistics manager</TITLE></HEAD>\n");
printf("<body>");
printf("<p><img src=/SS5Logo.jpg width=50 height=50 align=left><b> UDP command counters: </p> <hr> <br>");
printf("<TABLE border=1; padding:0 cellpadding=2 cellspacing=2>\n");
printf("<tr><td><b>V5</td><td><b>Number</td></tr>\n");
printf("<tr><td>total</td><td>%lu</td></tr>",v5tu);
printf("<tr><td>normal</td><td>%lu</td></tr>",v5nu);
printf("<tr><td>failed</td><td>%lu</td></td></tr>",v5fu);
printf("<tr><td>current</td><td>%lu</td></tr>",v5cu);
printf("</TABLE>\n");
printf("</BODY>\n</HTML>");
return 0;
}
int Stat_Authen( char *addr )
{
unsigned long int taf,tae,tap,naf,nae,nap,faf,fae,fap,caf,cae,cap;
struct sockaddr_in da_sin;
int s;
char *buf="GET /counter=AUTHEN HTTP/1.1";
char resp[32];
if ( (s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
return 1;
}
memset((char *)&da_sin, 0, sizeof(struct sockaddr_in));
da_sin.sin_family = AF_INET;
da_sin.sin_port = htons(1080);
da_sin.sin_addr.s_addr = inet_addr(addr);
if( connect(s,(struct sockaddr *)&da_sin,sizeof(struct sockaddr_in)) != -1 ) {
if( send(s,buf,strlen(buf),SS5_SEND_OPT) == -1) {
perror("Sending error: ");
return -1;
}
if( (recv(s,resp,sizeof(resp),0)) <= 0 ) {
perror("Receiving error: ");
return -1;
}
}
else
perror("Connecting error: ");
sscanf(resp,"%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n",&taf,&tae,&tap,&naf,&nae,&nap,&faf,&fae,&fap,&caf,&cae,&cap);
printf("Content-type: text/html\n\n");
printf("<HTML> <HEAD> <TITLE>SS5 statistics manager</TITLE></HEAD>\n");
printf("<body>");
printf("<p><img src=/SS5Logo.jpg width=50 height=50 align=left><b> AUTHENTICATION counters: </p> <hr> <br>");
printf("<TABLE border=1; padding:0 cellpadding=2 cellspacing=2>\n");
printf("<tr><td><b>File</td><td><b>Number</td><td><b>EAP</td><td><b>Number</td><td><b>PAM</td><td><b>Number</td></tr>\n");
printf("<tr><td>total</td><td>%lu</td><td>total</td><td>%lu</td><td>total</td><td>%lu</td></tr>",taf,tae,tap);
printf("<tr><td>normal</td><td>%lu</td><td>normal</td><td>%lu</td><td>normal</td><td>%lu</td></tr>",naf,nae,nap);
printf("<tr><td>failed</td><td>%lu</td><td>failed</td><td>%lu</td><td>failed</td><td>%lu</td></tr>",faf,fae,fap);
printf("<tr><td>current</td><td>%lu</td><td>current</td><td>%lu</td><td>current</td><td>%lu</td></tr>",caf,cae,cap);
printf("</TABLE>\n");
printf("</BODY>\n</HTML>");
return 0;
}
int Stat_Author( char *addr )
{
unsigned long int taf,tal,naf,nal,faf,fal,caf,cal;
struct sockaddr_in da_sin;
int s;
char *buf="GET /counter=AUTHEN HTTP/1.1";
char resp[32];
if ( (s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
return 1;
}
memset((char *)&da_sin, 0, sizeof(struct sockaddr_in));
da_sin.sin_family = AF_INET;
da_sin.sin_port = htons(1080);
da_sin.sin_addr.s_addr = inet_addr(addr);
if( connect(s,(struct sockaddr *)&da_sin,sizeof(struct sockaddr_in)) != -1 ) {
if( send(s,buf,strlen(buf),SS5_SEND_OPT) == -1) {
perror("Sending error: ");
return -1;
}
if( (recv(s,resp,sizeof(resp),0)) <= 0 ) {
perror("Receiving error: ");
return -1;
}
}
else
perror("Connecting error: ");
sscanf(resp,"%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n", &taf,&tal,&naf,&nal,&faf,&fal,&caf,&cal);
printf("Content-type: text/html\n\n");
printf("<HTML> <HEAD> <TITLE>SS5 statistics manager</TITLE></HEAD>\n");
printf("<body>");
printf("<p><img src=/SS5Logo.jpg width=50 height=50 align=left><b> AUTHORIZATION counters: </p> </hr> <br>");
printf("<TABLE border=1; padding:0 cellpadding=2 cellspacing=2>\n");
printf("<tr><td><b>File</td><td><b>Number</td><td><b>Ldap</td><td><b>Number</td></tr>\n");
printf("<tr><td>total</td><td>%lu</td><td>total</td><td>%lu</td></tr>",taf,tal);
printf("<tr><td>normal</td><td>%lu</td><td>normal</td><td>%lu</td></tr>",naf,nal);
printf("<tr><td>failed</td><td>%lu</td><td>failed</td><td>%lu</td></tr>",faf,fal);
printf("<tr><td>current</td><td>%lu</td><td>current</td><td>%lu</td></tr>",caf,cal);
printf("</TABLE>\n");
printf("</BODY>\n</HTML>");
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1