Scanner ip et ports [dev-c++]

Soyez le premier à donner votre avis sur cette source.

Vue 43 155 fois - Téléchargée 1 998 fois

Description

Un petit scanner d'ip et de ports très simple, en mode console. Il peut certainement être amélioré alors laissez vos remarques. Par exemple les tentatives de connexion sont très longues, si quelqu'un a une solution.

Source / Exemple :


//ScanH by Jhep
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h> // c:\dev-c++\lib\libwsock32.a

int CompareIP(SOCKADDR_IN, SOCKADDR_IN);
void Use();
void End();
void Error();

SOCKET ws;

int main(int argc, char *argv[])
{

if (argc < 5){Use(); return 0;}

if (!strcmp(argv[1], "-a")){

SOCKADDR_IN from, to, ip;
long Port;
from.sin_family = to.sin_family = ip.sin_family = AF_INET;
from.sin_addr.S_un.S_addr = inet_addr(argv[2]);
to.sin_addr.S_un.S_addr = inet_addr(argv[3]);
Port = atoi(argv[4]);

if (from.sin_addr.S_un.S_addr ==  to.sin_addr.S_un.S_addr == INADDR_NONE ||
 CompareIP(from, to) == 1 || Port < 0 || Port > 65535) {Use(); return 0;}

WSADATA Info;
if (WSAStartup(MAKEWORD(2,2),&Info)) {Error(); return 0;};
if ((ws = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {Error(); return 0;}

printf(" ScanH\n\nScan les IP de %s à %s sur le port %s.\n\n", argv[2], argv[3], argv[4]);

ip = from;
ip.sin_port = htons(Port);
do{
printf("IP : %d.%d.%d.%d", ip.sin_addr.S_un.S_un_b.s_b1, ip.sin_addr.S_un.S_un_b.s_b2, ip.sin_addr.S_un.S_un_b.s_b3,
 ip.sin_addr.S_un.S_un_b.s_b4);

if (!connect(ws, (sockaddr *) &ip, sizeof(ip))){
printf(" OK");
closesocket(ws);
if ((ws = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {Error(); return 0;}
}
printf("\n");

ip.sin_addr.S_un.S_un_b.s_b4++;
if (ip.sin_addr.S_un.S_un_b.s_b4 > 255){ip.sin_addr.S_un.S_un_b.s_b4 = 0; ip.sin_addr.S_un.S_un_b.s_b3++;}
if (ip.sin_addr.S_un.S_un_b.s_b3 > 255){ip.sin_addr.S_un.S_un_b.s_b3 = 0; ip.sin_addr.S_un.S_un_b.s_b2++;}
if (ip.sin_addr.S_un.S_un_b.s_b2 > 255){ip.sin_addr.S_un.S_un_b.s_b2 = 0; ip.sin_addr.S_un.S_un_b.s_b1++;}
if (ip.sin_addr.S_un.S_un_b.s_b1 > 255) break;
} while (CompareIP(ip, to) == 2 || CompareIP(ip, to) == 3);
End();
return 0;
}

if (!strcmp(argv[1], "-p")){

SOCKADDR_IN ip;
long Port1, Port2, Port;
ip.sin_family = AF_INET;
ip.sin_addr.S_un.S_addr = inet_addr(argv[2]);
Port1 = atoi(argv[3]);
Port2 = atoi(argv[4]);
if (ip.sin_addr.S_un.S_addr == INADDR_NONE || Port1 < 0 || Port1 > 65535 || Port2 < 0 || Port2 > 65535 || Port1 > Port2)
 Use();

WSADATA Info;
WSAStartup(MAKEWORD(2, 2), &Info);
if ((ws = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {Error(); return 0;}

printf(" ScanH\n\nScan l'IP %s sur les ports %s à %s.\n\n", argv[2], argv[3], argv[4]);

Port = Port1;
do{
printf("Port : %d", Port);
ip.sin_port = htons(Port);
if (!connect(ws, (sockaddr *) &ip, sizeof(ip))){
printf(" OK", Port);
closesocket(ws);
if ((ws = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {Error(); return 0;}
}
printf("\n");
Port++;
}while(Port <= Port2);
End();
}
else{
Use();
}

return 0;
}

int CompareIP(SOCKADDR_IN IP1, SOCKADDR_IN IP2)
{
double Nb1, Nb2;
Nb1 = IP1.sin_addr.S_un.S_un_b.s_b4 + IP1.sin_addr.S_un.S_un_b.s_b3 * 0x100 + IP1.sin_addr.S_un.S_un_b.s_b2 * 0x10000 + IP1.sin_addr.S_un.S_un_b.s_b1 * 0x1000000;
Nb2 = IP2.sin_addr.S_un.S_un_b.s_b4 + IP2.sin_addr.S_un.S_un_b.s_b3 * 0x100 + IP2.sin_addr.S_un.S_un_b.s_b2 * 0x10000 + IP2.sin_addr.S_un.S_un_b.s_b1 * 0x1000000;
if (Nb1 > Nb2) return 1;
if (Nb1 < Nb2) return 2;
if (Nb1 == Nb2) return 3;
}

void Use()
{
printf(" ScanH\n\nUtilisation :\nScanH.exe -a IPdeDepart IPdeFin Port\nou\nScanH.exe -p IP PortdeDepart PortdeFin\n");
system("pause");
}

void End()
{
closesocket(ws);
WSACleanup();
system("pause");
}

void Error()
{
printf("\nErreur !\n");
system("pause");
}

Conclusion :


Merci à MPH pour sa source "CMphSock".

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
9
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
26 avril 2007

slt, enfin tu es le premier ou je trouve un scanner qui fonctionne en dos ou je peux ajouté un debut et une fin d'ip ex: 127.0.0.1 255.255.255.255 avec le mode port ameliore le svp les miens sont detect comme virus ex:scan500,Sfind et d'autre j'ai besoin du prompt donc continue enfin voila ;) si tu sais me renseigné quand tu avanceras par exemple comme dit plus haut ajoute des thread sinon ma connection ce fait bouffé :P
Je ne suis pas programmeur mais j'espere le devenir bientot :D donc j'ai surtout besoin que tu le fasse , je ne sais pas si ce que je dis est bien tourné j'espere que tu comprendra .
A bientot
Ton nouvelle adepte :P
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

mince j'ai du confondre 2 sources désolé
Messages postés
1
Date d'inscription
dimanche 10 juillet 2005
Statut
Membre
Dernière intervention
10 juillet 2005

COMMEN SE SERVIR DE TON SCAN
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

c'est classique pas besoin d'en faire une source ...
Messages postés
41
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
29 avril 2006

euh c:\dev-c++\lib\libwsock32.a désolé je me goure toujours avec les libs, moi aussi ^^
Afficher les 18 commentaires

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.