IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Récupérer des colonnes d'un fichier csv en C


Sujet :

C

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2022
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Récupérer des colonnes d'un fichier csv en C
    Bonsoir,

    J'ai un projet à rendre pour dans quelques semaines et je rencontre des difficultés pour récupérer uniquement 3 des 15 colonnes du fichier. Je dois hacker le mot de passe d'un wifi avec Kali Linus, mais pour cela il faut utiliser le langage C comme script. J'ai réussi à récupérer la sortie de la liste des mots de passe mais pour écrire une commande je n'ai besoin que des colonnes BSSID (colonne 1), channel (colonne 4) et ESSID (colonne 14). J'ai pensé à les insérer dans un tableau.

    Le fichier se présente comme ceci :

    BSSID, First time seen, Last time seen, channel, Speed, Privacy, Cipher, Authentication, Power, # beacons, # IV, LAN IP, ID-length, ESSID, Key
    68:A3:78:6E:FE:03, 2022-12-11 18:15:53, 2022-12-11 18:15:58, 9, 195, WPA2 WPA, CCMP TKIP, PSK, -35, 7, 9, 0. 0. 0. 0, 15, Freebox_achouak,
    50:6F:0C:1C:D1:40, 2022-12-11 18:15:53, 2022-12-11 18:15:58, 6, 130, WPA2 WPA, CCMP, PSK, -69, 7, 3, 0. 0. 0. 0, 13, Bbox-6FFA9677,
    F4:CA:E5:90:A0:79, 2022-12-11 18:15:53, 2022-12-11 18:15:58, 2, 195, WPA2, CCMP TKIP, MGT, -68, 11, 0, 0. 0. 0. 0, 15, FreeWifi_secure,
    14:0C:76:89:93:3C, 2022-12-11 18:15:53, 2022-12-11 18:15:57, 5, 195, WPA2, CCMP TKIP, MGT, -80, 8, 0, 0. 0. 0. 0, 15, FreeWifi_secure,
    F4:CA:E5:90:A0:78, 2022-12-11 18:15:53, 2022-12-11 18:15:58, 2, 195, WPA2, CCMP, PSK, -68, 6, 0, 0. 0. 0. 0, 8, BOQALA75,
    18:82:8C:10:81:32, 2022-12-11 18:15:53, 2022-12-11 18:15:53, 1, 130, WPA2, CCMP, PSK, -79, 2, 0, 0. 0. 0. 0, 12, Livebox-924A,


    Voici mon code (pièce jointe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    typedef struct {
    		char bssid[17];
    		char First[19];
    		char Last[19];
    		char channel[2];
    		char Speed[3];
    		char Privacy[8];
    		char Cipher[20];
    		char Authentication[20];
    		char Power[20];
    		char beacons[20];
    		char IV[20];
    		char LANIP[20];
    		char IDlength[20];
    		char ESSID[20];
    		char Key[20];
    		}wifi;
     
    int main()
    {
    	//ouverture du fichier
    	FILE *listwifi;
    	listwifi = fopen("listewifi.csv","r");
    	if(listwifi==NULL){
    		printf("Erreur d'ouverture du fichier.");
    		exit(EXIT_FAILURE);
    	}
    	wifi wifis[1024];
    	int read=1;
    	int records=0;
    	do{
    	read = fscanf(listwifi,"%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n",
                      wifis[records].bssid, 
                      wifis[records].First,
                      wifis[records].Last,
                      wifis[records].channel,  
                      wifis[records].Speed,
                      wifis[records].Privacy,
                      wifis[records].Cipher,
                      wifis[records].Authentication,
                      wifis[records].Power,
                      wifis[records].beacons,
                      wifis[records].IV,
                      wifis[records].LANIP,
                      wifis[records].IDlength,
                      wifis[records].ESSID,
                      wifis[records].Key); 
     
        records++;
     
        if (ferror(listwifi))
        {
          printf("Error reading file.\n");
          return 1;
        }
     
      } while (!feof(listwifi));
      fclose(listwifi);
     
      // print out each of the records that was read 
      for (int i = 0; i < records;i++){
        printf("%s",wifis[i].bssid);
        printf("%s",wifis[i],channel);
        printf("%s",wifis[i],ESSID);
        }
        return 0;
    }
    Il n'affiche pas ce que j'aimerais mais tout le fichier. Pourriez-vous m'aider svp ?

    Merci par avance pour votre aide.
    Fichiers attachés Fichiers attachés
    • Type de fichier : c hack.c (1,6 Ko, 42 affichages)

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonsoir,

    Pour une chaîne de caractères, la taille à réserver est le nombre max de caractère + 1 pour le terminateur. C'est ce 17 la cause du problème!
    Et tu n'es pas obligé de récupérer les champs qui ne t'intéresses pas.
    Et attention, la fonction feof() n'indiques pas que l'on est à la fin du fichier, elle indique que la dernière opération a tenté d'aller au delà de la fin. D'où: ton code risque de lire une ligne imaginaire de trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    typedef struct {
        char bssid[17+1];
        char channel[2+1];
        char ESSID[20+1];
    }wifi;
     
    ... ...
     
            read = fscanf(listwifi,"%s,%*s,%*s,%s,%*s,%*s,%*s,%*s,%*s,%*s,%*s,%*s,%*s,%s,%*s\n",
                    wifis[records].bssid,
                    wifis[records].channel,
                    wifis[records].ESSID );
            if ( read != 15 )  // erreur ligne incomplète
                break;            // ne pas utiliser ces données
            records++;
            ... ...

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par coco545 Voir le message
    je rencontre des difficultés pour récupérer uniquement 3 des 15 colonnes du fichier...pour cela il faut utiliser le langage C comme script.
    Donc déjà le C ce n'est pas un langage de script mais un langage compilé, qui produit un exécutable. Ca c'est fait.

    Et sinon t'as pas le droit d'utiliser des outils Linux déjà existants style grep/cut/awk ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2022
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour vos explications et votre aide dalfab. J'ai compilé le nouveau code et ça ne m'affiche rien...
    Est-ce normal ?

    Et non je n'ai pas le droit d'utiliser des outils Linux. Que du C.

  5. #5
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    Par défaut
    Hello,

    Citation Envoyé par coco545 Voir le message
    (....) J'ai compilé le nouveau code et ça ne m'affiche rien... (....)
    Et peut-on voir le nouveau code ? Et pour le poster,
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2022
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Excusez-moi pour le retard, pour vous répondre edgarjacobs, le nouveau code est celui qu’a envoyé dalfab (mot pour mot).

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par coco545 Voir le message
    J'ai compilé le nouveau code et ça ne m'affiche rien...

    ...pour vous répondre edgarjacobs, le nouveau code est celui qu’a envoyé dalfab (mot pour mot).
    Donc déjà mot pour mot c'est un peu difficile vu que le code de dalfab n'est pas complet (il n'a écrit que les phases de récupération en te laissant combler le reste). Et comme il n'a pas fait les affichages dans son code, si vraiment tu l'as pris mot pour mot alors un peu normal que ça ne t'affiche rien.

    Mais en réalité ça ne peut pas fonctionner car il ne t'a mis qu'un exemple avec 3 champs (bssid, channel et EDDID) pour te montrer le principe et à toi de 1) le comprendre et 2) l'appliquer pour tous tes champs. Sans oublier ensuite l'affichage...

    Accessoirement on t'a dit aussi que feof() ne servait pas à détecter une fin de fichier. Enfin si, ça la détecte mais trop tard car son rôle n'est pas de bloquer la lecture. Donc quand on te dit de donner ton nouveau code, c'est aussi pour voir comment tu as géré cette information.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    J'avais vu une espace avant la virgule, elle est après. Ça complique un peu la ligne de lecture (" %[^,]" ça ignore les espaces, puis lit tant que ça c'est pas virgule, et avec une étoile avant ça ne stocke le résultat nulle part.)
    Le code complet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef struct {
    	char bssid[17+1];
    	char channel[2+1];
    	char ESSID[20+1];
    }wifi;
     
    int main() {
    	//ouverture du fichier
    	FILE* listwifi = fopen( "../listewifi.csv", "r" );
    	if ( listwifi==NULL ) {
    		printf( "Erreur d'ouverture du fichier." );
    		return EXIT_FAILURE;
    	}
    	int records = 0;
    	wifi wifis[1024];
     
    	fscanf( listwifi, "%*[^\n] " );  // sauter la ligne d'entête
    	for(;;) {
    		int read = fscanf( listwifi, " %[^,], %*[^,], %*[^,], %[^,], %*[^,], %*[^,], %*[^,], %*[^,], %*[^,], %*[^,], %*[^,], %*[^,], %*[^,], %[^\n]\n",
    			wifis[records].bssid,
    			wifis[records].channel,
    			wifis[records].ESSID );
    		if ( read < 3 )       // erreur ligne incomplète
    			break;            // ne pas utiliser ces données
    		records++;
    		if ( records >= 1024 )
    			break;
    	}
    	if ( ferror( listwifi ) ) {
    		printf( "Error reading file.\n" );
    		return EXIT_FAILURE;
    	}
    	fclose( listwifi );
     
    	// print out each of the records that was read 
    	for ( int i = 0; i < records; i++ ) {
    		printf( "%s ", wifis[i].bssid );
    		printf( "%s ", wifis[i].channel );
    		printf( "%s\n", wifis[i].ESSID );
    	}
    	return 0;
    }

Discussions similaires

  1. [MySQL] Selectioner des colonnes d'un fichier CSV avant import mysql POO
    Par Xbase dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/10/2016, 20h29
  2. changer l'ordre des colonnes d'un fichier csv
    Par Christophe P. dans le forum Développement de jobs
    Réponses: 14
    Dernier message: 20/05/2015, 11h02
  3. Supprimer des colonnes d'un fichier csv
    Par elhadj88 dans le forum MATLAB
    Réponses: 5
    Dernier message: 21/02/2013, 17h15
  4. Récupérer une colonne d'un fichier CSV à l'aide de l'entête
    Par drake56 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 06/01/2010, 20h23
  5. Réponses: 4
    Dernier message: 13/12/2006, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo