Accueil > > > IP,MASK,MAC SOUS LINUX
IP,MASK,MAC SOUS LINUX
Information sur la source
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
Sources de la même categorie
Commentaires et avis
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->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éaliser un prototype, afin de simuler l'inté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é aidez moi je vous en prie!HELP MEs'il vous pailt jé besion d'aide jé 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 à tous, J'ai cherché et je n'ai pas trouver un programme ( j'en ai trouvé et ils ne marchent pas) qui permet de Ré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
|
Derniers Blogs
TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit TECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVERTECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVER par ROMELARD Fabrice
Speaker : Nadia Ben El Kadi Configuration machine La session commence par la toute première question à se poser lors de la mise en place d'environnement SQL Server, la configuration des machines : Type de mac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SITECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SI par ROMELARD Fabrice
Speakers : Fabrice Barbin, Samuel Blanchard, Julien Lo Presti Titre Prometteur et attractif invitant à voir comment lier le composant ludique Kinect dans le cadre d'une structure IT classique, notamment au travers de la plat...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOURTECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOUR par ROMELARD Fabrice
KeyNotes du premier jour pour les développeurs. La session est principalement axée sur une des principales directions prise par Microsoft à travers tous ses nouveaux produits : Cloud privé ou public (Solution Azure) ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
C++ C++ par yesoun1
Cliquez pour lire la suite par yesoun1 OPNETOPNET par hth21
Cliquez pour lire la suite par hth21 RE : ARBRE BINAIRERE : ARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|