ÇÁ·Î±×·¡¹Ö

 3204, 1/161 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   macgeriii
   ¾Æ »ðÁú¿¡ ÁöÃÄ ÀÌ·¸°Ô µµ¿òÀ» ¿äûÇÕ´Ï´Ù..

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=1089 [º¹»ç]


Á¦°¡ ¼ÒÄÏ °øºÎÇϸ鼭 ÀÛÀº ÇÁ·Î±×·¥ Çϳª °øºÎ¿ëÀ¸·Î Â¥º¼·Á°í Çϴµ¥ À߾ȵ˴ϴÙ..



ÀÌ·± °£´ÜÇÑ °Íµµ Àß ¾ÈµÇ´Ï.. ¾Æ °è¼Ó »ðÁú ÇÏ´Ù Àß ¾ÈµÇ¼­ ¿©Â庾´Ï´Ù..



Äڵ尡 Á¶ÀâÇϽôõ¶óµµ ÀÌÇØÇØÁÖ¼¼¿ä... ¤Ð.¤Ð



ÇÁ·Î±×·¥ÀÌ µ¹¾Æ°¡´Â Çü½ÄÀº ¸ÕÀú... ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®¸¦ ½ÇÇà½ÃÅ°¸é..



¼­¹ö°¡ id¿Í Æнº¿öµå¸¦ ¹¯½À´Ï´Ù



Æнº¿öµå¿Í id °¡ ¸ÂÀ¸¸é ½ÇÇàÇÒ ¸í·É¾î¸¦ º¸³»ÁÝ´Ï´Ù ¼­¹ö°¡,.



¸í·É¾î¶óµµ ÇغÃÀÚ.. quit, ¶û process <-- ¸Þ½ÃÁö ÀоîÁÖ°í ¸Þ½ÃÁö ÀúÀå½ÃÄÑÁÖ´ÂÇÔ¼ö



ÀÌ°Ô ÀüºÎÀÔ´Ï´Ù..



±×¸®°í Ŭ¶óÀ̾ðÆ®°¡ play process ¶ó°í ÇÏ¸é ¶Ç ¸Þ½ÃÁö¸¦ ÀԷ½Ãų²¨³Ä Ãâ·Â½Ãų²¨³Ä°í



º¸³»ÁÝ´Ï´Ù.. Ŭ¶óÀ̾ðÆ®¿¡..



ÀÌ°Ô ÀüºÎÀÔ´Ï´Ù.. ±Ùµ¥  ¼­¹ö µ¹¸®°í Ŭ¶óÀ̾ðÆ®·Î ½ÇÇà½ÃÅ°¸é..



INPUT ID: <-- ¿©±â¼­ ¾ÆÀ̵𸸠ÀÔ·ÂÇÏ¸é ¾ÆÀ̵𰡠¾È¸Â´Â´Ù´Â¼Ò¸®¿ÍÇÔ²² Á¾·áµÇ¾î¹ö¸³´Ï´Ù.



¹®Á¦´Â ±×°Ô ¾Æ´Ï¶ó ¼­¹ö¿¡¼­µµ accept ¿¡·¯ Ç¥½Ã¿ÍÇÔ°Ô Á¾·áµÇ¾î ¹ö¸³´Ï´Ù!!



Á¦»ý°¢¿¡¼­ Æ÷Å©ÇÔ¼ö·Î ÇÁ·Î¼¼½º »ý¼ºÇÒ¶§ ¹¹°¡ À߸øµÈ°Í °°½À´Ï´Ù!



°í¼ö´ÔµéÀÌ Á» µµ¿ÍÁÖ¼¼¿ä ¤Ð.¤Ð



Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö ¼Ò½º ¿Ã¸³´Ï´Ù.. Çѹø ½ÇÇàÇغ¸½Ã¸é ¹«½¼¶æÀÎÁö ¾Æ½Ç²®´Ï´Ù.!!



¼­¹öÀÖ´Â µð·ºÅ丮¿¡ id.txt ÆÄÀÏ»ý¼ºÇؼ­ °Å±â¿¡ ¾ÆÀ̵ð¾Æ¹«°Å³ª Çϳª¶û ºñ¹Ð¹øÈ£ Çϳª Àû¾îÁÖ½Ã¸é µË´Ï´Ù.. ¤Ð.¤Ð











¼­¹ö ¼Ò½º :





#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/wait.h>


#define BUFSIZE 100
#define DEFULT_PORT 9999

