CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

GetHostByAddr()

hs_dino
hs_dino
Niveau 9
12 septembre 2003 à 14:44:33

Revala cette belette de Dino avec ces problèmes reseaux.

Mon objectif est d´énumerer la liste des IP & DNS associé de la machine.

Pour ce faire j´utilise la Dino´s Tecnik suivante :

1 - Je fais un GetHostName() pour recuperer le nom de la machine.
2 - Je fais un GetHostByName() avec en parametre le HostName trouvé juste avant. J´obtiens ainsi toutes les adresses IP de la machine.
3 - Je recherche pour chaque IP le DNS qui y corresponds avec un GetHostByAddr().

Tout marchait bien, mais depuis un certains temps ( enfin a peu près au moment ou je suis passé de 2000 à XP) et bien l´étape 3 ne marche plus.

J´ai 2 IPs, une pour la carte reseau, une pour le modem. Le probleme vient du faite que le GetHostByAddr() avec l´IP du modem me renvoie le DNS de la carte reseau, au lieu de mon DNS internet.

Voilà, c´est bien triste tout çà.

Quelqu´un aurait une idée puissante? :)

JeanYvesYves
JeanYvesYves
Niveau 10
12 septembre 2003 à 14:46:37

tu utilises quoi comme routine ?
winsock.h ou winsock2.h ?

peut etre que ça vient de la !

Signé : JeanYves qui n´a jusque la que fait des TP sous Linux avec socket.h et unistd.h, et a vaguement mais tres vaguement essayé winsock2.h

hs_dino
hs_dino
Niveau 9
12 septembre 2003 à 15:18:53

J´utilise Winsock2.h

Mais ca ne semble pas logique pour 2 raisons :
- Winsock.h est obsolete.
- Ca marchait avant, sans avoir touché au code. Il me semble juste avoir changé d´OS. De plus, je viens de voir dans MSDN que gethostbyaddr() est désormais " deprecated" et remplacée pas getnameinfo() sous XP. Donc ca confirme mes soupçons. Maintenant le probleme est de comprendre comment faire marcher çà sous tout les OS :(

JeanYvesYves
JeanYvesYves
Niveau 10
12 septembre 2003 à 15:24:43

putain, abusé ! !
pkoi ils changent le nom ?

je ne voit qu´une solution :

if ( GetOSVer()==CODE_VER_WINXP) getnameinfo() . ..
else
gethostbyaddr() . ..

mais imagine le bordel...

JeanYvesYves
JeanYvesYves
Niveau 10
12 septembre 2003 à 15:25:15
  • GetOSVer n´existe pas, mais C pour donner l´idée...
DarkPaladin
DarkPaladin
Niveau 5
12 septembre 2003 à 16:28:55

OSVERSIONINFO qwe;
qwe.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&);

Utilise
//dwMajorVersion;
//dwMinorVersion;

tu peut savoir quel service pack est installé sur le poste.

DarkPaladin
DarkPaladin
Niveau 5
12 septembre 2003 à 16:30:25

dwMajorVersion == 4 //NT
dwMajorVersion == 5 //2000 ou xp....

pour les sp...
WORD wServicePackMajor;
WORD wServicePackMinor;

Diwi
Diwi
Niveau 5
12 septembre 2003 à 16:53:31

Je suis pas sur que ce soit la meilleure solution, c´est pour ca que le javascript est quasi proscrit du dvp web, parce qu´il faut toujours faire un test sur le navigateur ( et sa version bien sur) pour faire quelque chose de correct.

Sinon, juste un truc, ils sont en train de faire des méthodes deprecated comme en Java ? !? :rire: :-d :rire2:

i_am_the_law
i_am_the_law
Niveau 6
12 septembre 2003 à 17:16:21

tu devrais utiliser sdlnet, il y a moins de pb :)
Sinon tu devrais chercher s´il y´a a pas des #define avec la version de windows.
comme ca t´aurais juste a faire

  1. ifdef WIN_XP

getnameinfo()

  1. else
  2. ifdef WIN98

gethostbyaddr()

  1. endif

etc...

Pcq tant qu´a faire, autant laisser le travail au compilateur plutot que de faire ca a l´execution.

Puis si y´a pas t´utilises la methode de darkpaladin pour tester la version de l´os avant de compiler pour faire un prog de configuration " pre compilation" et qui te modifie ton makefile en rajoutant un /D " WINXP" ( pas sur de la syntaxe) par ex si ca a detecte winxp, et apres le #ifdef WINXP marchera.
Un peu comme sous linux quoi.

hs_dino
hs_dino
Niveau 9
12 septembre 2003 à 21:44:45

Il ne faut surtout pas que je fasse un if(WIN_XP) ou un if(WIN98), ca obligerait mon executable a etre destiné à un seul type d´OS.

Non, je pense qu´il y a une autre solution, qui doit sans doute etre tres simple avec le winsock quand on sait comment faire :)

C´est juste moi qui m´y prend mal.

Mais bon ceci ne me rassure guere : http://archives.neohapsis.com/archives/ntbugtraq/2003-q2/0116.html

