Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++]Trovare l'ip locale e trasformarlo in hex

    ciao a tutti
    su internet ho trovato questo modo per recuperare l'ip locale
    codice:
    	hostent* localHost;
    	char* localIP;
    	localHost = gethostbyname("");
    	localIP = inet_ntoa (*(struct in_addr *)*localHost->h_addr_list);
    solo ke su qualsiasi makkina mi da sempre lo stesso indirizzo ip
    per caso è sbagliato come procuro l'ip?

    e un'altra cosa..
    supponiamo ke ho recuperato l'ip
    ora lo devo convertire in esadecimale
    ho usato il metodo proposto su un post di questo forum solo ke confrontandolo con quello recuperato dalla calcolatrice il valore non è lo stesso
    codice:
    	CString ip = CStringA(localIP);
    	CString temp = ip;
    	temp.Replace(".", "");
    	char *IP;
    	
    	
    	char *dec = (LPSTR)(LPCTSTR)temp;
    	char *hex = new char(sizeof(int)*2+1);
    	IP = itoa(atoi(dec),hex,16);
    come posso risolvere?
    grazie mille

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C++]Trovare l'ip locale e trasformarlo in hex

    Originariamente inviato da fatina biondina
    solo ke su qualsiasi makkina mi da sempre lo stesso indirizzo ip
    Certo, perché quello è l'indirizzo di "loopback" 127.0.0.1 che è uguale per tutti i computer!

    codice:
    #include <stdio.h>
    #include <unistd.h>
    #include <netdb.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    int main (void)
    {
        char hname[256];
        struct hostent* he;
        char *addr;
    
        if (gethostname (hname, sizeof (hname)) == 0)
        {
            printf ("Hostname: %s\n", hname);
    
            he = gethostbyname (hname);
    
            if (he != NULL)
            {
                addr = inet_ntoa (*(struct in_addr*) he->h_addr_list[0]);
    
                printf ("Address: %s\n", addr);
            }
        }
    
        return 0;
    }
    Oppure puoi enumerare tutte le interfacce di rete:

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/ioctl.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <net/if.h>
    #include <netdb.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    char *getifaddr (char *ifname)
    {
        int fd;
        struct ifreq ifr;
        char *addr = NULL;
        struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_ifru.ifru_addr;
    
        if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
            return NULL;
    
        memset (&ifr, 0, sizeof (ifr));
    
        strcpy (ifr.ifr_name, ifname);
        sin->sin_family = AF_INET;
    
        if (ioctl (fd, SIOCGIFADDR, &ifr) == 0)
            addr = inet_ntoa (sin->sin_addr);
    
        close (fd);
    
        return addr;
    }
    
    int main (void)
    {
        struct if_nameindex *ifni;
    
        ifni = if_nameindex ();
    
        while (ifni->if_name != NULL)
        {
            printf ("Interface %s %s\n", ifni->if_name, getifaddr (ifni->if_name));
            ifni++;
        }
    
        return 0;
    }
    Sorgenti testati su Linux (Slackware 9.1)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    veramente non mi usciva questo ip 127.0.0.1
    ma un'altro e provando anke col tuo primo codice me lo da lo stesso, ovvero ke l'ip è uguale in due pc diversi :S

    anzi ora in un pc mi cambia solo l'ultima coppia ma l'ip cmq in questo pc in esame rimane sbagliato

  4. #4
    Originariamente inviato da fatina biondina
    veramente non mi usciva questo ip 127.0.0.1
    ma un'altro e provando anke col tuo primo codice me lo da lo stesso, ovvero ke l'ip è uguale in due pc diversi :S

    anzi ora in un pc mi cambia solo l'ultima coppia ma l'ip cmq in questo pc in esame rimane sbagliato
    e che ip sarebbe ?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Lavori con Windows?

    Quale codice stai usando?

  6. #6
    sarebbe l'ip della macchina su cui sto scrivendo il programma (ke è giusto) ma se lo faccio eseguire sull'altra macchina mi da un ip che non è il suo simile all'altro pc
    si lavoro in windows
    col primo codice

  7. #7
    cmq ora da l'ip giusto però non ero in lan non è ke può essere ke avevo i due pc in rete? boh cmq non ci interessa
    a proposito
    ma la conversione di questo ip in esadecimale come dovrebbe essere? come ho fatto io?

  8. #8
    se volessi evitare il problema che quando sto in lan mi dia l'ip del portatile e non del pc dove io faccio avviare il programma, cosa bisognerebbe fare?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ip del portatile ... del PC ... non si capisce ...

  10. #10
    allora il programma lo sto facendo sul portatile quando lo avvio mi da l'indirizzo esatto del portatile
    se lo stesso programma lo faccio eseguire sul pc mentre il pc è collegato in rete col portatile mi da un indirizzo simile a quello del portatile ma che non è quel del pc.
    se io invece faccio eseguire il programma dal pc quando non è collegato in rete con il portatile mi da l'indirizzo esatto del pc
    perkè?
    dovrebbe darmi sempre lo stesso indirizzo.. ke è quello del pc no?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.