void error_handling(char *); //¿¡·¯¸¦ ó¸®ÇÔ¼ö
void process(int,char *);    //¼ºÀûó¸®ÇÔ¼ö
int id_check(char *,char *); //¾ÆÀ̵ðüũÇÔ¼ö
void z_handler(int sig);     //Á»ºñÇÁ·Î¼¼½º¸¦Ã³¸®ÇÏ´ÂÇÔ¼ö

fd_set reads,temps;  //select
int fd_max;
struct timeval timeout;


int main(int argc, char **argv)
{

struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
int serv_sock;
int clnt_sock;
int clnt_addr_len;
int str_len;
int port;

char recv_buf[BUFSIZE];
char send_buf[BUFSIZE];
char cmd[2][BUFSIZE];

struct sigaction act; //ÇÁ·Î¼¼½º»ý¼º°ü·Ã ÇÔ¼ö...
pid_t pid;
int state;


  
act.sa_handler = z_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;

state = sigaction(SIGCHLD, &act, 0);

if (state != 0){
  error_handling("sig error");
}


if (argc == 2){
  port = atoi(argv[1]);
}else port = DEFULT_PORT;


if( (serv_sock = socket(PF_INET, SOCK_STREAM, 0))==-1) //¼ÒÄÏ»ý¼º
  error_handling("socket error");


memset(&serv_addr,0,sizeof(serv_addr)); //¾ÆÀÌÇÇÁÖ¼Ò¹× Æ÷Æ® ¼³Á¤
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(port);

if((bind(serv_sock, (struct sockaddr*)&serv_addr,              /¹ÙÀεåÇÔ¼öÀû¿ë
     sizeof(serv_addr))) == -1)
  error_handling("bind error");

listen(serv_sock,5);

FD_ZERO(&reads);    //fd_set ÀÚ·áÇüÀ» ¹Ì¸® ÃʱâÈ­½ÃÄ×½À´Ï´Ù.


while(1){
  temps=reads;  
  
  if((clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr,  
      &clnt_addr_len)) == -1)
   error_handling("accept error");


  
  if (( pid = fork()) == -1){  //ÇÁ·Î¼¼½º»ý¼º
   close(clnt_sock);
   continue;
  }
  if (pid >0 ){   //ºÎ¸ðÇÁ·Î¼¼½º¸éŬ¶óÀ̾ðÆ®¼ÒÄÏ´Ý°í´Ù¸¥Å¬¶óÀ̾ðÆ®¹Þ¾Æµå¸±Áغñ..
   close(clnt_sock);
   printf("conect");
   continue;
  }
  else{    //ÀÚ½ÄÇÁ·Î¼¼½º¸é¼­¹ö¼ÒÄÏ´Ý°í ó¸®..
   close(serv_sock);

   FD_SET(clnt_sock, &temps); //fd_set ¼³Á¤...
   timeout.tv_sec = 100;
   timeout.tv_usec = 0;
  
   int i;
  
   str_len = sprintf(send_buf, "IN PUT ID: "); //¾ÆÀ̵𸦺¸³»¶ó°í ¿©±â¼­º¸³Â½À´Ï´Ù..
   send(clnt_sock, send_buf, str_len, 0);
  
   for(i=0; i<=1; i++){ //2¹ø¸¸ ¼øȸÇÏ¿©¾ÆÀ̵ð¿ÍÆнº¿öµå¸¦cmd[0],°úcmd[1]¿¡ °¢°¢ ÀúÀåÇϴºκÐÀÔ´Ï´Ù.
          //cmd´Â2Â÷¿ø¹è¿­ÀÔ´Ï´Ù..
   if((select(clnt_sock +1, &temps, 0, 0, &timeout)) ==-1)
    error_handling("select error");  //¼¿·ºÆ®ÇÔ¼ö·ÎŬ¶óÀ̾ðÆ®°¡¾ÆÀ̵𸦺¸³¾¶§±îÁö±â´Ù¸³´Ï´Ù.
  
   if(FD_ISSET(clnt_sock, &temps)){
   str_len = recv(clnt_sock, recv_buf, sizeof(recv_buf)-1,0);
   recv_buf[str_len]='\0';
   sscanf(recv_buf, "%s", cmd[i]); //ù¹ø°¿¡´Â¾ÆÀ̵ð µÎ¹ø°¿¡´ÂÆнº¿öµåÀúÀåÇÕ´Ï´Ù..
   }
   if(i==0){   //óÀ½·çÇÁµ¹¶§¸¸ Æнº¿öµåÀÔ·ÂÇ϶ó°í º¸³Â½À´Ï´Ù..
    str_len = sprintf(send_buf,"INPUT passwd: ");
   send(clnt_sock, send_buf, str_len,0);
    }
   }

   i = id_check(cmd[0],cmd[1]);   //¾ÆÀ̵ð üũÇÏ´Â ÇÔ¼ö È£Ãâ..

   if( i == 1 ){   //¾ÆÀ̵ð¿Í Æнº¿öµå°¡¸ÂÀ¸¸é 1À» ¹ÝȯÇϵµ·ÏÇß½À´Ï´Ù..
   strcat(send_buf, "Comment:\n" //¾ÆÀ̵ð¿ÍÆнº¿öµå°¡ ¸ÂÀ¸¸é ¸í·É¾î¸¦ º¸³À´Ï´Ù.
     "play process\n"
     "quit\n");
   str_len = strlen(send_buf);

   send(clnt_sock, send_buf, str_len,0);

   while(1){
   if((select (clnt_sock+1, &temps,NULL,NULL, &timeout)) == -1) //clnt°¡¸í·É¾î¸¦º¸³¾¶§±îÁö±â´Ù¸³´Ï´Ù.
    error_handling("select error");
   if(FD_ISSET(clnt_sock, &temps))
    str_len = recv(clnt_sock, recv_buf, sizeof(recv_buf)-1,0);

   if(strcmp(recv_buf,"process") ==0) //play process¶ó´Â¸í·É¾î¸¦ ¹ÞÀ¸¸é ÇÔ¼ö¸¦ ½ÇÇàÇÕ´Ï´Ù..
    process(clnt_sock,cmd[0]);

   else {
    close(clnt_sock); //quit ¸é Á¾·áÇÕ´Ï´Ù...
    puts("disconnect");
    exit(0);
    }

  
   }
   }
   else
     {
    sprintf(send_buf,"ID incorrect");  //¾ÆÀ̵𰡠¾È¸ÂÀ¸¸é Á¾·áÇÕ´Ï´Ù..
    send(clnt_sock, send_buf, sizeof(send_buf),0);
    close(clnt_sock);
    exit(0);
        }
  
  }
}
return 0;
}

    
  

