Newsgroup: it.comp.programmare.win32
Titolo: Ip

Esiste una API che mi restituisca l'indirizzo IP che mi fornisce il provider
quando mi collego ad Internet?
danilo

 danilo
*sigh* basta... č la 3 volta che trovo questa domanda.... perciň scaricati gli ultimi 3/4
giorni di messaggi e guarda la mia risposta di questo lunedě.... il titolo del thread č "Api
per IP"
ok lo ammetto... *sono pigro*
Bonus: Se vuoi imparare a maneggiare bene le socket visita poi:
http://www.stardust.com
http://www.sockaddr.com
http://www.sockets.com


prova sto codice
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
//Richiede come minimo la versione 1.1 di Winsock
const VERSION_MAJOR = 1;
const VERSION_MINOR = 1;
// e' meglio indicare la versione minima di WINSOCK che consente
l'esecuzione del programma.
int main()
{
  WSADATA WSData;
  LPHOSTENT lpHostEntry;
  LPSTR szIPAddress;
  static char lpLocalHostName[256];
  //Tenta di inizializzare Winsock (versione 1.1 o successiva)
  if(WSAStartup(MAKEWORD(VERSION_MAJOR,VERSION_MINOR),&WSData))
  {
    printf("Impossibile trovare Winsock(v%d.%d o successiva)!\n",
VERSION_MAJOR,VERSION_MINOR);
    return 1;
  }
  //Cerca il nome host del tuo computer
  if(gethostname((char*)lpLocalHostName,256) == SOCKET_ERROR)
  {
    printf("Impossibile recuperare il nome dell'host locale\n");
    return 1;
  }
  //Legge le informazioni nella struttura LPHOSTENT per il determinato
host locale
  lpHostEntry = gethostbyname(lpLocalHostName);
  if(lpHostEntry == NULL)
    printf("Impossibile recuperare informazioni sull'host locale\n");
  else
  {
    //Successo. Converte l'indirizzo in notazione a punti (stringa)
    szIPAddress = inet_ntoa(*(LPIN_ADDR)*(lpHostEntry->h_addr_list));
    //doppio deindirizzamento di un puntat. a puntatore(h_addr_list)
    //Visualizza l'indirizzo.
    printf("L'indirizzo IP del localhost '%s' e\': %s\n",
lpLocalHostName,szIPAddress);
  }
  return 0;
}
-- 
Ciao, gengisdave
http://digilander.iol.it/gengisdave
Linux Registered User    # 198292
Linux Registered Machine # 88280

 #include <stdio.h>
[SNIPPONE]
Ok il codice funziona, però vorrei domandare questo:
La mia macchina è in LAN con un'altra macchina, in questo caso il codice
restituisce l'IP interno alla LAN anche quando sono collegato!!!
Come fare per ricavare l'IP del collegamento a internet???'
Ciao a tutti,
Tito.

Tito ha scritto:

Ci sono due ipotesi:
o la tua macchina fa da Gateway per internet e perciò:
char name[ 120 caratteri andrà benissimo ]
  if (gethostname(name, 120)!= SOCKET_ERROR)
 {
 struct hostent* phe = gethostbyname(name);
    if (phe != 0)
 {
    for (int i = 0; phe->h_addr_list[i] != 0; ++i)
  {
        struct in_addr addr;
        memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
! a questo punto la stringa restituita dalla funzione 'inet_ntoa(addr)' contiene l'IP da
gestire come meglio si crede
! questo for è dovuto al fatto che un computer che fa da gateway potrebbe avere più
indirizzi IP assegnati.
  }
 }
 }
o altrimenti la tua macchina usa un altra macchina (un server che fa da proxy) per navigare.
Perciò l'IP che viene visto dall'esterno e quello di questa suddetta macchina...
--
+----------- PMSoftware -------------------------+
# Tutorial:  
http://pmsoftware.tripod.com
        #
# Download:  
http://digilander.iol.it/pmsoftware
 #
°e prossimamente un tutorial su come fare la Firma....