:(

i_am_the_law
i_am_the_law
Niveau 6
12 septembre 2003 à 22:08:55

arf j´suis bete, j´avais en tete qu´il y avait la source a compiler. Ben pk alors tu fais pas le teste comme ils ont dit pdt l´execution?

hs_dino
hs_dino
Niveau 9
12 septembre 2003 à 22:17:30

Parce que la fonction recommandée par microsoft " getnameinfo" necessite Windows XP.
Donc si je veux que ca compile, il faut inclure le . h de cette fonction et définir un joli define WINXP et donc le programme ne tournera QUE sur XP.

getnameinfos:

Windows NT/2000/XP: Included in Windows XP and Windows . NET Server.
Windows 95/98/Me: Unsupported.
Header: Declared in Ws2tcpip.h.

hs_dino
hs_dino
Niveau 9
12 septembre 2003 à 23:02:25

j´ai fait un petit programme qui fait l´enumeration des IP & Nom de domaine de la machine:

http://hsdino.free.fr/hostname.exe

J´ai essayé sur plusieurs machines XP et ca ne marche pas. Il donne le DNS de ma carte reseau pour l´ip du modem internet.

Dites moi si ca vous fait pareil aussi et notez votre OS.

Merci :)

i_am_the_law
i_am_the_law
Niveau 6
12 septembre 2003 à 23:40:12

J´ai cree un projet en incluant ws2tcpip.h et j´ai pas eu de pb pour compiler et creer l´executable. J´ai win 2000. Donc tu peux inclure ce fichier sans avoir peur de plus pouvoir executer sur une autre machine. Enfin avec un programme + complexe je sais pas ce que ca aurait fait mais a mon avis c´est bon.
Donc juste avant de recuperer l´host, tu detecte l´os, et ensuite tu appelles l´une ou l´autre des fonctions. Ca devrait marcher.

Sinon chez moi ton programme marche pas car je suis derriere un routeur et que j´ai que l´ip de ma machine, ca affiche donc seulement le nom de la machine. Donc je sais pas ca peut p-e poser des pb pour ce que tu fais chez les utilisateurs qui sont dans mon cas.

arnaud81
arnaud81
Niveau 7
13 septembre 2003 à 01:24:52

ton prog ne pose pas de pb sous w98

je pense que c toi qui merde Dino, tu as du faire une petite erreur qqpart, et le fait de changer d´OS ( donc un changement de comportement de l´OS) a du mettre le doigt le pb.

arnaud81
arnaud81
Niveau 7
13 septembre 2003 à 01:38:57

je tente de comprendre ce que tu fais... avec MSDN, on va bien trouver l´insecte....

bah pour moi ca devrait fonctionner ? ???

puis les fonctions que tu utilises sont supposées fonctionner sur XP aussi....

regarde s´il y a une différence entre les IP fourni par w2000 et wXP..

sinon, je vois pas ? ??

i_am_the_law
i_am_the_law
Niveau 6
13 septembre 2003 à 01:40:33

ca serait du au fait que gethostbyaddr ne fonctionne pas correctement sous xp.
La fonction de remplacement, quant a elle, ne fonctionne pas sur 2000 et 98, et c´est la son pb.

hs_dino
hs_dino
Niveau 9
13 septembre 2003 à 08:03:32

Déja, merci pour votre aide :)

Bon je vais réessayer d´inclure ce
Ws2tcpip.h, ce qui est assez pénible car selon s´il est inclu avant ou apres windows.h ca provoque des centaines d´erreurs :(

Ensuite, je suis conscient que j´ai du faire une erreur quelque part, mais ou? gethostbyaddr() prends en parametre addr_in qui est une structure de 32bits qui contient l´adresse IP, c´est tout. Alors pourquoi quand j´appele cette fonction avec l´adresse IP AOL attribuée à mon modem ( 172.xxx.xxx.xxx) cette fonction me renvoie t´elle le nom NetBIOS de ma machine?

Vous avez jeté un oeil aussi au bug du gethostbyaddr sur WinXP ? Ca parait étrange çà aussi...

hs_dino
hs_dino
Niveau 9
13 septembre 2003 à 09:33:44

Bon, j´ai essayé getnameinfo() et en fait cette fonction renvoie le meme résultat que gethostbyaddr().

Ensuite, lorsque que je fais un gethostbyaddr() sur une adresse IP de quelqu´un sur le net, la fonction me renvoie le bon Nom de domaine.

J´en viens a la conclusion suivante que le gethostbyaddr() sur une ip locale renvoie le nom NetBIOS de la machine depuis Windows XP, car sous 2000 ca marchait bien.

Donc maintenant il me faut trouver l´astuce pour trouver mon Nom de domaine public, celui de mon modem.

hs_dino
hs_dino
Niveau 9
13 septembre 2003 à 11:55:06

J´ai laissé tomber cette " detection". Il faut désormais mettre à la main le DNS dans le . ini de l´application.

Au moins c´est plus simple, au moins ca marche tout le temps et au moins on est pas embeté quand il y a plusieurs connexions.

:)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment