Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1505 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C ] Récuperer le nom d'une machine d'apres son IP + new pb concat !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C ] Récuperer le nom d'une machine d'apres son IP + new pb concat !

n°821653
Sagoth
:|
Posté le 12-08-2004 à 16:49:37  profilanswer
 

Voila, cette petite fonction simple permet logiquement d'obtenir le resultat escomtpé :
 

int iptodns ( char * argv )  
{
  struct hostent *sn;
  struct in_addr in;
  in.s_addr = inet_addr(argv);
  //printf("\n>%s",argv);
  sn = gethostbyaddr((char *)&in, 4, AF_INET);
  if ( sn )
    printf("%s\n", sn->h_name);
  else
    printf("\n?\n" );
  return 0;
}

Apres vérification en debug sous Visual Studio, la valeur est correctement enregistrée dans in.s_addr.
Par contre, la fonction gethostbyaddr semble foirer puisqu'elle ne me renvoit jamais le nom d'hote correspondant
De plus l'ip entrée est ok dans la mesure ou un nom lui est associé (directement dans system32/drivers/etc/host !)
 
Any idea ?


Message édité par Sagoth le 17-08-2004 à 14:43:07
mood
Publicité
Posté le 12-08-2004 à 16:49:37  profilanswer
 

n°821722
HelloWorld
Salut tout le monde!
Posté le 12-08-2004 à 17:55:51  profilanswer
 

Tu as bien appelé WSAStartup ? Commence par tester avec "127.0.0.1" avant de faire d'autres tests.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°824851
Sagoth
:|
Posté le 17-08-2004 à 11:21:09  profilanswer
 

HelloWorld a écrit :

Tu as bien appelé WSAStartup ? Commence par tester avec "127.0.0.1" avant de faire d'autres tests.


 
:sweat: Oups, WSAStartup ...
Sorry, ca marchera mieux en effet  :sarcastic:  :p  
Merci beaucoup :)

n°825097
Sagoth
:|
Posté le 17-08-2004 à 14:37:53  profilanswer
 

Sinon autre problème, a priori simple mais je ne m'en sors pas.
j'utilise les 2 structures suivantes :

/* STRUCTURES */
typedef struct ip_address{
    u_char byte1;
    u_char byte2;
    u_char byte3;
    u_char byte4;
}ip_address;
 
typedef struct ip_header{
    u_char  ver_ihl;        // Version (4 bits) + Internet header length (4 bits)
    u_char  tos;            // Type of service  
    u_short tlen;           // Total length  
    u_short identification; // Identification
    u_short flags_fo;       // Flags (3 bits) + Fragment offset (13 bits)
    u_char  ttl;            // Time to live
    u_char  proto;          // Protocol
    u_short crc;            // Header checksum
 ip_address  saddr;      // Source address
    ip_address  daddr;      // Destination address
    u_int   op_pad;         // Option + Padding
}ip_header;

 
Dans une fonction je declare :
> ip_header *ih
 
et j'accède au premier champ de l'ip de la sorte :  
> ih->saddr.byte4,
 
Jusque là ok  :jap:  
 
Maintenant je doisconcatener tous ces champs ip en une chaine de caractère unique.
 
je déclare donc "char * ipadress;" qui servira a recevoir la chaine ip complete, et la fonction strcat.
> strcat(ipadress,ih->saddr.byte4);
 
Lorsque je compile j'ai logiquement l'erreur
 

warning C4047: 'function' : 'const char *' differs in levels of indirection from 'unsigned char '

 
strcat attends en parametre : (char *,const char *)
j'ai : (char *,unsigned char)
 
Le truc c'est que j'ai beau caster le second argument dans tous les sens, (notemment en char *), le programme plante lamentablement lors de l'execution.
 
Saurais tu me dire comment je pourrai caster le second argument ?
 
PS: quand je veux afficher les infos "ih->saddr.byte1" , "ih->saddr.byte2", etc ... j'utilise un %d dans mon printf et non un %c ou %s (sinon plantage), ca me parait étrange aussi.


Message édité par Sagoth le 17-08-2004 à 14:39:45
n°825103
cricri_
Posté le 17-08-2004 à 14:45:06  profilanswer
 

bah vi, strcat travaille avec des chaines de caractères, pas de simples char.
Utilise sprintf pour ça :
 
char szAdress[8];
 
sprintf( szAdress, "%uc.%uc.%uc.%uc",  
ih->saddr.byte1, ih->saddr.byte2, ih->saddr.byte3, ih->saddr.byte4);
(.. suis pas sûr pour %uc ..)

n°825108
cricri_
Posté le 17-08-2004 à 14:47:11  profilanswer
 

Mouaih ... c'est faux ce que j'ai écrit ...
faut remplacer les %uc par des %ud

n°825191
Sagoth
:|
Posté le 17-08-2004 à 16:09:51  profilanswer
 

ok thx, maintenant je lutte avec la fonction "gethostbyaddr" qui me renvoit un résultat beaucoup trop lentement a mon gout (quand elle ne trouve pas de correspondance de nom pour l'ip donnée).
Mais bon, là c'est pas ma faute :D

n°827809
Sagoth
:|
Posté le 20-08-2004 à 15:30:38  profilanswer
 

Bon, sinon puisque j'y suis je vais pas recrer un topic, mais je cherche un moyen de detecter une pression sur une touche du clavier sans "breaker" le programme.
 
Apres une (fastidieuse) recherche pour une solution plus elegante que kbhit(), je me suis rabatue sur cette dernière fonction.
 
Mais impossible de trouver pc.h. J'ai ecummé le net mais pouf, que dalle. Sauriez vous ou je peux me la procurer ?
 
Ou alors sinon s'il existe un moyen plus "propre" que ce kbhit ?


Message édité par Sagoth le 20-08-2004 à 15:32:57
n°827828
blackgodde​ss
vive le troll !
Posté le 20-08-2004 à 15:37:25  profilanswer
 

http://msdn.microsoft.com/library/ [...] _kbhit.asp
 
#include <conio.h>


---------------
-( BlackGoddess )-
n°827832
Sagoth
:|
Posté le 20-08-2004 à 15:38:46  profilanswer
 

merci, decidemment j'ai trop de mal avec msdn, je m'y paume tout le temps.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C ] Récuperer le nom d'une machine d'apres son IP + new pb concat !

 

Sujets relatifs
VBA Excel Recuperer le nom du dossier avec un bouton parcourirNe récuperer qu'un nombre de caractères limité d'un champ varchar
Problème pour récuperer des variables POST - Débutant -recuperer les noms des colonnes d'une table (database)
[Access] Récupérer le nom du controle actifRécupérer les valeurs du résultat d'une requête
Récupérer un code SQLrécupérer ID autoincrémenté lors d'un ajout d'entrée ds DB
Récupérer une ligne d'un tableau à 2 dimensions...recuperer l'url de la page en cour
Plus de sujets relatifs à : [C ] Récuperer le nom d'une machine d'apres son IP + new pb concat !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR