Vorrei provare io stesso, puoi passarmi il flooder? Almeno evito di farmelo da 0, anche se non ci vuole nulla.
Edit : non c'è ne bisogno, tolgo direttamente il controllo e vedo.
Mo sto dal portatile, il fisso è occupato ma visto che ho l'encoding 1:1 ( quella che reversai tempo fa ) su pastebin ecco a te
Codice:
------------------------------------------------------------------------------------------------------------------
cryptography.hpp
------------------------------------------------------------------------------------------------------------------
#ifndef cryptography_hpp
#define cryptography_hpp
namespace nostale
{
namespace login
{
class cryptography
{
public:
std::string password(std::string pass) const;
std::string encrypt(std::string packet) const;
std::string decrypt(std::string packet) const;
};
}
}
#endif // cryptography_hpp
------------------------------------------------------------------------------------------------------------------
cryptography.cpp
------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <sstream>
#include "cryptography.hpp"
namespace nostale
{
namespace login
{
std::string cryptography::password(std::string pass) const
{
const char dump[] = {
0x2E, 0x2A, 0x17, 0x4F, 0x20, 0x24,
0x47, 0x11, 0x5B, 0x37, 0x53, 0x43,
0x15, 0x34, 0x45, 0x25, 0x4B, 0x1D,
0x2F, 0x58, 0x2B, 0x32, 0x63 };
short index = rand() % sizeof(dump);
std::stringstream ss;
for (unsigned short i = 0; i < pass.size(); i++)
{
ss << std::uppercase << std::hex << (int)dump[index];
ss << std::uppercase << std::hex << (int)pass[i];
index == sizeof(dump)-1 ? index = 0 : index++;
}
pass = ss.str();
ss.str(std::string());
char c = { 0 };
for (unsigned short i = 0; i < pass.size(); i += 4)
{
c = pass[i + 1];
pass[i + 1] = pass[i + 2];
pass[i + 2] = c;
}
ss << std::uppercase << std::hex << (int)dump[rand() % sizeof(dump)];
return ss.str() + pass;
}
std::string cryptography::encrypt(std::string packet) const
{
for (unsigned short i = 0; i < packet.size(); i++)
{
packet[i] = (packet[i] ^ 0xC3) - 0x0F;
}
return packet += 0xD8;
}
std::string cryptography::decrypt(std::string packet) const
{
for (unsigned short i = 0; i < packet.size(); i++)
{
packet[i] -= 0x0F;
}
return packet;
}
}
}
crea progetto, fa copy & paste, cripta il pacchetto, connetti il programma al server e mandagli il pacchetto.. metti un loop e vedi quanto ti regge, ti conviene mettere uno sleep che se tocca i 600 threads ti crasha ( anche se non credo che quel rottame del tuo pc riesca ad elaborare 600 richieste contemporanee )
Pacchetto processato interamente -> Statistiche
Massimo utilizzo cpu -> 0,6%
Medio utilizzo cpu -> 0,1-0,2% a volte 0,3%
Utilizzo massimo memoria -> 0,2%
Connessioni -> 4.000.000 ( 4 milioni )
Dimmi tu..
(P.S Non con il tuo flooder, ma con un comune DoS, tuttavia ho eliminato il controllo pacchetto quindi è processato interamente, credo sia la stessa cosa
)
(27-03-2014 10:22 PM)~Giorigo1~ Ha scritto: [ -> ]Pacchetto processato interamente -> Statistiche
Massimo utilizzo cpu -> 0,6%
Medio utilizzo cpu -> 0,1-0,2% a volte 0,3%
Utilizzo massimo memoria -> 0,2%
Connessioni -> 4.000.000 ( 4 milioni )
Dimmi tu..
(P.S Non con il tuo flooder, ma con un comune DoS, tuttavia ho eliminato il controllo pacchetto quindi è processato interamente, credo sia la stessa cosa )
Certo, in primo luogo un DoS comune non può verificare un bel nulla dal momento che non invia il pacchetto corretto.. ti sei scordato la verifica nel database e tutto il resto ? cosa gli fai controllare se il pacchetto è errato ? dovrai costruirti un tester se davvero vorrai testarne le prestazioni. hai la crittografia su, ti ho avanzato il compito di cercarla.. una mezzora di noia in meno
a parte per la password che non saresti comunque capace di reversarne l'algoritmo ^^
Infatti non servono 13 minuti per fare 4 milioni di connessioni, me ne servono si e no 5 di minuti :
PRIMA
DOPO
Avanti, su.. Dici che ho modificato il tempo
Certo, richieste http.. uhm uhm, si okay giorigo.. sai bene che non le ha fatte tutte quelle richieste, cambia coso perché non va affatto, come sai bene che una richiesta http non viene calcolata dal server visto che hai l'if ^^ e non venirmi a dire che non è cosi perché per far controllare i dati hai bisogno del pacchetto giusto e senza di quello non processi una m****ia..
ora ti vuoi far figo davanti a tutti come al solito ma sai bene che hai torto.
La richiesta è tcp, non http. Fuori uno.
L'if lo ho tolto ( quello del controllo pacchetto ), per quanto riguarda quello del database, l'if è nel verificare quello che preleva dal database e nell'invio del pacchetto, quindi sempre svolge la query al database. Fuori due.
L'applicazione funziona, posso assicurartelo : con 400 thread aperti contemporaneamente che bombardano il server è possibile ottenere questo risultato in meno di 5 minuti. Altre domande? (facepalm)
(28-03-2014 07:47 PM)~Giorigo1~ Ha scritto: [ -> ]La richiesta è tcp, non http. Fuori uno.
L'if lo ho tolto ( quello del controllo pacchetto ), per quanto riguarda quello del database, l'if è nel verificare quello che preleva dal database e nell'invio del pacchetto, quindi sempre svolge la query al database. Fuori due.
L'applicazione funziona, posso assicurartelo : con 400 thread aperti contemporaneamente che bombardano il server è possibile ottenere questo risultato in meno di 5 minuti. Altre domande? (facepalm)
Hai selezionato il pacchetto http nel lato, non importa se glielo mandi via tcp sempre un POST è.. fuori uno.
L'if l'hai tolto ( quello del controllo pacchetto, cosa processa allora ? sto ca**o ? ), per quanto riguarda quello del database, l'if è nel verificare quello che preleva dal database e nell'invio del pacchetto.. aspetta.. cosa metti nel campo ID e PW se il pacchetto è errato ? cosa splitti ? sto ca**o ? fuori due.
L'applicazione funziona, posso assicurartelo : con 400 thread aperti contemporaneamente che bombardano il server.. bla bla bla.. sicuro ? i threads non sono contemporanei anche se sembrano, servono ben 5 secondi a connessione.. per non parlare del lag che ti comporterebbe, probabilmente ti salterebbe la connessione o la cpu.. il massimo che puoi fare in 13 minuti è 450K di connessioni.. fatte per bene ovviamente, processate e non con una disconnessione dopo un millisecondo..
Creati un tester fatto per bene e poi vieni a parlarne, le tue statistiche non sono reali, a parte il fatto che non hai nemmeno scritto quanto occupa in RAM.. ripeto.. 4000000 connessioni in 13 minuti non ce la fa nessuna macchina, tanto meno la tua.. se davvero uno riuscirebbe a farne cosi tante allora credo proprio che non ci sarebbe nemmeno un sito online.. secondo te perché si usano gli attacchi ddos e non dos ? pensaci un pochino eh..
GIORIGO ! SPARA MENO MINCHIATE, SOPRATTUTTO CON UNO PIU INFORMATO IN MATERIA
Mi sono sbagliato, hai ragione tu.. Ma smettila di spammare.
Accettasi consigli su come migliorare strutturalmente il server.
Ragazzi avete avuto già un avvertimento da antimus, un altro spam e sono costretto ad avvertirvi tutti.
Visto che come dici tu "parliamo solo" ne approfitto per warnarti io; come detto sopra avremmo punito lo spam, e allora è cosi che faremo