ÇÁ·Î±×·¡¹Ö

 3206, 6/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 : 2905     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  
3106   ¾ÆÀÌÄÚ...Ã¥ÃßõÁ»..[5]     capt_0669
03/09 2942
3105   ¾ÆÀÌÆù ¾îÇð³¹ßȯ°æ Áú¹®ÀÌ¿ä ~¤¾¤¾[5]     kangms0801
03/11 4364
3104   ¾ÆÀÌÆÌÅÍÄ¡/¾ÆÀÌÆù ¾îÇà ¸¸µé±â Áú¹®ÇÏ°Ù½À´Ï´Ù[9]     rudgnsgogo
12/12 6884
3103   ¾Æ...¶Ç ¶È°°Àº ¹®Á¦....[1]     capt_0669
08/28 3616
3102   ¾Æ....¶Ç ¶È°°Àº¹®Á¦2[6]     capt_0669
08/28 3289
3101   ¾Æ... ¸·Çû¾î¿ä;;ÁßÇб³°úÁ¤ ¤Ð,.¤Ð;;[14]     dlaldldldldl
07/30 2977
3100   ¾Æ.. ¹ÌÄ¡°Ú½À´Ï´Ù.. C/C++ ¾ð¾î¸¦ ¹è¿ì°íÀִµ¥¿ä[4]     insung38
02/06 3459
3099   ¾Æ!! ¾ï¿ïÇØ¿ä!! ºÐ¸í ÀÌ°Ç ¹º°¡ ÀÖ¾î¿ä.[2]     Å©·ç¿ÂÆ®
04/05 3223
3098   ¾Æ ¿Ö ¼Ò½º ¾È¿Ã¶ó°¨?[2]     qkqhsksk98
07/25 2750
  ¾Æ »ðÁú¿¡ ÁöÃÄ ÀÌ·¸°Ô µµ¿òÀ» ¿äûÇÕ´Ï´Ù..[5]     macgeriii
04/30 2904
3096   ¾Æ ºýÃÝ...¤Ð.¤Ð[10]     capt_0669
08/29 3400
3095   ¾Æ ¹ÌÄ¡°Ú½¿µÂ -_-; ¿©±â¼­ ob1°´Ã¼°¡ ob2·Î ġȯµÇ¸é ¾î¶²¹®Á¦Á¡ÀÌ ÀϾ³ª¿ä?[16]     pmj0914
11/16 4213
3094   ¾Æ ´Ù¿î·Îµå¿¡¼­¿ä;;[5]     hacker5016
10/25 2545
3093   ¾Æ printf()ÇÔ¼ö Çü½ÄÁöÁ¤ÀÚÁú¹®;-=-;;[5]     Åʱ¸
04/06 3848
3092   ¾Æ c¾ð¾î ÆÄÀÏÀÔÃâ·Â Áú¹®ÇÏ°Ù½À´Ï´Ù.[3]     maby258
06/22 4206
3091   ¾Æ Á¦¹ß..¤ÐÈæÈæ[6]     ¹Ùº¼ÀÌ
10/02 3121
3090   ¾Æ Á¤¸» ¸ð¸£°Ú³×¿ä ... °í¼ö´Ôµé µµ¿ÍÁÖ¼¼¿ä ¤Ð.¤Ð (JAVA ¼Ò½º)[3]     tlsdbcjs
03/27 5487
3089   ¾Æ Áú¹® ¾öû¸¹ÀÌ ¿Ã¸®³×¿ä ±ÍÂúÀ¸¼Åµµ Çѹø¸¸ºÁÁÖ¼¼ ¤±¤»[5]     maby258
06/25 2788
3088   ¾Æ Àú´Â Ãʺ¸ÇØÄ¿Àä[2]     jncwk3
02/10 2770
3087       ¾Ñ.. Á¶±Ý ÀÌÇØ°¡ ¾ÈµË´Ï´Ù.. @_@;;     bsshq7
09/11 4464
[1][2][3][4][5] 6 [7][8][9][10]..[161]

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