Comment puis-je envoyer 1000 différentes requêtes à un serveur en même temps?

La page de connexion comporte trois champs, à savoir le champ numéro utilisateur, date de champ de naissance (DDN) et une question de vérifier (ce qui n’est rien d’autre qu’une expression mathématique arithmétique).

En maintenant le code que j’ai écrit est une classe java, qui Envoyer requête http vers le site Web et obtenir le résultat avec succès retour. (Ce que je fais est : je fais quelques grattage de page Web pour trouver l’expression mathématique, puis faire

post.setEntity (new UrlEncodedFormEntity(postParams)) ;   où le postParams a le numéro de l’utilisateur et la date de naissance et le résultat de l’expression mathématique).

Maintenant ce que je voudrais faire, créer 1000 demande en même temps, chacun avec différent unique date de naissance et les envoyer au serveur et récupérer le résultat. Si le résultat n’est trouvé je veux arrêter la demande reste 999 et se déplacer.

J’ai fait quelques recherches sur stackoverflow et avant de dépenser mes efforts et je veux faire de la façon efficace.
Voici les points que j’ai été frappé maintenant
1) si je fais multi threading je devais le faire dans le code java ou devrais je faire utiliser de client http?  (Actuellement j’utilise httpClient d’Apache)
2) je suis surtout frappé avec la logique de l’écriture demande 1000 chacun avec unique date de naissance et l’envoi de ces 1000 demande à un seul coup. (Création de 1000 demandes avec date de naissance unique et leur envoi au serveur devraient arriver dans moins d’une demi-seconde). Le principal problème est la demande 1000 ne sont pas identiques, ils ont un paramètre qui est unique dans toutes les demandes de 1000).
3) je ne veux pas mes demandes de 1000 à obtenir en file d’attente ou attente et mon programme de crash à cause de l’enfilage. (J’utilise 16 Go de ram, processeur quadricœur i7)

PS :
Ce que j’essaie de faire en fait est la force brute moyen de connexion à un site Web. Je me suis assuré que c’est légal. J’ai double confirmé cela. Donc il y a deux champs dans le signe dans la page. L’un est le nom d’utilisateur que je connais, et l’autre est un nombre compris entre 1 et 1000. Donc, pour chaque utilisateur (A, B, c...) Je devrais tenter 1000.
Utilisateur A avec numéro 1 comme login 1ère tentative
Utilisateur A avec numéro 2 comme connexion 2ème tentative
Utilisateur A avec numéro 3 login 3ème tentative
Utilisateur A avec numéro 4 login 4e tentative.
Étant donné que le nombre d’utilisateurs est environ 2 millions, je veux faire la tentative de moins d’une seconde pour un utilisateur (dans mon exemple il serait utilisateur A). Alors j’ai pensé de créer 1000 tentatives d’un seul coup pour l’utilisateur A et envoyer sur le site.

Bien que je ne sais pas combien demande à mon site Web cible peut gérer, je voudrais attribuer chaque numéro 1, 2, 3... 1000 pour utilisateur A utilisant le multithreading (ou toute autre technique de mieux qui vous aurait dû connaître) et en envoyant les demandes vers le site cible. Je ne veux pas qu’ils en file d’attente que mon but est d’obtenir la réponse dès que possible.

Réponse

Tout d’abord, on dirait que vous avez l’intention de pénétrer un système via deviner mot de passe.  N’importe quel système de connexion bien conçu ne permettra pas deviner les attaques de mot de passe.  Systèmes de connexion devrait comprennent anti-contrefaçon jetons, limitation, anti-spam, de détection et de CAPTCHAs tous pour empêcher juste ce type de mot de passe deviner.

Un autre obstacle, je ne pense pas que c’est possible de le faire dans la machine virtuelle Java, du moins ne pas sans écrire votre propre code TCP. Certaines limites et les manettes des gaz sont appliquées dans l’implémentation de la JVM sur combien de connexions HTTP vous pouvez ouvrir simultanément vers un seul hôte.

En outre, les serveurs font souvent leur propre limitation du nombre de connexions, afin d’éviter les DoS attaque, donc si le client n’est pas de papillon, le serveur pourrait commencer à supprimer des connexions sur son propre.

Il existe une extension du protocole HTTP appelé pipelining, qui vous permet d’envoyer des requêtes HTTP asynchrone.  Cependant, qui est également limitée du côté client et serveur.

Si vous contrôlez le client et le serveur, il y a beaucoup plus d’options. Vous pouvez simplement ignorer HTTP et concevoir votre propre protocole asynchrone personnalisé.


Tags: Développement Web, HTTP, Thread (informatique), Serveurs, Httpclient