Sniffer qui déraille!

Signaler
Messages postés
5
Date d'inscription
lundi 18 juillet 2011
Statut
Membre
Dernière intervention
26 mars 2012
-
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012
-
Bonjour je débute actuellement dans la programmation réseau et je voudrais réaliser un petit sniffer wi-fi. (rien de comparable à tcpdump par exemple ). Bref je voulais juste faire vérifier mon code à de vrais programmeur car quand je le lance, il me renvoie un nombre infini de "(null)"

Merci beaucoup de vos futures réponses et bonne soirée à tous!

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/tcp.h>
#include 
#include <netinet/in.h>
#include <netinet/ip.h>

int sniff(char adress) {

char adress[15];
int port = 21;
const int port2 = 21;
struct sockaddr_in sin;
char fichier[50];

struct buffer {
char stampon[];
void *sbuf = &stampon;

char rtampon[];
void *rbuf = &rtampon;  
};

int s = socket(AF_INET,SOCK_RAW,IPPROTO_TCP);

system("netstat -rn");

printf("IP (toaddr = all IP's) : ");
scanf("%s", adress);

sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(adress);
sin.sin_port = htons(port);


while (1) {
connect(s, adress, 4);
send(s, *buf, 4096, 0);
recv(s, *buf, 4096, 0);
printf("%s\n", *buf);
port++;

if (port = 65536) {
port = port2;
}
} 
}

4 réponses

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Bonjour.

Je n'ai pas lancé ton programme. Mais en revanche certains lignes me font tilter:
- if (port 65536) > if (port == 65536)
- system("netstat -rn"); System ne récupère pas la valeur de retour potentielle, ni le code d'erreur. Utilise plutôt execve (avec un fork).
- D'où sort "buf" ? Je ne le vois déclarer nul part. Évite au maximum les variables globales.
- buf ou *buf ? Si buf est un pointeur (ou un tableau c'est pareil) alors c'est buf, et non *buf qu'il faut utiliser.

Conseil: Compile avec les flags ! (gcc -W -Wall -ansi -pedantic -g)

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Tu commet aussi une ambiguïté de variables avec adress en paramètre et en array ligne 1.
Bizard que gcc ne gueule pas as-tu activé des options permissives de gcc ? Normalement "adress[15] shadows a parameter".
Pareil pour
void *sbuf = &stampon;

Génère une erreur.. c'est vrai que ça choque un peut. Tu ne donne pas comme ça des valeurs dans une class (la struct en est une). Si tu veux initialiser tes variables passe par le constructeur et déclare le tout en une class et de préférence pas dans une autre fonction .
En plus
char stampon[]
est en fait un
char *stampon
donc pense a ne pas l'utiliser comme une chaîne ça peut être dangereux

Comme l'a souligné CptPingu, if(port 65154); C'est une erreur. Là il donne la valeur 65215 à port et vérifie si ça de fait pas 0 (forcément que non). L'opérateur de comparaison c'est .
Ca fait déjà un packet de problèmes et tu devrais vérifier les retours de connect, send, recv .. (pas printf ).
Et
int sniff(char adress)

c'est un char pas une chaine ... bref j'ai du mal a comprendre comment tu as pu le compiler
Messages postés
5
Date d'inscription
lundi 18 juillet 2011
Statut
Membre
Dernière intervention
26 mars 2012

Merci beaucoup les gars, grâce à vous j'ai pu corrigé un certain nombre d'erreurs dans ma fonction (pas la totalité mais une grande partie ) . En fait pour tout vous dire, je suis sous Mac OS X et j'utilise Xcode pour compiler mes progs et je sais pas pourquoi, tout d'un coup j'ai beau faire des fautes et des fautes mais il m'indique toujours que la compilation est un succès, mais de toutes façon je n'ai plus ce problème

Merci encore et bonne journée
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

De rien, clique résolu pour les futures recherches ..