📄 tcpclient.c
字号:
#include <sys/types.h>#include <sys/param.h>#include <netdb.h>#include "sig.h"#include "exit.h"#include "sgetopt.h"#include "uint16.h"#include "fmt.h"#include "scan.h"#include "str.h"#include "ip4.h"#include "uint16.h"#include "socket.h"#include "fd.h"#include "stralloc.h"#include "buffer.h"#include "error.h"#include "strerr.h"#include "pathexec.h"#include "timeoutconn.h"#include "remoteinfo.h"#include "dns.h"#include "tcp.h"#define FATAL "tcpclient: fatal: "#define CONNECT "tcpclient: unable to connect to "void nomem(void){ strerr_die2x(111,FATAL,"out of memory");}void usage(void){ strerr_die1x(100,"tcpclient: usage: tcpclient \[ -hHrRdDqQv ] \[ -i localip ] \[ -p localport ] \[ -T timeoutconn ] \[ -l localname ] \[ -t timeoutinfo ] \host port program");}int verbosity = 1;int flagdelay = 1;int flagremoteinfo = 1;int flagremotehost = 1;unsigned long itimeout = 26;unsigned long ctimeout[2] = { 2, 58 };char iplocal[4] = { 0,0,0,0 };uint16 portlocal = 0;char *forcelocal = 0;char ipremote[4];uint16 portremote;char *hostname;static stralloc addresses;static stralloc moreaddresses;static stralloc tmp;static stralloc fqdn;char strnum[FMT_ULONG];char ipstr[IP4_FMT];char seed[128];main(int argc,char **argv){ unsigned long u; int opt; char *x; int j; int s; int cloop; char controllerip; unsigned long controllerport; dns_random_init(seed); close(6); close(7); sig_ignore(sig_pipe); while ((opt = getopt(argc,argv,"dDvqQhHrRi:p:t:T:l:")) != opteof) { switch(opt) { case 'd': flagdelay = 1; break; case 'D': flagdelay = 0; break; case 'v': verbosity = 2; break; case 'q': verbosity = 0; break; case 'Q': verbosity = 1; break; case 'l': forcelocal = optarg; break; case 'H': flagremotehost = 0; break; case 'h': flagremotehost = 1; break; case 'R': flagremoteinfo = 0; break; case 'r': flagremoteinfo = 1; break; case 't': scan_ulong(optarg,&itimeout); break; case 'T': j = scan_ulong(optarg,&ctimeout[0]); if (optarg[j] == '+') ++j; scan_ulong(optarg + j,&ctimeout[1]); break; case 'i': if (!ip4_scan(optarg,iplocal)) usage(); break; case 'p': scan_ulong(optarg,&u); printf("u is %d\n",u);portlocal = u; break; default: usage(); } } //argv += optind;printf("u is %d,argv is %s\n",u,argv[optind]);printf("u is %d,argv is %s\n",u,argv[optind+1]);scan_ulong(argv[optind+1],&controllerport); if (!verbosity) buffer_2->fd = -1;char result[2000];CallController(1,argv[optind],controllerport,30,"whoami",result,1999); }int CallController(int CollID, char* CollIP, int CollPort, int timeoutinseconds, char * command ,void * result, int resultmaxlength){ int servfd=GetsocketAndConn(CollIP,CollPort,30); if(servfd==-1) return -1; char line[1024]; strcpy(line,command); int strlength=strlen(line); line[strlength]='\n'; line[strlength+1]='\0'; int ret=writen(servfd,line,strlen(line)); printf("in callcoll:%d\n",ret); char ResultfileName[1024]; snprintf(ResultfileName,4,"%03d",CollID); strcat(ResultfileName,"_result.txt"); int nBytes; FILE *fp; fp=fopen(ResultfileName,"a"); while(readline(servfd,line,1023)) { //printf("read line ret is : %s----\n",line); fprintf(fp,"%s",line); if(strcmp(line,"End\n")==0) { printf("EndN\n");break; } } fclose(fp); }int GetsocketAndConn(char *ipaddr,int port,int timeout){ struct sockaddr_in servaddr; struct sockaddr_in localaddr; struct hostent *servhost = NULL; int servfd ; if(-1 == (servfd = socket(AF_INET, SOCK_STREAM, 0))) { myerror("tcpclient", "socket() error!\n"); return -1; } /* if (NULL == (servhost = gethostbyname("192.168.6.66"))) { myerror("tcpclient", "Specified host not exist\n"); return -1; } bzero(&localaddr, sizeof(localaddr)); localaddr.sin_family = AF_INET; localaddr.sin_port = 0; localaddr.sin_addr = *(struct in_addr *)servhost->h_addr; int ret=bind (servfd, (struct sockaddr *)&localaddr, sizeof(servaddr)); if(ret!=0) {printf("bind local addr error\n");}*/ printf( "before gethostbyname(relay), ipaddr = %s\n" ,ipaddr); if (NULL == (servhost = gethostbyname(ipaddr))) { myerror("tcpclient", "Specified host not exist\n"); return -1; } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; printf ("port is %d\n",port); servaddr.sin_port = htons(port); servaddr.sin_addr = *(struct in_addr *)servhost->h_addr; if (0 != connect(servfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) { fprintf(stderr, "connect() error\n"); return -1; } return servfd;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -