All pastes #265058 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-12-02 23:47 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT 80
#define MAXDATASIZE 2048

char get[1024] = "GET \0";

int main(int argc, char *argv[])
{
        int sockfd, numbytes;
        char buf[MAXDATASIZE];
        struct hostent *he;
        struct sockaddr_in their_addr;

        if (argc < 2 || argc > 3)
        {
                fprintf(stderr, "usage: robots <hostname> <path to robots>(if not in root)\n");
                exit(1);
        }

        if (argc == 3)
        {
                strcat(get, argv[2]);
                strcat(get, "/robots.txt HTTP/1.1\r\n\r\n");
        } else {
                strcat(get, "/robots.txt HTTP/1.1\r\nHost: ");
                strcat(get, argv[1]);
                strcat(get, "\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.8) Gecko/20061107 Fedora/1.5.0.8-1.fc6 Firefox/1.5.0.8\r\n"
                            "Accept: text/plain;q=0.8\r\n"
                            "Accept-Language: en-us,en;q=0.5\r\n"
                            "Accept-Encoding: deflate\r\n"
                            "Accept-Charset: utf-8;q=0.7\r\n"
                            "Keep-Alive: 300\r\n"
                            "Connection: keep-alive\r\n\r\n");
        }

        if ((he = gethostbyname(argv[1])) == NULL)
        {
                herror("gethostbyname");
                exit(1);
        }

        if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)
        {
                perror("socket");
                exit(1);
        }

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

        if (connect(sockfd, (struct sockaddr *) &their_addr, sizeof(struct sockaddr)) == -1)
        {
                perror("connect");
                exit(1);
        }
        if (send(sockfd, get, strlen(get), 0) == -1)
                perror("send");

        while (numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0))
        {
                if (numbytes == 0)
                        break;

                if (numbytes == -1)
                {
                        perror("recv");
                        exit(1);
                }

                printf("%s", buf);
        }

        printf("\n");

        close(sockfd);

        return 0;
}