|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Registered User
Iscritto dal: Jun 2004
Messaggi: 47
|
[C++] get ip address
Esiste una funzione in C++ che mi da una stringa contenente l'indirizzo IP del computer su cui faccio girare il programma?
grazie, ciao |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Sep 2001
Messaggi: 181
|
Non esiste ma...non avrebbe nemmeno senso...
se ci pensi su di un computer potresti avere + interfaccie di rete con altrettanti ind IP. Ma...a cosa ti serve questa informazione? |
|
|
|
|
|
#3 |
|
Registered User
Iscritto dal: Jun 2004
Messaggi: 47
|
[C++] get IP address
mi serve in un programma che ho fatto che apre un socket e ascolta su una porta per richieste di vario tipo..
per lanciare il programma ho bisogno di dargli come argomento l'indirizzo IP al quale appendere la socket.. Es: nomefile.exe 10.1.2.25 so che in win2000 con la parola echo %COMPUTERNAME% si può ottenere il nome del computer.. magari poi con una qualche funzione si può trasformare in nome in indirizzo IP, un po' quello che succede in un server DNS.. comunque se non è possibile poco male visto che immettere un argomento in più nella funzione non mi costa niente.. grazie |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Sep 2001
Messaggi: 181
|
Allora ti riporto una serie di primitive che possono tornarti utili:
gethostbyname() dato un hostname, restituisce una struttura dati che specifica anche i suoi indirizzi IP gethostbyaddr() dato un indirizzo IP, restituisce una struttura dati che specifica anche il suo hostname getservbyname() dato un nome di servizio e di protocollo, restituisce una struttura dati che specifica i suoi nomi e l’indirizzo di porta gethostname()/getdomainname() restituiscono l’hostname della macchina la primitiva che ti serve è la prima....ti riporto un es d'uso...faccio un copia e incolla di alcune parti di un vecchio programmino fato all'univ. ....... struct hostent *gethostbyname(const char *name); struct hostent { char *h_name; // nome ufficiale dell’host char **h_aliases; // array di alias int h_addrtype; // Tipo di ind. da restituire; spesso AF_INET int h_length; // lunghezza in byte dell’indirizzo char **h_addr_list;// array di ind che sono in Network Byte Order }; #define h_addr h_addr_list[0] // primo ind. di h_addr_list h_addr contiene l’indirizzo IP dell’host h_length contiene la lunghezza dell’indirizzo ...... extern int h_errno; int main(int argc,char **argv) { int x, x2; struct hostent *hp; for (x=1; x<argc; ++x) { /* ric host name : */ hp = gethostbyname(argv[x]); if (!hp) { fprintf(stderr, "%s: host '%s'\n", hstrerror(h_errno), argv[x]); continue; } … ... /* Report delle info trovate: */ printf("Host %s :\n",argv[x]); printf(" Officially:\t%s\n", hp->h_name); fputs(" Aliases:\t",stdout); for(x2=0; hp->h_aliases[x2]; ++x2 ) { if (x2) fputs(", ",stdout); fputs(hp->h_aliases[x2],stdout); } fputc('\n',stdout); if (hp->h_addrtype==AF_INET) { printf(" Type:\t\tAF_INET\n"); if ( hp->h_addrtype == AF_INET ) { for (x2=0; hp->h_addr_list[x2]; ++x2 ) printf(" Address:\t%s\n", inet_ntoa(*(struct in_addr *)hp->h_addr_list[x2])); } putchar('\n'); } } } il programma funzionava cos' $ ./exeguibile www.yahoo.com www.redhat.com output: Host www.yahoo.com : Officially: www.yahoo.akadns.net Aliases: www.yahoo.com Type: AF_INET Address: 64.58.76.222 Address: 64.58.76.223 Address: 64.58.76.224 Address: 64.58.76.225 […..] Host www.redhat.com : Officially: www.redhat.com Aliases: Type: AF_INET Address: 66.187.232.56 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:48.



