int id_check(char *cmd1, char *cmd2)
{

FILE *fp;
int i=0;
char buf[BUFSIZE];

fp = fopen ("id.txt", "r" ); //¿©±â¼­´Â±×³É id.txt¿¡¹Ì¸® ¾ÆÀ̵ð¶ûÆнº¿öµåÀû¾î³õ°í Àоîµå¸°´ÙÀ½¿¡..
     //°ªÀÌ ¸ÂÀ¸¸é 1À» ¹ÝȯÇϵµ·Ï Çß½À´Ï´Ù..
  //error_handling("file open error");


while(fgets(buf, sizeof(buf), fp)){
  if(strcmp(buf,cmd1)==0 && strcmp(buf,cmd2)==0)
   i=1;
  
  else
   continue;    
}

return i;
fclose(fp);




}

void process(int clnt_sock,char *id)
{

FILE *fp;
char recv_buf[BUFSIZE];  
char send_buf[BUFSIZE];
int str_len;
char string[BUFSIZE];

fp = fopen(id,"a+");
  //error_hanlding("file open error");

strcat(send_buf, "process comment:\n" //¼ºÀû󸮰ü·Ã ¸í·É¾î¸¦ º¸³À´Ï´Ù..
   "process input\n"
   "process output\n"
   "quite\n");


send(clnt_sock, send_buf, sizeof(send_buf),0);

while(1){
  temps=reads;
  timeout.tv_sec = 100;
  timeout.tv_usec = 0;
  
if(select(clnt_sock+1,&temps, 0,0,&timeout) == -1) //clnt°¡ ¸í·É¾îº¸³¾¶§±îÁö ±â´Ù·È´Ù°¡..
  error_handling("select error");

if(FD_ISSET(clnt_sock, &temps))                //¸í·É¾î°¡¿À¸é ½ÇÇàÇÕ´Ï´Ù.
{
  str_len = recv(clnt_sock, recv_buf,sizeof(recv_buf)-1,0);

  if(strcmp(recv_buf,"process output")==0){    
   while(fgets(send_buf,sizeof(send_buf),fp)!=NULL){  //ÆÄÀÏÀÇÀúÀåµÈ¸ðµç³»¿ëÀ»º¸³À´Ï´Ù..!
    
    send(clnt_sock, send_buf,sizeof(send_buf),0);
   }
  }else if(strcmp(recv_buf, "process input")==0){
     send(clnt_sock,"message:",sizeof(10),0); //clnt°¡ º¸³½¸Þ½ÃÁö¸¦ÆÄÀÏ¿¡ÀúÀåÇÕ´Ï´Ù.

     if(select(clnt_sock+1,&temps, 0, 0, &timeout) ==-1)
      error_handling("select error");

     if(FD_ISSET(clnt_sock, &temps))
     {
      while(1){
      str_len = recv(clnt_sock, recv_buf,
        sizeof(recv_buf)-1,0);
      recv_buf[str_len]='\0';
      fprintf(fp, "%s", recv_buf);

      if(strcmp(recv_buf,"end")==0)
       break;
      
      
      }
     }
  }else if(strcmp(recv_buf, "quite")==0){  
    close(clnt_sock);
    exit(0);
  }
}
  else continue;

}
}

  


//int log(int clnt_sock)


void z_handler(int sig)  //Á»ºñÇÁ·Î¼¼½º ó¸®ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù..
{

pid_t pid;
int rtn;

pid = waitpid(-1, &rtn,WNOHANG);
  

}


void error_handling(char *message)//¿¡·¯Ã³¸®ÇÔ¼öÀÔ´Ï´Ù..
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}



  
  
    





Ŭ¶óÀ̾ð Æ® ¼Ò½º:



¹®Á¦°¡ ¼­¹ö¿¡ ÀÖ´Â°Í °°¾Æ Ŭ¶óÀ̾ðÆ® ¼Ò½º¿¡ ÁÖ¼®À» ´ÞÁö ¾Ê¾Ñ½À´Ï´Ù..





#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/time.h>

#define BUFSIZE 1000
#define DEFAULT_PORT 9999

void error_handling(char *);

int main(int argc, char **argv)
{

struct sockaddr_in serv_addr;
unsigned long  dst_ip;
int port;
int serv_sock;
int str_len;
char recv_buf[BUFSIZE];
char send_buf[BUFSIZE];
struct timeval timeout;
fd_set readfd;

if(argc != 2 && argc !=3){
  printf("Usage : %s <hostname><port>\n",argv[0]);
  exit(1);
}

if (( dst_ip = inet_addr(argv[1]) )== INADDR_NONE){
  struct hostent *he;

  if((he = gethostbyname(argv[1])) == NULL ){
   error_handling("gethostbyname error");
  }

  memcpy((char *)&dst_ip, (char *)he->h_addr, he->h_length);
}

// if(argc==3){
//  if((port == atoi(argv[2]))==0){
  // struct servent *se;
//;
  // if((se = getservbyname(argv[2],"tcp"))!=NULL)
  //  port = (int)ntohs((u_short)se->s_port);
  // else
  //  error_handling("getservbyport error");
  
//  else
//   port = DEFAULT_PORT;
// }


if((serv_sock = socket(PF_INET, SOCK_STREAM,0))==-1)
  error_handling("socket erorr");

memset(&serv_addr,0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = dst_ip;
serv_addr.sin_port = htons(atoi(argv[2]));

if(connect(serv_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)
     )==-1)
  error_handling("connect error");

while(1){

  FD_ZERO(&readfd);
  FD_SET(0,&readfd);
  FD_SET(serv_sock,&readfd);

  timeout.tv_sec = 100;
  timeout.tv_usec = 0;
  
  if((select(serv_sock+1, &readfd,NULL,NULL,&timeout))== -1){
   error_handling("select erorr");
   break;
  }

  if(FD_ISSET(0, &readfd)){
   if(( str_len = read(0, send_buf, sizeof(send_buf)-1)) ==-1)
    break;
   send_buf[str_len]='\0';
   if(send(serv_sock, send_buf, sizeof(send_buf),0) == -1)
    break;
  }

  if(FD_ISSET(serv_sock, &readfd)){
   if((str_len = recv(serv_sock, recv_buf, sizeof(recv_buf)-1,0))
      ==-1)
     error_handling("recv error");
  
   recv_buf[str_len]='\0';
   printf("%s",recv_buf);
   fflush(stdout);
  }
}

strcpy(send_buf,"quit");
send(serv_sock,send_buf,sizeof(send_buf),0);
close(serv_sock);

return 0;
}


    

void error_handling(char *message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}

  
  


  



  Hit : 2920     Date : 2006/04/30 01:01



    
