Récupérer l'adresse IP de mon PC
Résolu/Fermé
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
-
27 mai 2008 à 09:43
Stephen - 9 sept. 2008 à 11:29
Stephen - 9 sept. 2008 à 11:29
A voir également:
- Récupérer l'adresse IP de mon PC
- Ethernet n'a pas de configuration ip valide - Guide
- Rechercher ou entrer l'adresse - Guide
- Comment connaître son adresse ip - Guide
- Darkino nouvelle adresse - Guide
- Test performance pc - Guide
15 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
27 mai 2008 à 16:14
27 mai 2008 à 16:14
Salut.
utilise inet_addr() (dans windows.h ou arpa/inet.h)
sockaddr_in a;
a.sin_addr.s_addr=htonl(INADDR_ANY);
Ton adresse IP est alors contenu dans "a.sin_addr.s_addr"
Ensuite, il faut utiliser la bonne conversion pour l'afficher sous la forme d'une IP en 4 morceau.
ensuite, pour le nom DNS, tu peux utiliser gethostbyaddr()
d'après le man, il faut plutot utiliser la structure hostent.
utilise inet_addr() (dans windows.h ou arpa/inet.h)
sockaddr_in a;
a.sin_addr.s_addr=htonl(INADDR_ANY);
Ton adresse IP est alors contenu dans "a.sin_addr.s_addr"
Ensuite, il faut utiliser la bonne conversion pour l'afficher sous la forme d'une IP en 4 morceau.
ensuite, pour le nom DNS, tu peux utiliser gethostbyaddr()
d'après le man, il faut plutot utiliser la structure hostent.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 mai 2008 à 10:13
28 mai 2008 à 10:13
Quel est le type de INADDR_ANY ? bien entendu, c'est UNE adresse IP, en as tu plusieurs ? (tu as l'adresse réseau classique lorsque tu as ne carte, et la boucle localhost en 127.0.0.1, INADDR_ANY prend normalement l'adresse du réseau par défaut et pas la boucle locale)
Si oui, essai avec la fonction gethostbyname() avec "localhost" comme nom, et toute les adresses devraient être contenues dans la structure hostent.
Si oui, essai avec la fonction gethostbyname() avec "localhost" comme nom, et toute les adresses devraient être contenues dans la structure hostent.
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
28 mai 2008 à 10:33
28 mai 2008 à 10:33
Lorsque je compile mon programme j'obtiens ceci :
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\récupérer l'adresse ip\récupérer l'adresse ip\récupérer l'adresse ip.cpp(11) : error C2664: 'inet_ntoa' : impossible de convertir le paramètre 1 de 'u_long' en 'in_addr'
Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
et ligne 11 j'ai :
inet_ntoa(htonl(INADDR_ANY));
Autre chose, pour récupérer et stocker ce résultat je peux utiliser une variable chaine de caractère comme ceci :
adresseIP=inet_ntoa(htonl(INADDR_ANY)); ?
Après il me resterait à analyser ce tableau avec des boucle du genre TANTQUE pour en isoler les 4 parties...
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\récupérer l'adresse ip\récupérer l'adresse ip\récupérer l'adresse ip.cpp(11) : error C2664: 'inet_ntoa' : impossible de convertir le paramètre 1 de 'u_long' en 'in_addr'
Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
et ligne 11 j'ai :
inet_ntoa(htonl(INADDR_ANY));
Autre chose, pour récupérer et stocker ce résultat je peux utiliser une variable chaine de caractère comme ceci :
adresseIP=inet_ntoa(htonl(INADDR_ANY)); ?
Après il me resterait à analyser ce tableau avec des boucle du genre TANTQUE pour en isoler les 4 parties...
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 mai 2008 à 11:53
28 mai 2008 à 11:53
dans la page de man :
donc, un bon cast bien bourrin devrai fonctionner, ou alors :
struct in_addr { unsigned long int s_addr; }
donc, un bon cast bien bourrin devrai fonctionner, ou alors :
in_addr tmp;tmp.s_addr=htonl(INADDR_ANY);puis tu affect :
adresseIP=inet_ntoa(tmp);Pourquoi veux tu isoler les 4 parties ?
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
28 mai 2008 à 13:23
28 mai 2008 à 13:23
Avec ce code :
#include "stdafx.h"
#include "windows.h"
int _tmain( int argc, _TCHAR* argv[] )
{
char adresseIP;
in_addr tmp;
tmp.s_addr=htonl(INADDR_ANY);
adresseIP=inet_ntoa(tmp);
adresseIP;
}
J'ai encore cette erreur...
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\récupérer l'adresse ip\récupérer l'adresse ip\récupérer l'adresse ip.cpp(13) : error C2440: '=' : impossible de convertir de 'char *' en 'char'
Aucun contexte dans lequel cette conversion est possible
En c# j'aurais déclaré adresseIP en string mais ya pas ça en c++ alors je sais pas comment faire...
Je veux récupérer l'adresse IP en 4 partie après car il va me faloir ensuite utiliser la partie host pour que le DNS me fournisse un hostname en fonction de l'adresse IP (et plus particulièrement de la partie host...)
NB : et si la machine possède plusieurs carte réseau... comment le programme va t-il gérer cela??
#include "stdafx.h"
#include "windows.h"
int _tmain( int argc, _TCHAR* argv[] )
{
char adresseIP;
in_addr tmp;
tmp.s_addr=htonl(INADDR_ANY);
adresseIP=inet_ntoa(tmp);
adresseIP;
}
J'ai encore cette erreur...
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\récupérer l'adresse ip\récupérer l'adresse ip\récupérer l'adresse ip.cpp(13) : error C2440: '=' : impossible de convertir de 'char *' en 'char'
Aucun contexte dans lequel cette conversion est possible
En c# j'aurais déclaré adresseIP en string mais ya pas ça en c++ alors je sais pas comment faire...
Je veux récupérer l'adresse IP en 4 partie après car il va me faloir ensuite utiliser la partie host pour que le DNS me fournisse un hostname en fonction de l'adresse IP (et plus particulièrement de la partie host...)
NB : et si la machine possède plusieurs carte réseau... comment le programme va t-il gérer cela??
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 mai 2008 à 14:18
28 mai 2008 à 14:18
Et si, string existe en C++ !
#include <string>
puis :
std::string adesseIP=inet...
une chaine de caratère, c'est un pointeur sur un caractère, donc de type char* pas char !
Si le PC a plusieurs cartes réseau, il prend une adresse au hasard.
Voir gethostbyname et struct hostent si tu veux toutes les récupérer.
Le C# il vau mieu éviter.
#include <string>
puis :
std::string adesseIP=inet...
une chaine de caratère, c'est un pointeur sur un caractère, donc de type char* pas char !
Si le PC a plusieurs cartes réseau, il prend une adresse au hasard.
Voir gethostbyname et struct hostent si tu veux toutes les récupérer.
Le C# il vau mieu éviter.
Désolé de m'incruster dans la conversation mais j'ai entendu dire que lorsqu'il y avait plusieur carte réseau, l'addresse ip était choisie au hasard ? L'adresse ip ne peut elle pas rester statique (fixe) malgrés plusieurs carte réseau ? Peut on alors par inversement choisir une autre adresse ip malgrés que l'on posséde qu'une carte réseau ? car j'ai entendu qu'il existerait des adresses ip qui changerai a chaque connexe=ion et sans doute elle serai défini par le serveur dns.
Merci de bien vouloir me répondre car je n'ai jamais trouvé de réponse claire dessus.
Merci de bien vouloir me répondre car je n'ai jamais trouvé de réponse claire dessus.
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
>
Jean
28 mai 2008 à 15:59
28 mai 2008 à 15:59
Désolé mais perso je n'ai pas la réponse à cela...
Au sujet du string, le compilateur me dit qu'il ne parvient pas à trouver string.h... où le trouver??
Au sujet du string, le compilateur me dit qu'il ne parvient pas à trouver string.h... où le trouver??
Jean
>
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
28 mai 2008 à 16:03
28 mai 2008 à 16:03
Bonjour julow je me demandai si une fois que ton code sera fini si tu pouvai me le passer pourr mon projet ?
Merci à toi!!
Merci à toi!!
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
>
Jean
28 mai 2008 à 16:24
28 mai 2008 à 16:24
Pas de problème... Mais faut déjà que je le termine parce que je patoge en C++!
Une solution Char Snippeur?
Une solution Char Snippeur?
Jean
>
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
29 mai 2008 à 17:06
29 mai 2008 à 17:06
Merci beacoup à toi !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 mai 2008 à 17:11
28 mai 2008 à 17:11
Tu compile en quoi ?
fait une recherche sur le disque dur de string.h, il doit être dans include.
Jean, j'ai rien compris !
fait une recherche sur le disque dur de string.h, il doit être dans include.
Jean, j'ai rien compris !
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
29 mai 2008 à 08:36
29 mai 2008 à 08:36
Je compile avec Visual C++. Donc en mode c++ (normal quoi...).
Le header string.h est bien présent mais pourtant il est sauté lors de l'exécution... étrange! On me dit de recompiler l'en tête ou d'ajouter le header stdafx.h (ce qui est déjà fait...).
Je comprends plus rien là!
Voici mon code actuel :
#include <string.h>
#include <stdafx.h>
#include <windows.h>
int _tmain( int argc, _TCHAR* argv[] )
{
string adresseIP;
in_addr tmp;
tmp.s_addr=htonl(INADDR_ANY);
adresseIP = inet_ntoa(tmp);
adresseIP;
}
Le header string.h est bien présent mais pourtant il est sauté lors de l'exécution... étrange! On me dit de recompiler l'en tête ou d'ajouter le header stdafx.h (ce qui est déjà fait...).
Je comprends plus rien là!
Voici mon code actuel :
#include <string.h>
#include <stdafx.h>
#include <windows.h>
int _tmain( int argc, _TCHAR* argv[] )
{
string adresseIP;
in_addr tmp;
tmp.s_addr=htonl(INADDR_ANY);
adresseIP = inet_ntoa(tmp);
adresseIP;
}
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
29 mai 2008 à 10:49
29 mai 2008 à 10:49
soit, mais tu l'ajoute apres ton stdafx.h
En plus, moi je t'avai dit d'inclure <string> pas <string.h>, tu fait du C++.
Et n'oublie pas le std:: devant string lors de la déclaration !
En plus, moi je t'avai dit d'inclure <string> pas <string.h>, tu fait du C++.
Et n'oublie pas le std:: devant string lors de la déclaration !
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
29 mai 2008 à 13:34
29 mai 2008 à 13:34
Lorsque je fais comme tu le dis, le compilateur de VC++ 2008 express me donne tout ceci comme message d'erreur et warning...
------ Début de la génération : Projet : test, Configuration : Debug Win32 ------
Compilation en cours...
test.cpp
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(1) : warning C4627: '#include <string>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(2) : warning C4627: '#include <windows.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(5) : error C2653: 'std' : n'est pas un nom de classe ni d'espace de noms
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(5) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'adresseIP'
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(5) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(5) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(9) : error C2065: 'in_addr' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(9) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'tmp'
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(9) : error C2065: 'tmp' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(10) : error C2065: 'tmp' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(10) : error C2228: la partie gauche de '.s_addr' doit avoir un class/struct/union
le type est ''unknown-type''
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(10) : error C2065: 'INADDR_ANY' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(10) : error C3861: 'htonl' : identificateur introuvable
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(11) : error C2653: 'std' : n'est pas un nom de classe ni d'espace de noms
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(11) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'adresseIP'
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(11) : error C2065: 'tmp' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(11) : error C3861: 'inet_ntoa' : identificateur introuvable
Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\stagiaire\Mes documents\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm"
test - 15 erreur(s), 2 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
Et voici mon code...
#include <string>
#include <windows.h>
#include <stdafx.h>
std::string adresseIP;
int _tmain( int argc, _TCHAR* argv[] )
{
in_addr tmp;
tmp.s_addr=htonl(INADDR_ANY);
std::string adresseIP = inet_ntoa(tmp);
}
------ Début de la génération : Projet : test, Configuration : Debug Win32 ------
Compilation en cours...
test.cpp
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(1) : warning C4627: '#include <string>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(2) : warning C4627: '#include <windows.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(5) : error C2653: 'std' : n'est pas un nom de classe ni d'espace de noms
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(5) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'adresseIP'
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(5) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(5) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(9) : error C2065: 'in_addr' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(9) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'tmp'
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(9) : error C2065: 'tmp' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(10) : error C2065: 'tmp' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(10) : error C2228: la partie gauche de '.s_addr' doit avoir un class/struct/union
le type est ''unknown-type''
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(10) : error C2065: 'INADDR_ANY' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(10) : error C3861: 'htonl' : identificateur introuvable
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(11) : error C2653: 'std' : n'est pas un nom de classe ni d'espace de noms
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(11) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'adresseIP'
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(11) : error C2065: 'tmp' : identificateur non déclaré
c:\documents and settings\stagiaire\mes documents\visual studio 2008\projects\test\test\test.cpp(11) : error C3861: 'inet_ntoa' : identificateur introuvable
Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\stagiaire\Mes documents\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm"
test - 15 erreur(s), 2 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
Et voici mon code...
#include <string>
#include <windows.h>
#include <stdafx.h>
std::string adresseIP;
int _tmain( int argc, _TCHAR* argv[] )
{
in_addr tmp;
tmp.s_addr=htonl(INADDR_ANY);
std::string adresseIP = inet_ntoa(tmp);
}
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
29 mai 2008 à 15:04
29 mai 2008 à 15:04
mon opinion est conforté : Visual C++ c'est vraiment de la merde !
"en-tête précompilé" jamais entendu parlé de ça en C++ ! Même pas foutu de compiler des sources en iso-C++ !
Soit tu utilise un vrai compilateur C++ (gcc, borland ...) soit tu trouves quelqu'un qui s'y connait en Micro$oft (=petit mou, c'est dire).
Bonne chance.
"en-tête précompilé" jamais entendu parlé de ça en C++ ! Même pas foutu de compiler des sources en iso-C++ !
Soit tu utilise un vrai compilateur C++ (gcc, borland ...) soit tu trouves quelqu'un qui s'y connait en Micro$oft (=petit mou, c'est dire).
Bonne chance.
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
29 mai 2008 à 15:09
29 mai 2008 à 15:09
Je vais tenter avec Dev C++...
Je te redis ça!
Je te redis ça!
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
29 mai 2008 à 15:18
29 mai 2008 à 15:18
Ha ! Bah voila qui est mieux.
N'oublie pas de lier avec libws2_32.a lors de la compilation pour pouvoir utiliser les sockets.
N'oublie pas de lier avec libws2_32.a lors de la compilation pour pouvoir utiliser les sockets.
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
30 mai 2008 à 11:54
30 mai 2008 à 11:54
Je compile avec Dev Cpp 5 en mode C (car finalement pour des raisons de sécurité et de simplicité je fais ce programme en C...).
Pour ce qui est de lister les interfaces réseaux j'ai enfin réussi. Pareil pour l'adresse MAC d'ailleurs!
Mais actuellement je bloque sur l'adresse IP... L'adresse IP qui s'affiche n'est pas celle de mon interface ethernet et celle de loopback est fausse donc il y a un problème quelque part mais je ne parviens pas à voir où... Je vous tiens au courant et une fois terminé je vous donne le code source!
Pour ce qui est de lister les interfaces réseaux j'ai enfin réussi. Pareil pour l'adresse MAC d'ailleurs!
Mais actuellement je bloque sur l'adresse IP... L'adresse IP qui s'affiche n'est pas celle de mon interface ethernet et celle de loopback est fausse donc il y a un problème quelque part mais je ne parviens pas à voir où... Je vous tiens au courant et une fois terminé je vous donne le code source!
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
30 mai 2008 à 12:28
30 mai 2008 à 12:28
Dit nous déjà comment tu as fait pour les réseau et les adresses MAC.
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
3 juin 2008 à 09:35
3 juin 2008 à 09:35
D'abord j'ai utiliser la table MIB_IFTABLE pour récupérer des info sur toutes mes interfaces réseau.
Ensuite j'ai gardé seulement celle qui correspond à la carte Ethernet puis j'ai les structure MIB IPADDRTABLE et IPADDRROW pour récupérer l'adresse IP et MAC de ma carte.
Toute la doc sur ces tables et structure sont sur MSDN avec des exemples!
Ensuite j'ai gardé seulement celle qui correspond à la carte Ethernet puis j'ai les structure MIB IPADDRTABLE et IPADDRROW pour récupérer l'adresse IP et MAC de ma carte.
Toute la doc sur ces tables et structure sont sur MSDN avec des exemples!
c st un truc de fou les tronches qui y a sur ce genre de site déstiné a rendre servise aux autres ... j en suis bouche bée ^^ merci a tous les modos qui gerent la fougere dans ce domaine, j aimerais bien toucher le quart des trucs que vous pouvez aborder, vous etes vraiment fortiche les gars ^^ (j'vous kiff les gens qui s y connaisse, j aimerais bien en connaitre autant que vous ^^
juste pour féliciter les gens qui on les connaissances adéquat pour rendre service a tous ^^ merci et a bientôt ^^j'espère
marc[i1]
Messages postés
2573
Date d'inscription
vendredi 1 avril 2005
Statut
Contributeur
Dernière intervention
6 septembre 2008
382
27 mai 2008 à 09:48
27 mai 2008 à 09:48
Salut,
Sous Windows :
Sous Linux / MacOS :
Sous Windows :
ipconfig
Sous Linux / MacOS :
ifconfig
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
27 mai 2008 à 10:03
27 mai 2008 à 10:03
Nan nan nan...
Le truc c'est que je souhaite automatiser cela.
Ce que je veux c'est que en utilisant ce programme en C, la machine récupère son adresse IP et ensuite utilise celle ci pour que grâce à un Get host by adr elle puisse avoir un nom d'hôte que va lui fournir le serveur DNS (en fonction de son IP)
Donc il me faut savoir comment récupérer cette adresse IP via un script C et pas en batch.
Merci!
Le truc c'est que je souhaite automatiser cela.
Ce que je veux c'est que en utilisant ce programme en C, la machine récupère son adresse IP et ensuite utilise celle ci pour que grâce à un Get host by adr elle puisse avoir un nom d'hôte que va lui fournir le serveur DNS (en fonction de son IP)
Donc il me faut savoir comment récupérer cette adresse IP via un script C et pas en batch.
Merci!
Si ça peut aider; code Microsoft
//
// Link with IPHlpAPI.lib
//
#include <stdio.h>
#include <windows.h>
#include <iphlpapi.h>
main() {
FIXED_INFO * FixedInfo;
ULONG ulOutBufLen;
DWORD dwRetVal;
IP_ADDR_STRING * pIPAddr;
FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, sizeof( FIXED_INFO ) );
ulOutBufLen = sizeof( FIXED_INFO );
if( ERROR_BUFFER_OVERFLOW == GetNetworkParams( FixedInfo, &ulOutBufLen ) ) {
GlobalFree( FixedInfo );
FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, ulOutBufLen );
}
if ( dwRetVal = GetNetworkParams( FixedInfo, &ulOutBufLen ) ) {
printf( "Call to GetNetworkParams failed. Return Value: %08x\n", dwRetVal );
}
else {
printf( "Host Name: %s\n", FixedInfo -> HostName );
printf( "Domain Name: %s\n", FixedInfo -> DomainName );
printf( "DNS Servers:\n" );
printf( "\t%s\n", FixedInfo -> DnsServerList.IpAddress.String );
pIPAddr = FixedInfo -> DnsServerList.Next;
while ( pIPAddr ) {
printf( "\t%s\n", pIPAddr ->IpAddress.String );
pIPAddr = pIPAddr ->Next;
}
}
exit( 0 );
}
//
// Link with IPHlpAPI.lib
//
#include <stdio.h>
#include <windows.h>
#include <iphlpapi.h>
main() {
FIXED_INFO * FixedInfo;
ULONG ulOutBufLen;
DWORD dwRetVal;
IP_ADDR_STRING * pIPAddr;
FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, sizeof( FIXED_INFO ) );
ulOutBufLen = sizeof( FIXED_INFO );
if( ERROR_BUFFER_OVERFLOW == GetNetworkParams( FixedInfo, &ulOutBufLen ) ) {
GlobalFree( FixedInfo );
FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, ulOutBufLen );
}
if ( dwRetVal = GetNetworkParams( FixedInfo, &ulOutBufLen ) ) {
printf( "Call to GetNetworkParams failed. Return Value: %08x\n", dwRetVal );
}
else {
printf( "Host Name: %s\n", FixedInfo -> HostName );
printf( "Domain Name: %s\n", FixedInfo -> DomainName );
printf( "DNS Servers:\n" );
printf( "\t%s\n", FixedInfo -> DnsServerList.IpAddress.String );
pIPAddr = FixedInfo -> DnsServerList.Next;
while ( pIPAddr ) {
printf( "\t%s\n", pIPAddr ->IpAddress.String );
pIPAddr = pIPAddr ->Next;
}
}
exit( 0 );
}
Salut
pour completer marcien ipconfig va te donner l'ip en effet ainsi que l'adresse mac l'adresse physique de la carte reseau
ainsi pour le nom d'hote à partir de l'adresse ip c'est nslookup site web
exemple nslookup www.google.fr
pour l'ip à partir du nom d'hote http://pagesperso-orange.fr/korytion/linux.html#a20 c'est la commande host site web
sous nux.
exemple host www.google.fr
Cette commande n'existe que sous nux malheureusement
Pour le réseau rien ne vaut Linux
pour completer marcien ipconfig va te donner l'ip en effet ainsi que l'adresse mac l'adresse physique de la carte reseau
ainsi pour le nom d'hote à partir de l'adresse ip c'est nslookup site web
exemple nslookup www.google.fr
pour l'ip à partir du nom d'hote http://pagesperso-orange.fr/korytion/linux.html#a20 c'est la commande host site web
sous nux.
exemple host www.google.fr
Cette commande n'existe que sous nux malheureusement
Pour le réseau rien ne vaut Linux
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
27 mai 2008 à 10:38
27 mai 2008 à 10:38
C'est bien gentil mais moi ce que je veux c'est l'inverse... Récupérer mon adresse IP pour attribuer son host name à un PC... Pas l'inverse!
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
>
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
27 mai 2008 à 10:57
27 mai 2008 à 10:57
Apparament il faut que je liste mes interface réseau avant...
Selon the GNU C library il me faut utiliser la fonction struct if_nameindex... mais je comprend rien!! Comment elle s'utilise! Ya pas d'exemple je nage!
Selon the GNU C library il me faut utiliser la fonction struct if_nameindex... mais je comprend rien!! Comment elle s'utilise! Ya pas d'exemple je nage!
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
>
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
27 mai 2008 à 15:47
27 mai 2008 à 15:47
Au pire, je peux le faire en C++. Le truc c'est que là aussi je ne sais pas comment me servir du C++ pour accéder aux ressources reseau...
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 mai 2008 à 08:34
28 mai 2008 à 08:34
http://www.linux-france.org/article/man-fr/man3/inet_addr-3.html
en fait, j'ai confondu, inet_addr() sert dans ce sens là :
a.sin_addr.s_addr=inet_addr("192.168.0.1");
en fait, toi, si tu veux réupérer l'IP, essai :
inet_ntoa(htonl(INADDR_ANY));
qui devrai renvoyer une chaine de caractères.
en fait, j'ai confondu, inet_addr() sert dans ce sens là :
a.sin_addr.s_addr=inet_addr("192.168.0.1");
en fait, toi, si tu veux réupérer l'IP, essai :
inet_ntoa(htonl(INADDR_ANY));
qui devrai renvoyer une chaine de caractères.
julow
Messages postés
2198
Date d'inscription
dimanche 26 août 2007
Statut
Membre
Dernière intervention
7 juillet 2015
244
28 mai 2008 à 09:49
28 mai 2008 à 09:49
Merci Char Snipeur!!
Donc si je récapitule, (attention un noob va parler!) :
On dit avec INADDR_ANY d'utiliser l'adresse IP locale,
en faisant htonl(INADDR_ANY) on convertit l'entier long obtenu,
et en faisant inet_ntoa(htonl(INADDR_ANY)) on récupère ce résultat en chaine de caractères...
Mais je ne comprend pas l'utilité de htonl... Si inet_ntoa convertit l'adresse en chaine de caractère et que INADDR_ANY représente cette adresse locale alors à quoi sert htonl?? De plus j'ai regardé sur le net, INADDR_ANY représente UNE adresse locale... Et pas celle que la machine utilise sur le réseau, non?
(je suis un peu perdu en fait car moi je touche plus au C# qu'au C++ mais ici on m'impose d'utiliser le C++...)
Donc si je récapitule, (attention un noob va parler!) :
On dit avec INADDR_ANY d'utiliser l'adresse IP locale,
en faisant htonl(INADDR_ANY) on convertit l'entier long obtenu,
et en faisant inet_ntoa(htonl(INADDR_ANY)) on récupère ce résultat en chaine de caractères...
Mais je ne comprend pas l'utilité de htonl... Si inet_ntoa convertit l'adresse en chaine de caractère et que INADDR_ANY représente cette adresse locale alors à quoi sert htonl?? De plus j'ai regardé sur le net, INADDR_ANY représente UNE adresse locale... Et pas celle que la machine utilise sur le réseau, non?
(je suis un peu perdu en fait car moi je touche plus au C# qu'au C++ mais ici on m'impose d'utiliser le C++...)
27 mai 2008 à 16:42
Concrètement, dans une application en C comment dois je l'utiliser?
Merci de ton aide!!