[C] Comment obtenir hostname distant (Sniffer)

Comment obtenir hostname distant (Sniffer) [C] - C - Programmation

Marsh Posté le 25-03-2008 à 13:24:43    

Bonjour tout le monde ! :hello:  
 
Voilà je viens ici pour vous demander votre aide pour un pti programme(un pti sniffer) que je suis en train de faire .
Je voudrais que le programme s'exécute sur un réseau local et renvoi les Adresses IP et MAC associées , ensuite qu'il détermine si les équipements découverts sont serveurs ou client(étude des ports ouverts). Ensuite récupérer le hostname de chaque IP et pourquoi pas le système d'exploitation.
 
C'est sur ces deux derniers points que je n'arrive pas encore à arriver à mes fins ^^ :ange:  
 
En effet pour trouver le hostname ,en cherchant sur le net j'ai vu des fonctions (gethostbyaddr) qui renvoient le nom d'hôte du poste sur lequel est exécutè le programme, code qui serait comme ceci :

Code :
  1. #include <netdb.h>
  2. #include <netinet/in.h>
  3. #include <sys/socket.h>
  4. int main ( int argc, char *argv[] ) {
  5.   struct hostent *sn;
  6.   struct in_addr in;
  7.   if ( argc != 2 )
  8.     exit(1);
  9.   in.s_addr = inet_addr(argv[1]);
  10.   sn = gethostbyaddr((char *)&in, 4, AF_INET);
  11.   if ( sn )
  12.     printf("%s\n", sn->h_name);
  13.   else
  14.     printf("?\n" );
  15.   return 0;
  16. }


Je n'utilise pas ce code, je ne sais pas si la fonction conviendrait a mon prog.
Moi je voudrais l'exécuter pour chacune de mes IP trouvée (stockées dans une mémoire partagée), et je n'arrive pas à me servir de cette fonction.
 
 
Y aurait il une autre solution (ou requête DNS ?) ?  :??:  
A oui j'allais oublier , je suis sous Ubuntu  :)  
 
 
Merci d'avance  
 
 
P.S : Et au pire en bonus si quelqu'un aurait une idée comment déterminer les équipements d'interconnexions présents ( Switch , Routeur ( Cisco CDP..) je suis preneur !
 
:bic: ShNaKeUr
 

Reply

Marsh Posté le 25-03-2008 à 13:24:43   

Reply

Marsh Posté le 25-03-2008 à 14:25:52    

bon bah up ^^

Reply

Marsh Posté le 25-03-2008 à 14:36:59    

bonjour,
 
gethostbyaddr est bien la bonne fonction, mais l'énoncé est faux ("nom d'hôte du poste sur lequel le programme tourne"), il s'agit de récupérer les noms dns d'une adresse donnée (XXX.XXX.XXX.XXX) en utilisant les paramatères DNS de la machine hote, ce qui est bien différent...
 
Pour la deuxième partie (OS), je n'ai pas d'idée sur le comment faire...


Message édité par dreameddeath le 25-03-2008 à 14:37:10
Reply

Marsh Posté le 25-03-2008 à 14:49:57    

oki d'accord !  
 
Bon je vais tester cette fonction pour voir si je peux resortir le nom d'une machine distante a partir de son adresse IP .

Reply

Marsh Posté le 25-03-2008 à 15:44:42    

Et sinon je voudrais resortir les informations contenues dans la mémoire partagée(chaine,entier,adresse ip )  vers un fichier (txt?) , programmant depuis peu je ne connais pas de fonctions pour ceci. Donc si un de vous aurait une solution je suis preneur :)
 
Je n'ai en effet pas trouvé mon bonheur sur google  
 
Merci d'avance


Message édité par _kev_ le 25-03-2008 à 15:53:02
Reply

Marsh Posté le 25-03-2008 à 20:08:52    

Mémoire partagée ???
 
C'est la mémoire de ton process tout court, il n'y a pas d'histoire de mémoire partagée dans ce que tu fais. Pour manipuler les fichiers c'est fopen/fread/fwrite. Si tu veux enregister tes données sous forme de texte lisible, c'est fprintf qu'il te faut.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed