|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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
Sources en rapport avec celle ci
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
|