codice:
void CFindIP::OnBnClickedFind()
{
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
CString szSite, szBuf;
m_ctrlSite.GetWindowText(szSite);
m_ctrFoundIPs.ResetContent();
//La casella era vuota
if(szSite.IsEmpty())
{
AfxMessageBox("Non hai specificato alcun sito");
return;
}
//Inizial l'uso di Ws2_32.dll da parte del prog e ne "negozia"
//la versione
if(WSAStartup( wVersionRequested, &wsaData ) != 0)
{
AfxMessageBox("Impossibile trovare una dll Winsock adatta");
WSACleanup();
return;
}
//Test sullo stato della conessione (evita l'apertura) di
//quella fastidiosa finestra di connessione a ogni pressione del
//pulsante.
LPDWORD lpdwFlags = NULL;
if(!InternetGetConnectedState(lpdwFlags,0))
{
AfxMessageBox("E' necessaria una connessione attiva\nper questa funzione");
return;
}
//Puntatore a una struttura che riceverà i dati
hostent *host;
//Ricava le informazioni richieste da un database di host
host = gethostbyname(LPCSTR(szSite));
//Fallimento
if(!host)
{
m_ctrFoundIPs.AddString("Impossibile trovare un IP");
WSACleanup();
return;
}
//Indirizzo non IPv4
if(host->h_length != 4)
{
AfxMessageBox("Indirizzo di tipo non supportato");
WSACleanup();
return;
}
//Aggiunge alla lista gli IP trovati
flag = FALSE;
for(int i = 0; host->h_addr_list[i]; i++)
{
szBuf.Format("%s",inet_ntoa(*( (struct in_addr *)host->h_addr_list[i])));
flag = TRUE;
m_ctrFoundIPs.AddString(szBuf);
}
//Termina l'uso di Ws2_32.dll.
WSACleanup();
}
Questo è un gestore di messaggi di un'applicazione MFC che ho scritto.Il linguaggio è C++ ma utilizza anche delle API del sistema operativo.vedi se ti va bene,se no adattalo.ciao