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) »