Les Forums

Les Forums

Les forums sont fermés. Ils restent présent pour consultation et archivage.
Vous pouvez désormais poser vos questions directement dans les commentaires en bas de chaque page du site.
Alors n'hésitez pas à participer

tester port ouvert sur router

Bonjour @ tous

J'essai de développer un petit scanner de port qui me permettrait de savoir quels sont les ports utilisés sur une bécane ainsi que les ports libre ds la config du router.
Tout ça pour me permettre de vérifier auprès de collègues qu'ils ont bien config leur router.
Je pense par ex aux ports nécéssaires à la mule , aux jeux en réso etc...

Voilà mon code:
[code:1:ab9447262e]#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib")
#include <time.h>
#include <winbase.h>
#include "String.h"
#include <windows.h>


struct config
{
SOCKET sock;
SOCKADDR_IN sin;
int ip;
int port;
int code;
HANDLE hthread;
FILE * fic;
};

int code=1;
int nthread=1;

DWORD WINAPI connection( LPVOID Param )
{
struct config * conf = (struct config *)Param;
conf->sin.sin_addr.s_addr = ntohl(conf->ip);
conf->sin.sin_family = AF_INET;
conf->sin.sin_port = ntohs(conf->port);
conf->sock = socket(AF_INET,SOCK_STREAM,0);
for (;!connect((conf->sock), (SOCKADDR *)&(conf->sin), sizeof(conf->sin));)
{ code=GetLastError();
if (code==WSAECONNREFUSED)
{
printf("port %d libre code error = %d \n",(conf->port),GetLastError());
}
else if (code!=WSAETIMEDOUT)
{
printf("port %d deja ouvert code error = %d\n",(conf->port),code);
}
}
closesocket(conf->sock);
code=1;
}

int main(int argc, char *argv[])
{
int scanip;
int port=1;
int nthread;
int endport=65535;
struct config * conf = NULL;
if ( argc == 3 )
{
scanip = htonl(inet_addr(argv[1]));
WSADATA WSAData;
WSAStartup(MAKEWORD(2,2), &WSAData);
for (;port <= endport;)
{
nthread = atoi(argv[2]);
for (;nthread>0;nthread--)
{
conf = (struct config *) malloc(sizeof(struct config) );
conf->ip = scanip;
conf->port = port;
conf->hthread = CreateThread(NULL, 0, &connection, conf, 0, NULL);
if ( port <= endport ) port++;
}
Sleep(200);
CloseHandle(conf->hthread);
}
WSACleanup();
return 0;
}
else
{
printf("Usage : scan.exe ip nthread\n");
return 0;
}
}

[/code:1:ab9447262e]

J'ai essayé ces 2 cas:
[code:1:ab9447262e]for (;!connect((conf->sock), (SOCKADDR *)&(conf->sin), sizeof(conf->sin));)[/code:1:ab9447262e]
[code:1:ab9447262e]for (;connect((conf->sock), (SOCKADDR *)&(conf->sin), sizeof(conf->sin))!=0;)
[/code:1:ab9447262e]

Bien que je ne vois pas la différence, j'ai 2 résultats qui ne conviennent pas:
le premier me donne uniquement les ports utilisés ( comme un bête scanner de port)
le second me dit que tous les ports sont libres

Je suis également derriere un router mais je ne vois pas ce que ça change.
De plus qd je lance le scanner, ça me coupe mon msn