📄 reverse_telnet.c
字号:
/* Blake Scholl * bscholl@andrew.cmu.edu * * a "reverse telnet" implementation for * investigating the behavior of HTTP clients * * *//********** Includes *********/#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#include <sys/time.h>#include <unistd.h>#include <fcntl.h>#include <arpa/inet.h>#include <ctype.h>#include <signal.h>int main(int argc, char *argv[]){ int listenFD; int connFD; int on = 1; fd_set readFDs; int retval; struct sockaddr_in local; /* local socket addr */ short portnum; struct sockaddr_in remote_addr; int len; if(argc != 2) { printf("Usage: %s <port number>\n", argv[0]); exit(0); } portnum = atoi(argv[1]); printf("Attempting to listen on port %d.\n", portnum);/* open up a TCP socket */ listenFD = socket(AF_INET, SOCK_STREAM, 0); /* try and reuse address */ if (setsockopt(listenFD, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) < 0) { fprintf(stderr, "Findsplitter: Error setting SO_REUSEADDR.\n"); } local.sin_family = AF_INET; local.sin_port = htons(portnum); local.sin_addr.s_addr = INADDR_ANY; bzero(&(local.sin_zero),8); retval = bind(listenFD, (struct sockaddr *) &local, sizeof(struct sockaddr)); if(retval == -1) { fprintf(stderr, "Error binding socket.\n"); exit(1); } /* Listen for inbound connections */ if(listen(listenFD, 10) == -1) { fprintf(stderr, "Unable to listen.\n"); exit(1); } connFD = accept(listenFD, (struct sockaddr *) &remote_addr, &len); printf("%s: Got a connection: FD #%d\n", argv[0], connFD); while(1) { FD_ZERO(&readFDs); FD_SET(connFD, &readFDs); FD_SET(0, &readFDs); if( select(connFD+1, &readFDs, NULL, NULL, NULL)) { if(FD_ISSET(connFD, &readFDs)) { char buf[4096]; int bytes; bytes = recv(connFD, (void *) buf, 4096, 0); if(bytes != ECONNRESET && bytes!=0) { buf[bytes] =0; printf("%s", buf); } } if(FD_ISSET(0, &readFDs)) { char buf[4096]; int bytes; bytes = read(0, (void *) buf, 4096); if(bytes != ECONNRESET && bytes!=0) { buf[bytes] =0; write(connFD, buf, strlen(buf) +1); } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -