diff --git a/connection.c b/connection.c new file mode 100644 --- /dev/null +++ b/connection.c @@ -0,0 +1,71 @@ +/** + * test/demos/connection.c + * Copyright (C) 2008 mussolini + * Copyright (C) 2008 mbroeker + */ + +#include +#include +#include +#include + +#include +#include + +int connection (char *ip, unsigned short port) +{ + struct hostent *hs; + struct sockaddr_in sock; + int sockfd; + + memset (&sock, 0, sizeof (sock)); + sock.sin_family = AF_INET; + sock.sin_port = htons (port); + + if ((sock.sin_addr.s_addr = inet_addr (ip)) == -1) { + if ((hs = gethostbyname (ip)) == NULL) { + perror ("[-] Error"); + return -1; + } + sock.sin_family = hs->h_addrtype; + memcpy (&sock.sin_addr.s_addr, hs->h_addr, hs->h_length); + } + + if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) { + perror ("[-] Error"); + return -1; + } + + if (connect (sockfd, (struct sockaddr *)&sock, sizeof (sock)) < 0) { + perror ("[-] Error "); + return -1; + } + + return (sockfd); +} + +int main (int argc, char **argv) +{ + char buffer[1024]; + int sockfd; + int num; + + if (argc != 3) { + printf ("Usage: %s \n", argv[0]); + return EXIT_SUCCESS; + } + + if ((sockfd = connection (argv[1], atoi (argv[2]))) < 0) { + printf ("Connection error: %s:%d\n", argv[1], atoi (argv[2])); + return EXIT_FAILURE; + } + + write (sockfd, "GET /\r\n", 7); + + while ((num = read (sockfd, buffer, 1023)) != 0) { + buffer[num] = 0; + printf ("%s", buffer); + } + + return close (sockfd); +}