diff options
Diffstat (limited to 'abuse.c')
-rw-r--r-- | abuse.c | 57 |
1 files changed, 57 insertions, 0 deletions
@@ -0,0 +1,57 @@ +#include <stdio.h> +#include <sys/socket.h> +#include <arpa/inet.h> +#include <string.h> +#include <unistd.h> +#include <stdlib.h> + +#define host "192.168.2.3" +#define port 8888 + +int f(struct in_addr *saddr, const char *data, const size_t data_len) { + int sockfd; + struct sockaddr_in addr; + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < -1) { + perror("socket"); + return 1; + } + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr = *saddr; + if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr))) { + perror("connect"); + return 1; + } + write(sockfd, data, data_len); + close(sockfd); + return 0; +} +int main(int argc, char **argv) { + struct in_addr saddr; + const char *data = "GET / HTTP/1.0\r\n\r\n"; + const size_t data_len = strlen(data); + if (argc != 2) { + fprintf(stderr, "Usage: %s count\n", *argv); + return 1; + } + if (!inet_aton(host, &saddr)) { + perror("inet_aton"); + return 1; + } + int count = atoi(argv[1]); + const char dot = '.'; + unsigned fails; + while (--count >= 0) { + if (!(count % 10)) { + write(STDOUT_FILENO, &dot, sizeof(dot)); + } + if (f(&saddr, data, data_len)) { + if (++fails > 10) break; + } else + fails /= 2; + } + putchar('\n'); + return 0; +} |