Pull the Plug: level 0

Escrito por coder el 21 de enero de 2008 en Informática | Hits: 1039

Rober me ha picado para que hiciéramos esto, y nos hemos puesto a ello. Después de desoxidar sockets en C durante un ratito, esto es lo que he parido:

 

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

#define PORT 5842

int main(int argc, char *argv[]) {
  int len = 0, i = 0, sock, sockfd;
  unsigned int ret[4], j = 0;
  char host[50], c;
  struct hostent *he;
  struct sockaddr_in srv_addr;

  memset(host, 0, sizeof(char)*50);
  memset(ret, 0, sizeof(int)*4);

  strncpy(host, argv[1], sizeof(char)*50);
  if (!(he = gethostbyname(host))){
    fprintf(stderr, "gethostbyname()\n");
    exit(1);
  }

  if ((sock = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
    printf("socket()\n");
    exit(1);
  }

  srv_addr.sin_family = AF_INET;
  srv_addr.sin_port = htons(PORT);
  srv_addr.sin_addr = *((struct in_addr *)he->h_addr);
  memset(srv_addr.sin_zero, '\0', sizeof srv_addr.sin_zero);

  if (connect(sock, (struct sockaddr *)&srv_addr, sizeof srv_addr) == -1) {
    printf("connect()\n");
    exit(1);
  }

  len = sizeof(srv_addr);
  for (i = 0; i < 4; i++) {
    read(sock, &ret[i], sizeof(unsigned int));
  }

  printf("ret[0]:%10d\nret[1]:%10d\nret[2]:%10d\nret[3]:%10d\n", ret[0], ret[1], ret[2], ret[3]);
  j = ret[0] + ret[1] + ret[2] + ret[3];
  printf("j     : %10d\n", j);
  printf ("%d\n", i);
  i = write(sock, &j, sizeof(unsigned int));
  printf ("%d\n", i);
  while(read(sock, &c, sizeof(char))) {
    printf ("%c", c);
  }

  return (0);
}

No es perfecto, pero tampoco muy cerdo y funciona. 



         

« CEHv5: Certified Ethical Hacker versión 5

Micro Chulla SVN (II) »



Comentarios

[ Comentar la jugada ]