[C] Scanner de port utilise socket version linux

cs_firemax Messages postés 24 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 19 août 2005 - 9 août 2005 à 18:28
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 9 août 2005 à 19:16
Salut :)



J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :(

Je n'est aucun warning lors de la compilation mais lors de l'execution j'ai une erreur de segmentation :'(



Contenu de lib.h :

#ifndef _LIB_H_

#define _LIB_H_



#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <string.h>

#include

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

#include <sys/types.h>

#include

#include <errno.h>

#endif




Contenu de scanport.c

#include "lib.h"



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

{

if(argc!=2){printf("\nUsage %s <Host>\n\n",argv[0]);return 1;}

int sock;

int port,o,f,i;

struct sockaddr_in sin;

char to[65535];

printf("\nPort Scanner By Firemax \n");



//creation socket

if((sock=socket(PF_INET,SOCK_STREAM,0)) < 0)

{

perror("Socket");

}



for(port=1;port<=65535;port++)

{

//Intialisation structure

bzero(&sin,sizeof(sin));

sin.sin_family=PF_INET;

sin.sin_port=htons(port);

sin.sin_addr.s_addr=inet_addr(argv[1]);



//Connection au serveur

if((connect(sock,(struct sockaddr *)&sin,sizeof(sin))) == -1)

{f++;}

else

{o++;to[i]=port;i++;}

port++;

}

printf("\n%d port ouvert\n",o);

printf("%d port fermer\n",f);

for(i=0;i<=o;i++)

{

printf("%d ",to[i]);

}



//fin du programe

shutdown(sock,2);

close(sock);

return 0;



}

3 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 août 2005 à 18:53
Salut,

Ben déja tu initialises pas les variables i, o, f.

Ensuite dans un char on peut pas stocker un numéro de port, c'est trop petit, il faut un unsigned short minimum.

Pour ta boucle principale, il ne faut pas faire
for(port=0;port<=65535;port++) mais for(port=0;port<65535;port++)
car to[65535] n'existe pas.
0
cs_firemax Messages postés 24 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 19 août 2005
9 août 2005 à 19:02
Quoi ?



J'ai legerement modifier mais je pige toujours pas pk port=0 ??



#include "lib.h"



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

{

if(argc!=2){printf("\nUsage %s <Host>\n\n",argv[0]);return 1;}

int sock;

int port,o,f,i;

struct sockaddr_in sin;

char to[65535+1];

printf("\nPort Scanner By Firemax \n");



//creation socket

if((sock=socket(PF_INET,SOCK_STREAM,0)) < 0)

{

perror("Socket");

}



for(port=1;port<=65535;port++)

{

//Intialisation structure

bzero(&sin,sizeof(sin));

sin.sin_family=PF_INET;

sin.sin_port=htons(port);

sin.sin_addr.s_addr=inet_addr(argv[1]);



//Connection au serveur

if((connect(sock,(struct sockaddr *)&sin,sizeof(sin))) == -1)

{f++;}

else

{o++;to[i]=port;i++;}

port++;

}

printf("\n%d port ouvert\n",o);

printf("%d port fermer\n",f);

for(i=0;i<=o;i++)

{ printf("%d ",to[i]); }



//fin du programe

shutdown(sock,2);

close(sock);

return 0;



}
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 août 2005 à 19:16
Salut,

L'erreur ne viens pas du port =0 mais de la condition, si tu fais port
<65535 la derniere iteration sera faite avec port 65535 ce qui
est dangereux car ton tableau ne fait que 65535 cases.

Ensuite faut plutot déclarer un tableau d'unsigned short pour stocker tes numéros de ports.

Et il faut INITIALISER i, o et f AVANT de les utiliser.
0
Rejoignez-nous