summaryrefslogtreecommitdiff
path: root/abuse.c
diff options
context:
space:
mode:
Diffstat (limited to 'abuse.c')
-rw-r--r--abuse.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/abuse.c b/abuse.c
new file mode 100644
index 0000000..040fb5e
--- /dev/null
+++ b/abuse.c
@@ -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;
+}