#include #include #include #include #include #include #include #include #include #include "utils.h" #define BUFSIZE 1024 int get_line_soc(int s,char *buffer,int length,int flags) { char c; int l = 0; int ret = 0; fprintf(stderr,"get_line_soc: start %x\n",flags); while(l < (length - 1) && c != '\n' && ret != -1) { ret = recv(s,&c,1,flags); if (ret == 1) { (*buffer) = c; ++buffer; ++l; putc(c,stdout); fflush(stdout); } else { *buffer = '\0'; fprintf(stderr,"get_line_soc: EAGAIN\n"); return EAGAIN; } } *buffer = '\n'; ++buffer; *buffer = '\0'; fprintf(stderr,"get_line_soc: end\n"); if (ret == -1) { return EOF; } else { return l + 2; } } void *rcon_command(int s, char *buffer, struct sockaddr *addr, int addr_len, char *password, char *command) { char *temp = NULL; sprintf(buffer,"˙˙˙˙challenge rcon\n"); sendto(s,buffer,(strlen(buffer) + 1),0,addr,addr_len); recv(s,buffer,BUFSIZE,0); chomp(buffer,strlen(buffer)); temp = word(buffer,3); sprintf(buffer,"˙˙˙˙rcon %s \"%s\" %s",temp,password,command); sendto(s,buffer,(strlen(buffer) + 1),0,addr,addr_len); recv(s,buffer,BUFSIZE,0); free(temp); } int main(int argc, char *argv[]) { int main_soc; int result; int port = 33333; char *temp; char password[] = "mouse"; char buffer_data1[BUFSIZE]; char buffer_data2[BUFSIZE]; char *buffer = buffer_data1; char *buffer2 = buffer_data2; struct sockaddr_in addr; struct sockaddr_in ret; struct hostent *host; struct hostent *hext; struct in_addr inaddr; host = gethostbyname("eden"); main_soc = socket(PF_INET,SOCK_DGRAM,0); memcpy(&addr.sin_addr.s_addr,host->h_addr_list[0],host->h_length); addr.sin_family = AF_INET; addr.sin_port = htons(27015); gethostname(buffer,BUFSIZE); //hext = gethostbyname(buffer); ret.sin_family = AF_INET; ret.sin_port = htons(port); inet_aton("0.0.0.0",&ret.sin_addr); //inaddr.s_addr = *hext->h_addr_list[0]; //printf("%x,%d\n",*hext->h_addr_list[0],hext->h_length); bind(main_soc,(struct sockaddr *)&ret,sizeof(ret)); sprintf(buffer2,"logaddress %s %d", buffer,port); rcon_command(main_soc,buffer, (struct sockaddr *)&addr,sizeof(addr),password,"log on"); rcon_command(main_soc,buffer, (struct sockaddr *)&addr,sizeof(addr),password,buffer2); while(recv(main_soc,buffer,BUFSIZE,0)) { printf("%s",buffer); } return 0; }