Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] gethostbyaddr()

  1. #1

    [C] gethostbyaddr()

    Salve a tutti,
    la gethostbyname() sono riuscita ad utilizzarla proprio grazie ad un esempio trovato qui sul forum, ovvero:

    codice:
    	//PROVO LA GETHOSTBYBNAME
    	struct hostent *h = gethostbyname("localhost");
    	memcpy((char *)&echoServAddr.sin_addr, (char *)h->h_addr_list[0], 4);
    Ho provato ad adattare lo stesso esempio pr la gethostbyaddr() in questo modo:

    codice:
    unsigned long ip     = inet_addr("127.0.0.1");
    	struct hostent *host = gethostbyaddr((char *)&ip,4,0);
    	memcpy((char *)&echoServAddr.sin_addr, (char *)host->h_addr_list[0], 4);
    e mi va in segmentation fault.
    So che cosi sarebbe solo un giro inutile dire ho l'ip, riempimi la struttura e poi ridammi l'ip, però volevo vedere se funzionava. Oppure se faccio il gethostbyaddr() non mi viene avvalorato l'address list e per questo mi va in segmentation fault?


    Se potesse servire come informazione sto sotto MacOs e come ide sto con eclipse per c.

    Vi ringrazio in anticipo,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Hai letto la manpage di gethostbyaddr? L'ultimo parametro di gethostbyaddr dev'essere AF_INET per indirizzi IPv4. Per questo probabilmente gethostbyaddr ti restituisce NULL (a segnalare un errore) e di conseguenza memcpy va in segfault.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Originariamente inviato da MItaly
    Hai letto la manpage di gethostbyaddr? L'ultimo parametro di gethostbyaddr dev'essere AF_INET per indirizzi IPv4. Per questo probabilmente gethostbyaddr ti restituisce NULL (a segnalare un errore) e di conseguenza memcpy va in segfault.
    Cioè devo mettere "AF_INET" al posto di "0"? non sto capendo..

    Scrivendo così:
    codice:
    	unsigned long ip     = inet_addr("127.0.0.1");
    	struct hostent *host = gethostbyaddr((char *)&ip,4,AF_INET);
    	memcpy((char *)&echoServAddr.sin_addr, (char *)host->h_addr_list[0], 4);
    	char* canonical_name = host->h_name;
    	printf("Mi sto collegando all'ip: %d ovvero a: %s\n\n",ip, canonical_name);
    La printf mi stampa

    codice:
    Mi sto collegando all'ip: 16777343 ovvero a: ereg.adobe.com
    Forse essendo un long non devo mettere %d? e che cappero centra sto sito di adobe? La cosa strana è che al server risulta collegato, a dirla tutta anche se non assegno nessun ip si collega comunque al server, forse lo prende come indirizzo di default localhost? mbhoc.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    16777343 in decimale equivale all'indirizzo 127.0.0.1 (considera che in esadecimale i singoli byte sono 0100007F). Puoi capire meglio se lo visualizzi con

    %.8X

    Per quanto riguarda il sito risolto, probabilmente è stato inserito nel tuo file

    hosts
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.