avrei bisogno di ricavare l' ip di una macchina remota tramite connessione tcp
come si può fare? (per Unix)
grazie in anticipo
avrei bisogno di ricavare l' ip di una macchina remota tramite connessione tcp
come si può fare? (per Unix)
grazie in anticipo
Credo di non aver capito
Se ti connetti alla macchina remota, significa che hai il suo ip.
Se la macchina remota si connette a te, il suo ip è contenuto nella struttura che ti ritorna dalla accept.
intanto grazie,
dovendo creare un piccolo dns si deve inserire il nome dell' hostname e da questo risalire all' ip,
è questo il problema.Da dove si può "ricavare"?Esistono funzioni in c per farlo?
Per risolvere l'indirizzo puoi usare gethostbyname o getaddrinfo.
mi potete fare un esempio pratico di come risolvere questa situazione?
google ti è amico: ti hanno indicato la funzione, questo è il primo result e questo è il secondo result di una ricerca su google con parole chiaveOriginariamente inviato da CodiceProg
mi potete fare un esempio pratico di come risolvere questa situazione?
getHostByName C example
e penso che in molti abbiano scritto e testato esempi simili a questo.
ho trovato questa funzione,restituisce l' ip,può andare bene?
codice:int lookup_host (const char *host,char *indip) { struct addrinfo hints, *res; int errcode; char addrstr[100]; void *ptr; memset (&hints, 0, sizeof (hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags |= AI_CANONNAME; errcode = getaddrinfo (host, NULL, &hints, &res); if (errcode != 0) { printf("Host non presente\n"); return -1; } //printf ("Host: %s\n", host); inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100); int y=0; while (res){ y++; inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100); switch (res->ai_family) { case AF_INET: ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr; break; case AF_INET6: ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr; break; } inet_ntop (res->ai_family, ptr, addrstr, 100); //printf ("IPv%d address: %s (%s)\n", res->ai_family == PF_INET6 ? 6 : 4, // addrstr, res->ai_canonname); if(y==1) strcpy(indip, addrstr); res = res->ai_next; } //printf("---->%s\n",indip); return 0; }
l'utilità di questi programmi è sempre più che dubbia senza qualche conoscenza di rete, almeno riguardo il traceroute, senza contare che con il termine IP si indicano genericamente tante informazioni contemporaneamente, anche i DNS sono rappresentati all'esterno da IP, ma non è neanche detto che tu riesca a raggiungerli.
provala in un semplice main e vedi se funziona, quello è l'unico modo per vedere se una funzione va bene oppure no.
funzionare funziona,dando un host restituisce l' ip,ma lo preleva tramite connessione tcp?insomma questa funzione esegue ciò che mi serve?