⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reverse_telnet.c

📁 ICS 课程的Lab8
💻 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 + -