indra À½.. ½Ã°£ÀÌ Á» ¸¹À¸¸é.. Çϳª Â¥ µå¸±ÅÙµ¥..--; Àúµµ ȸ»çÀ϶§¹®¿¡ ¹Ùºü¼­¸®;;; Èå... 2006/04/30  
indra ÀÏ´Ü.. ¼­¹öÃø while() ·çÇÁ ³»ºÎ¿¡ FD_ZERO() ·Î fd_set À» ÃʱâÈ­ ÇÏ°í, FD_SET(serv_sock, &reads) °°ÀÌ ¼­¹ö¼ÒÄÏ µð½ºÅ©¸³Å͸¦ fd_set 2006/04/30  
indra ¿¡ ¼¼ÆÃÇØÁÝ´Ï´Ù. ±×¸®°í select() ·Î À̺¥Æ®°¡ ÀϾ´Â°ÍÀ» °¨Áö¹Þ¾Æ¼­ "FD_ISSET() À¸·Î °¨ÁöµÈ ¼ÒÄÏ µð½ºÅ©¸³ÅÍ¿¡¼­¸¸ accept() ÇÔ¼ö¸¦ »ç¿ë" Çϸé 2006/04/30  
indra ´õ ÀÌ»ó accept error ´Â ¾È ³ª¿Ã °ÍÀ¸·Î »ç·áµË´Ï´Ù. 2006/04/30  
macgeriii À¹..¹ã»õ¿¬±¸Çؼ­¿Ö¿¡·¯°¡³ª´ÂÁöã¾Ò½À´Ï´Ù.¤Ð.¤Ð Á¦°¡¾¾¾ð¾î±âÃʺÎÅʹٽùè¿ö¾ßÇѴٴ°á·ÐÀÌ.. ¤Ð.¤Ð 2006/05/01  
3204   Ä¡Æ®¿£Áø °í¼öºÐ °è½Ç±î¿ä[1]     rjsdudals123
02/15 214
3203   ¿À·ù Á» ã¾ÆÁÖ¼¼¿ä [1]     marunim
05/30 951
3202   c¾ð¾î segmentation fault:11 ¿À·ù Áú¹®µå¸³´Ï´Ù![2]     leebk1124
05/21 2028
3201   C++ÇÔ¼ö°ü·Ã Áú¹®ÀÌ¿¡¿ë!![3]     1999dylee
05/11 1858
3200   ÆÄÀ̽ã Áö¹® µå¸³´Ï´Ù.[1]     kksh1107
04/24 1598
3199   ¸®¹ö½ÌÀÇ ¼¼¹ø¤Š ²É - ¿ª¶û-     nninni79
04/20 2302
3198   ´Þ°í³ª ¹®¼­ ½©ÄÚµå[1]     ghjk645
03/24 1620
3197 ºñ¹Ð±ÛÀÔ´Ï´Ù  c¾ð¾î ¼Ò¼ö °ª     adwefq
04/29 1
3196   C¾ð¾î ¼Ò½ºÁú¹®ÀÔ´Ï´Ù![5]     an0088
01/05 5172
3195   C++ /// ºôµå ¿¡·¯ ¤Ð¤Ð[1]     guichanta
08/23 2406
3194 ºñ¹Ð±ÛÀÔ´Ï´Ù  c¾ð¾î µµ¿ÍÁÖ¼¼¿ä¤Ð¤Ð     su6339
04/06 0
3193   ÇØÅ·À» ¹è¿ì·Á°íÇϴµ¥[3]     zoodem04
03/26 4186
3192   c¾ð¾î¸¦ ¹è¿ì°í½Í¾î¿ä ![7]     dwc07238
02/11 4091
3191   ½ºÅÃÀÌ ½×ÀÌ´Â ¹æÇâ¿¡ °üÇؼ­!![1]     hackxx123
12/10 3534
3190   ÇØÅ·Åø¿¡¼­ ip ¾øÀÌ Çϵ忡 ½É´Â°Å¿¡´Â ¾î¶²°Ô ÀÖÀ»±î¿ä?[2]     aowlrgmlals
11/27 4315
3189   C¾ð¾î Çϴµ¥ double ½Ç¼ö¸¦ ³ÖÀºµ¥ ÀÚ²Ù 0.0ÀÌ ³ª¿Í¿ä[2]     fatou10336
11/20 3776
3188   dumpcode.h ÀÌÇØÁ» µµ¿ÍÁÖ¼¼¿ä .[1]     cm6418
11/06 3747
3187   c¾ð¾î ¾Ë°í¸®Áò Áú¹®ÀÔ´Ï´Ù.[3]     alstn8150
10/12 3763
3186     [re] c¾ð¾î ¾Ë°í¸®Áò Áú¹®ÀÔ´Ï´Ù.     dafher
05/13 1597
3185   c¾ð¾î ¼Ò½º Áú¹® ¹¹°¡ ¹®Á¦ÀÎÁö¤Ì¤Ì¤Ì¤Ì[2]     sjjh96
05/23 4302
1 [2][3][4][5][6][7][8][9][10]..[161]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org