客户端
vi grep_client.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include <time.h>
#define MYPORT 10009
#define HISPORT 10010
#define IP_COUNT 13
// 2011-09-18
// msn: xorg@163.com
// client: ver0.1
struct packet {
char data[1024];
};
void query_log(char *ip,char *phone) {
int sd,sd2,newsd,ret;
struct packet pkt;
struct sockaddr_in my_end,his_end;
int his_end_len;
time_t timep;
struct tm *tp;
char nowtime[128];
pid_t pid;
timep=time(NULL);
tp=localtime(&timep);
sprintf(nowtime,"%d-%02d-%02d-%02d-%02d-%02d",1900+tp->tm_year,(1+tp->tm_mon),tp->tm_mday,tp->tm_hour,tp->tm_min,tp->tm_sec);
printf("%s\n",nowtime);
pid=fork();
if(pid==-1) {
fprintf(stderr,"fork() error.\n");
exit(-1);
}
if(pid==0) {
//-- send phone number
sd2=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"socket error.\n");
exit(-1);
}
his_end.sin_family=AF_INET;
his_end.sin_port=htons(HISPORT);
//his_end.sin_addr.s_addr=inet_addr("10.199.75.169");
his_end.sin_addr.s_addr=inet_addr(ip);
ret=connect(sd2,(struct sockaddr *)&his_end,sizeof(his_end));
if(ret==-1) {
perror("connect()");
exit(-1);
}
ret=write(sd2,phone,strlen(phone));
if(ret==-1) {
fprintf(stderr,"write error.\n");
exit(-1);
}
printf("client write %d bytes.\n\n",ret);
close(sd);
// printf("\n\n");
exit(0);
}
else {
//-- receve file name
sd=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"socket error.\n");
exit(-1);
}
my_end.sin_family=AF_INET;
my_end.sin_port=htons(MYPORT);
my_end.sin_addr.s_addr=inet_addr("0.0.0.0");
int flag=1,len=sizeof(int);
ret=setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&flag,len);
if(ret==-1) {
fprintf(stderr,"setsockopt() error.\n");
}
ret=bind(sd,(struct sockaddr *)&my_end,sizeof(my_end));
if(ret==-1) {
fprintf(stderr,"bind() error.\n");
exit(-1);
}
ret=listen(sd,5);
if(ret==-1) {
fprintf(stderr,"listen() error.\n");
exit(-1);
}
his_end_len=sizeof(his_end);
while(1) {
newsd=accept(sd,(struct sockaddr *)&his_end,&his_end_len);
if(newsd==-1) {
perror("accept()");
exit(-1);
}
ret=read(newsd,&pkt,sizeof(pkt));
if(ret==-1) {
fprintf(stderr,"read error.\n");
exit(-1);
}
(pkt.data)[ret]='\0';
// printf("server read %d bytes, recv=\n%s\n",ret,pkt.data);
if(strcmp(ip,"10.199.81.164"))
printf("server read %d bytes:\n%s\n\n",ret,pkt.data);
else
printf("server read %d bytes:\n%s\n",ret,pkt.data);
ret=close(newsd);
if(ret==-1) {
fprintf(stderr,"close() error.\n");
close(sd);
exit(-1);
}
// exit process
ret=close(sd);
if(ret==-1) {
fprintf(stderr,"close() error.\n");
exit(-1);
}
return;
}
}
}
int main(int argc,char *argv[]) {
int i;
char *array_ip[IP_COUNT]={"10.199.81.152","10.199.81.153","10.199.81.154","10.199.81.155","10.199.81.156","10.199.81.157","10.199.81.158"
,"10.199.81.159","10.199.81.160","10.199.81.161","10.199.81.162","10.199.81.163","10.199.81.164"};
if(argc<2) {
printf("%s phone_num\n",argv[0]);
exit(-1);
}
for(i=0;i<IP_COUNT;i++)
query_log(array_ip[i],argv[1]);
exit(0);
}
服务端
vi grep_server-2011-09-21.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#define MYPORT 8800
#define HISPORT 10009
#define LOGFILE "/home/mtvwap/file.log"
//#define LOGFILE "/home/uniadmin/test/logfile.log"
// 2011-09-18
// msn: xorg@163.com
// server: ver0.1
struct packet {
char data[64];
};
int main() {
FILE *file,*fp_log;
char cmd[512];
char line[1024];
char data[2048];
char hostname[128];
time_t timep;
struct tm *tp;
char nowtime[128];
//--
/*
pid_t pid;
int fd;
pid=fork();
if(pid==-1) {
perror("fork()");
exit(-1);
}
if(pid!=0)
exit(0);
else {
fd=open("/dev/null",O_RDONLY);
if(fd==-1) {
perror("open()");
} else {
close(STDIN_FILENO);
dup(fd);
close(fd);
}
fd=open("/dev/null",O_WRONLY);
if(fd==-1) {
perror("open()");
} else {
close(STDOUT_FILENO);
dup(fd);
close(STDERR_FILENO);
dup(fd);
close(fd);
}
setsid();
chdir("/");
}
*/
//--
gethostname(hostname,sizeof(hostname));
printf("%s\n",hostname);
int sd,sd2,newsd,ret;
struct sockaddr_in my_end,his_end;
int his_end_len;
struct packet pkt;
sd=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"socket error.\n");
// exit(-1);
}
// my_end
my_end.sin_family=AF_INET;
my_end.sin_port=htons(MYPORT);
my_end.sin_addr.s_addr=inet_addr("0.0.0.0");
// my_end.sin_addr.s_add=INADDR_ANY;
int flag=1,len=sizeof(int);
ret=setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&flag,len);
if(ret==-1) {
fprintf(stderr,"setsockopt() error.\n");
}
ret=bind(sd,(struct sockaddr *)&my_end,sizeof(my_end));
if(sd==-1) {
fprintf(stderr,"socket error.\n");
exit(-1);
}
ret=listen(sd,5);
if(ret==-1) {
fprintf(stderr,"sd listen error.\n");
fprintf(fp_log,"%s","listen() error.\n");
exit(-1);
}
his_end_len=sizeof(his_end);
while(1) {
newsd=accept(sd,(struct sockaddr *)&his_end,&his_end_len);
if(newsd==-1) {
perror("accept()");
// exit(-1);
}
printf("accept ok\n");
printf("his_end=%s\n",inet_ntoa(his_end.sin_addr));
ret=read(newsd,&pkt,sizeof(pkt));
if(ret==-1) {
fprintf(stderr,"read error.\n");
fprintf(fp_log,"%s","newsd read() error.\n");
// exit(-1);
}
//else continue;
(pkt.data)[ret]='\0';
printf("read newsd ok\n");
// log file
fp_log=fopen(LOGFILE,"a+");
if(fp_log==NULL) {
fprintf(stderr,"fopen() error.\n");
// exit(-1);
}
printf("fopen ok\n");
timep=time(NULL);
tp=localtime(&timep);
sprintf(nowtime,"\n\n%d-%02d-%02d-%02d-%02d-%02d",1900+tp->tm_year,(1+tp->tm_mon),tp->tm_mday,tp->tm_hour,tp->tm_min,tp->tm_sec);
fprintf(fp_log,"%s\n",nowtime);
fprintf(fp_log,"%s\n",hostname);
printf("server read %d bytes, recv=%s\n",ret,pkt.data);
fprintf(fp_log,"server read %d bytes, recv=%s\n",ret,pkt.data);
// log file
// -----------
// sprintf(cmd,"%s","cd /home/mtvwap/portal_wap/logs/server ; grep -l 18635529831 server*");
sprintf(cmd,"cd /home/mtvwap/portal_wap/logs/server ; grep -l %s server*",pkt.data);
printf("cmd=%s\n",cmd);
if(strstr(cmd,"\n")) {
printf("warn:cmd is have enter, to restart.\n\n");
continue;
}
file=popen(cmd,"r");
if(file!=NULL) {
sprintf(data,"%s\n",hostname);
while(fgets(line,1023,file)!=NULL) {
// printf("%s",line);
// strcpy(data,hostname);
strcat(data,line);
// strcat(data,"\n");
}
}
strcat(data,"----------------");
printf("popen ok\n");
pclose(file);
printf("pclose ok\n");
// -----------
/*
if(strstr(pkt.data,"hello"))
printf("execute script.\n");
else
printf("no execute script.\n");
*/
//--
sleep(2);
sd2=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"socket error.\n");
fprintf(fp_log,"%s","sd2 socket() error.\n");
// exit(-1);
}
printf("socket sd2 ok\n");
// his_end
his_end.sin_family=AF_INET;
his_end.sin_port=htons(HISPORT);
// his_end.sin_addr.s_addr=inet_addr("10.199.81.166");
his_end.sin_addr.s_addr=his_end.sin_addr.s_addr;
ret=connect(sd2,(struct sockaddr *)&his_end,sizeof(his_end));
if(ret==-1) {
perror("connect()");
fprintf(fp_log,"%s\n","sd2 connect() error.");
fclose(fp_log);
printf("sd2 connect() stop, to restart.\n\n");
continue;
// exit(-1);
}
printf("connect ok\n");
ret=write(sd2,data,strlen(data));
if(ret==-1) {
fprintf(stderr,"write error.\n");
fprintf(fp_log,"%s\n","write error.");
// exit(-1);
}
printf("write ok\n");
printf("\nclient write %d bytes .\nstr=%s\n",ret,data);
// log file
fprintf(fp_log,"client write %d bytes.\n",ret);
fprintf(fp_log,"%s\n\n","Ok!! grep success...");
ret=fclose(fp_log);
if(ret==EOF) {
fprintf(stderr,"fclose() error.\n");
// exit(-1);
}
printf("fclose ok\n");
// end log file
//--
printf("\n");
close(newsd);
close(sd2);
}
close(sd);
exit(0);
}