begin process at 2012 02 08 09:04:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > IP,MASK,MAC SOUS LINUX

IP,MASK,MAC SOUS LINUX


 Information sur la source

Note :
9,5 / 10 - par 4 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Classé sous :linux, ip, masque, mac Niveau :Débutant Date de création :10/08/2006 Date de mise à jour :11/08/2006 10:03:50 Vu :7 457

Auteur : Twinuts

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Ce petit code montre comment on peut :
  - Itérer sur les devices disponible (eth0, eth1, lo, vmnet si il y en a, ...)  (if_nameindex)
  - Récupérer l'adresse ip du device (iocl)
  - Récupérer le masque de sous réseau du device (ioctl)
  - Récupérer l'adresse mac (ioctl)


Source

  • #include <sys/ioctl.h> // pour ioctl
  • #include <net/if.h> // pour ifreq
  • #include <string.h> // pour strcpy
  • #include <unistd.h> // pour close
  • #include <arpa/inet.h> // pour inet_ntoa
  • #include <stdio.h> // pour printf
  • #include <errno.h> // pour errno
  • int main(int argc, char **argv) {
  • int descSock;
  • struct ifreq devea;
  • struct sockaddr_in *sa;
  • //récupération d'un pointeur sur toutes les cartes disponible;
  • struct if_nameindex *nameindex = if_nameindex();
  • if(nameindex == NULL){
  • perror("if_nameindex ");
  • return errno;
  • }
  • int i = 0;
  • while(1){
  • if(nameindex[i].if_name == NULL) break;//il n'y a plus de cates on sort
  • //Copie du nom dans la structure ifreq et au passage on prépare l'index pour la prochaine carte
  • strcpy(devea.ifr_name, nameindex[i++].if_name);
  • //Affichage de celui-ci
  • printf("%s\n", devea.ifr_name);
  • //on ouvre un socket pour chacune des cartes que l'on closera après
  • descSock = socket(AF_INET, SOCK_DGRAM, 0);
  • if (descSock < 0){
  • perror("socket ");
  • //On relache le pointeur dynamiquement alloue par if_nameindex
  • if_freenameindex(nameindex);
  • return errno;
  • }
  • //Récupération de l'adresse ip
  • printf("\tIP\t:\t");
  • if (ioctl(descSock,SIOCGIFADDR, &devea) < 0)
  • printf("ERROR MAYBE NOT STARTED ?\n");
  • else{
  • //Récupère la structure sockaddr_in contenue dans ifreq
  • sa = (struct sockaddr_in *)&devea.ifr_ifru.ifru_addr;
  • //Convertion en ascii
  • printf("%s\n", inet_ntoa(sa->sin_addr));
  • }
  • //Récupération du masque de sous réseau
  • printf("\tMASK\t:\t");
  • if (ioctl(descSock,SIOCGIFNETMASK, &devea) < 0)
  • printf("ERROR MAYBE NOT STARTED ?\n");
  • else{
  • //Récupère la structure sockaddr_in contenue dans ifreq
  • sa = (struct sockaddr_in*) &devea.ifr_ifru.ifru_netmask;
  • //Convertion en ascii
  • printf("%s\n", inet_ntoa(sa->sin_addr));
  • }
  • //Récupération de la MAC adresse
  • printf("\tMAC\t:\t");
  • if (ioctl(descSock,SIOCGIFHWADDR, &devea) < 0)
  • printf("ERROR\n");
  • else{
  • //Affichage de la mac adresse
  • printf("%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n\n",
  • (devea.ifr_hwaddr.sa_data[0]&0xFF),
  • (devea.ifr_hwaddr.sa_data[1]&0xFF),
  • (devea.ifr_hwaddr.sa_data[2]&0xFF),
  • (devea.ifr_hwaddr.sa_data[3]&0xFF),
  • (devea.ifr_hwaddr.sa_data[4]&0xFF),
  • (devea.ifr_hwaddr.sa_data[5]&0xFF));
  • }
  • //Ferme le socket pour passer au prochain
  • close(descSock);
  • }
  • if(i == 0)//petit affichage pour le fun :D
  • printf("Aucune carte disponible !!!\n");
  • //Relache le pointeur dynamiquement alloue par if_nameindex
  • if_freenameindex(nameindex);
  • return 0;
  • }
