Scanner d'ip multithread

Contenu du snippet

Après une première tentative où je me suis fait incendier, j'ai repris tous les conseilles k'on m'avais donnée pour optimiser ma source. De plus je suis enfin en école d'info donc j'ai apris à mieux structurer mes programmes.

Dailleur en parlant de structure j'aurai aimé virer la variable globale int nthread mais c prise de tête pour poa grand chose. Il aurait fallut pointer sur l'entier et enregistrer l'address dans la structure config. Enfin bon...

Sinon j'espère k'il n'ya poa tro de truc maladroit !!!

Source / Exemple :


#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib")

struct config
{
 SOCKET sock;
 SOCKADDR_IN sin;
 int ip;
 HANDLE hthread;
};

int nthread;

DWORD WINAPI connection( LPVOID Param )
{
 struct config * conf = (struct config *)Param;
 WSADATA WSAData;
 WSAStartup(MAKEWORD(2,0), &WSAData);
 conf->sin.sin_addr.s_addr	= ntohl(conf->ip);
 conf->sin.sin_family		= AF_INET;
 conf->sin.sin_port		    = htons(555);
 conf->sock = socket(AF_INET,SOCK_STREAM,0);
 bind(conf->sock, (SOCKADDR *)&conf->sin, sizeof(conf->sin));
 if ( !connect(conf->sock, (SOCKADDR *)&conf->sin, sizeof(conf->sin)) )
     printf("***connection to %s succed\n",inet_ntoa(conf->sin.sin_addr));
 nthread++;
 closesocket(conf->sock);
 WSACleanup();
 CloseHandle(conf->hthread);
 free(conf);
}

int main(int argc, char *argv[])
{
 int startip;
 int endip;
 struct config * conf = NULL;

 if ( argc > 2 )
 {
  startip = htonl(inet_addr(argv[1]));
  endip = htonl(inet_addr(argv[2]));
  nthread = 100;

  for (;startip <= endip;startip++)
  {
   while ( !nthread ) _sleep(100);
   conf = (struct config *) malloc(sizeof(struct config) );
   conf->ip = startip;
   conf->hthread = CreateThread(NULL, 0, &connection, conf, 0, 0);
   nthread--;
  }
 }
 else
  printf("Usage : scan.exe ip_start ip_end\n");
 system("pause");
 return 0;
}

Conclusion :


By abdoulax

Have fun

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.