#include <sys/ioctl.h> // pour ioctl
#include <net/if.h>    // pour ifreq
#include <string.h>    // pour strcpy
#include <unistd.h>    // pour close
#include <arpa/inet.h> // pour inet_ntoa
#include <stdio.h>     // pour printf
#include <errno.h>     // pour errno


int main(int argc, char **argv) {
	int descSock;
	struct ifreq devea;
	struct sockaddr_in *sa;
	
	//récupération d'un pointeur sur toutes les cartes disponible;
	struct if_nameindex *nameindex = if_nameindex();
	if(nameindex == NULL){
		perror("if_nameindex ");
		return errno;
	}
	
	
	int i = 0;
	while(1){
		if(nameindex[i].if_name == NULL) break;//il n'y a plus de cates on sort
		//Copie du nom dans la structure ifreq et au passage on prépare l'index pour la prochaine carte
		strcpy(devea.ifr_name, nameindex[i++].if_name);
		//Affichage de celui-ci
		printf("%s\n", devea.ifr_name);
		//on ouvre un socket pour chacune des cartes que l'on closera après
		descSock = socket(AF_INET, SOCK_DGRAM, 0);
		if (descSock < 0){
			perror("socket ");
			//On relache le pointeur dynamiquement alloue par if_nameindex
			if_freenameindex(nameindex);
		        return errno;
		}
		
		//Récupération de l'adresse ip
		printf("\tIP\t:\t");
		if (ioctl(descSock,SIOCGIFADDR, &devea) < 0)
			printf("ERROR MAYBE NOT STARTED ?\n");
		else{
                        //Récupère la structure sockaddr_in contenue dans ifreq
			sa = (struct sockaddr_in *)&devea.ifr_ifru.ifru_addr;
                        //Convertion en ascii 
			printf("%s\n", inet_ntoa(sa->sin_addr));
		}
		
		//Récupération du masque de sous réseau
		printf("\tMASK\t:\t");
		if (ioctl(descSock,SIOCGIFNETMASK, &devea) < 0)
			printf("ERROR MAYBE NOT STARTED ?\n");
		else{
                        //Récupère la structure sockaddr_in contenue dans ifreq
			sa = (struct sockaddr_in*) &devea.ifr_ifru.ifru_netmask;
                        //Convertion en ascii 
			printf("%s\n", inet_ntoa(sa->sin_addr));
		}
		
		//Récupération de la MAC adresse
		printf("\tMAC\t:\t");
		if (ioctl(descSock,SIOCGIFHWADDR, &devea) < 0)
			printf("ERROR\n");
		else{
                        //Affichage de la mac adresse
			printf("%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n\n", 
					(devea.ifr_hwaddr.sa_data[0]&0xFF),
					(devea.ifr_hwaddr.sa_data[1]&0xFF), 
					(devea.ifr_hwaddr.sa_data[2]&0xFF),
					(devea.ifr_hwaddr.sa_data[3]&0xFF),
					(devea.ifr_hwaddr.sa_data[4]&0xFF),
					(devea.ifr_hwaddr.sa_data[5]&0xFF));
		}
		
		//Ferme le socket pour passer au prochain
		close(descSock);
	}

        if(i == 0)//petit affichage pour le fun :D
        	printf("Aucune carte disponible !!!\n");
	
	//Relache le pointeur dynamiquement alloue par if_nameindex
	if_freenameindex(nameindex);
	
	return 0;
}



 Historique

11 août 2006 10:03:50 :
Correction des accents

 Sources du même auteur

Source avec une capture LINUX OSD
Source avec Zip LINUX MODIFICATION DU VOLUME D'UN MIXER AUDIO
Source avec Zip Source avec une capture COUPER UNE FENÊTRE (X11)

 Sources de la même categorie

Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas
Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
Source avec Zip Source avec une capture SUIVI DE PRODUCTION ONDULEUR PHOTOVOLTAÏQUE SOLARMAX par brunovan
Source avec Zip MINICHAT MULTI-CLIENT par wisar
SOCKET CPP par baptchr55

 Sources en rapport avec celle ci

Source avec une capture COLORIMÈTRE NUMÉRIQUE LINUX par valchek
Source avec Zip Source avec une capture SOKOBAN EN C POUR DÉBUTANT (VERSION AMÉLIORÉE BASÉE SUR LE T... par eustatika
Source avec Zip [MYLIB] GESTION DE FICHIERS par Galaad2908
0X0SCAN_PORT V1 par 0x0syscall
Source avec Zip Source avec une capture [WIN32/LINUX/MAC][WXWIDGETS] CONVERTISSEUR DE FICHIER IMAGE ... par fredcl

Commentaires et avis

Commentaire de brodeur le 28/09/2006 08:42:34

Super code 10/10. Ca marche nickel sur Linux. Merci, ca faisait un petit moment que je cherchais ce code.

Brodeur

Commentaire de Twinuts le 28/09/2006 09:08:00 administrateur CS

Merci ;)

avec la note c'est mieux (huhu)

Commentaire de crunch117 le 25/10/2006 18:36:00

Pas mal du tout, programme simple, concis, court donc pas besoin de structure exotique.

8/10

@++

Commentaire de sploff_splaf le 05/04/2007 23:31:05

Un grand merci pour ce code. Il est clair, facilement réutilisable et modifiable.

10/10

Commentaire de moi zork le 29/08/2008 23:53:41 10/10

clair,bien commenté ... genial !
10/10

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

TCP/IP [C++ Linux G++] Pas encore poste (?) [ par Niko2012 ] Bon, je suis en train de m'initier au tcp/ip sous linux et j'en bave...je recherche:-de bon tutoriels (si vous en connaissez en francais c mieux)-des Masque de saisie sous C++ Buider 6 [ par ivdz ] Bonjour,Comment générer le masque de saisie d'une adresse IP. J'ai créé un TMaskEdit *TMEpuis j'ai fait TME-&gt;EditMask="000.000.000.000"Cela marche obtenir son ip (linux) [ par Anacr0x ] Comme le dit le titre, je cherche a obtenir l'IP de mon ordi sous linux (si possible avec QT ca sympa, mais je rêve pas trop)Je rencontre pas mal de d IP adresses, handover, linux [ par alex1982 ] Bonjour,Je suis actuellement ent train de r&#233;aliser un prototype, afin de simuler l'int&#233;gration de MIP au sein d'IMS...Mais ma question est p [langage c] incrémentation d'une ip sous linux [ par azurone ] [alors voilà je reçoit une ip au format xxx.xxx.xxx.xxxdepuis un char*argc[]j'aimerais savoir comment l'incrémenterje souhaite faire un scanner de pla chat TCP/IP sous linux avec C [ par hassanamigos ] bonsoir tous le monde, al&#233; aidez moi je vous en prie!HELP MEs'il vous pailt j&#233; besion d'aide j&#233; 12 projet sur le chat CLIENT/SERVEUR (T [Linux] Obtenir l'adresse IP Local [C] [ par ZedMaTrix ] Hello à tous !! Voilà, il me semble que j'avais posté, je sais plus ( je retrouve plus le poste )... <img src="http://www.sited Recuperation d'adresse IP sous LINUX FEDORA [ par diablo31170 ] Salut &#224; tous, J'ai cherch&#233; et je n'ai pas trouver un programme ( j'en ai trouv&#233; et ils ne marchent pas) qui permet de R&#233;cuperer e Obtenir l'adresse MAC d'une IP [ par metos ] Bonjour à tous,     J'ai une adresse IP, et je souhaiterais obtenir l'adresse MAC. Comment peut-on le faire en C?Merci d'avancemetos Compiler un programme sous linux / Mac [ par maxwells ] Bonjour à tous,l'année dernière j'ai repris les sources d'un tétris en SDL et je l'ai arrangé. J'ai ajouté la possibilité de pouvoir jouer avec ses pr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales