View Full Version : [c++] indirizzo ip
jangy22xx
14-01-2010, 15:39
ragazzi mi sapete dire il codice per visualizzare il mio indirizzo ip in c++ e salvarlo in un file?
http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
jangy22xx
14-01-2010, 16:07
http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
questo è per quello privato della proprio configurazione di rete o sbaglio? per quello pubblico invece?
Teo@Unix
14-01-2010, 16:27
http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
attenzione. questo non è sufficiente, la funzione ritorna solo l'hostName del pc locale...
"The gethostname function retrieves the standard host name for the local computer."
i modi sono più di uno...
in C++, probabilmente le librerie che usi hanno una classe che lo può fare, cmq questo è un esempio che va bene anche per il C++:
// *** Windows ***
/* Un esempio per ricavare l'indirizzo IP della macchina locale */
#include <iostram.h>
#include <winsock.h>
int require()
{
char ac[80];//Il nome
//Prendo il nome host locale:
if(gethostname(ac,sizeof(ac)) == SOCKET_ERROR) {
cerr << "Error" << WSAGetLastError() <<
"quando si e' tentato di recuperare il nome host locale." << endl;
return 1;
}
//Recupero l'indirizzo dal nome host:
cout << "Il nome dell'host e':" << ac << "." << endl;
struct hostent *phe = gethostbyname(ac);
if(phe == 0) {
cerr << "L'host utilizzato per il lookup non e' valido" << endl;
return 1;
}
//Questo ciclo for stampa tutti gli indirizzi associati all'host
//che possono essere più di uno, prelevandoli dalla struttura ritornata:
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));
cout << "Indirizzo: " << i << ":" << inet_ntoa(addr) << endl;
}
return 0;
}
jangy22xx
14-01-2010, 19:34
attenzione. questo non è sufficiente, la funzione ritorna solo l'hostName del pc locale...
"The gethostname function retrieves the standard host name for the local computer."
i modi sono più di uno...
in C++, probabilmente le librerie che usi hanno una classe che lo può fare, cmq questo è un esempio che va bene anche per il C++:
// *** Windows ***
/* Un esempio per ricavare l'indirizzo IP della macchina locale */
#include <iostram.h>
#include <winsock.h>
int require()
{
char ac[80];//Il nome
//Prendo il nome host locale:
if(gethostname(ac,sizeof(ac)) == SOCKET_ERROR) {
cerr << "Error" << WSAGetLastError() <<
"quando si e' tentato di recuperare il nome host locale." << endl;
return 1;
}
//Recupero l'indirizzo dal nome host:
cout << "Il nome dell'host e':" << ac << "." << endl;
struct hostent *phe = gethostbyname(ac);
if(phe == 0) {
cerr << "L'host utilizzato per il lookup non e' valido" << endl;
return 1;
}
//Questo ciclo for stampa tutti gli indirizzi associati all'host
//che possono essere più di uno, prelevandoli dalla struttura ritornata:
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));
cout << "Indirizzo: " << i << ":" << inet_ntoa(addr) << endl;
}
return 0;
}
grazie mille ora lo provo....ma dove l'hai trovato?
Per recuperare l'indirizzo ip pubblico ti devi appoggiare ad un servizio esterno.
Tipo questo: www.ilmioip.com
Ce ne sono anche altri che visualizzano una pagina più semplice, ma non mi ricordo l'indirizzo.
jangy22xx
14-01-2010, 21:12
Per recuperare l'indirizzo ip pubblico ti devi appoggiare ad un servizio esterno.
Tipo questo: www.ilmioip.com
Ce ne sono anche altri che visualizzano una pagina più semplice, ma non mi ricordo l'indirizzo.
eh ho capito....il problema è in che modo....:mbe:
jangy22xx
14-01-2010, 21:13
attenzione. questo non è sufficiente, la funzione ritorna solo l'hostName del pc locale...
"The gethostname function retrieves the standard host name for the local computer."
i modi sono più di uno...
in C++, probabilmente le librerie che usi hanno una classe che lo può fare, cmq questo è un esempio che va bene anche per il C++:
// *** Windows ***
/* Un esempio per ricavare l'indirizzo IP della macchina locale */
#include <iostram.h>
#include <winsock.h>
int require()
{
char ac[80];//Il nome
//Prendo il nome host locale:
if(gethostname(ac,sizeof(ac)) == SOCKET_ERROR) {
cerr << "Error" << WSAGetLastError() <<
"quando si e' tentato di recuperare il nome host locale." << endl;
return 1;
}
//Recupero l'indirizzo dal nome host:
cout << "Il nome dell'host e':" << ac << "." << endl;
struct hostent *phe = gethostbyname(ac);
if(phe == 0) {
cerr << "L'host utilizzato per il lookup non e' valido" << endl;
return 1;
}
//Questo ciclo for stampa tutti gli indirizzi associati all'host
//che possono essere più di uno, prelevandoli dalla struttura ritornata:
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));
cout << "Indirizzo: " << i << ":" << inet_ntoa(addr) << endl;
}
return 0;
}
NON funziona comunque
Dipende da cosa usi... Compilatore ? Framework ?
NON funziona comunque
Recupera indirizzo privati anche quello.
tomminno
14-01-2010, 21:24
Per recuperare l'indirizzo ip pubblico ti devi appoggiare ad un servizio esterno.
Tipo questo: www.ilmioip.com
Ce ne sono anche altri che visualizzano una pagina più semplice, ma non mi ricordo l'indirizzo.
C'è anche un'alternativa tutta casalinga: avere un nas e dyndns. Basta pubblicare una banalissima pagina in php sul nas che faccia l'echo dell'ip del chiamante.
Lato software una semplice chiamata web all'indirizzo registrato su dyndns.
tomminno
14-01-2010, 21:27
eh ho capito....il problema è in che modo....:mbe:
Potresti usare una libreria per la gestione del protocollo HTTP come cUrl.
jangy22xx
14-01-2010, 21:28
C'è anche un'alternativa tutta casalinga: avere un nas e dyndns. Basta pubblicare una banalissima pagina in php sul nas che faccia l'echo dell'ip del chiamante.
Lato software una semplice chiamata web all'indirizzo registrato su dyndns.
okok il problema è la chiamata alla pagina web con il c++ e la visualizzazione del solo ip
C'è anche un'alternativa tutta casalinga: avere un nas e dyndns. Basta pubblicare una banalissima pagina in php sul nas che faccia l'echo dell'ip del chiamante.
Lato software una semplice chiamata web all'indirizzo registrato su dyndns.
Con dyndns basta anche solo risolvere l'indirizzo dyndns ;)
Teo@Unix
14-01-2010, 22:18
NON funziona comunque
Ho sbagliato a scrivere un include ....
lo utilizzato più volte cmq.. (per il privato):mbe:
jangy22xx
14-01-2010, 22:30
Ho sbagliato a scrivere un include ....
lo utilizzato più volte cmq.. (per il privato):mbe:
nono nn va lo stesso....avevo già corretto include.... che compilatore usi?
Teo@Unix
14-01-2010, 22:32
per quello avevo utilizzato visual studio,
che errori ti da?
jangy22xx
14-01-2010, 23:05
per quello avevo utilizzato visual studio,
che errori ti da?
sto utilizzando devc++ ma mi stampa caratteri strani anzichè l'indirizzo ip...
io non capisco perchè alcune parti d codice funzionino solo su alcuni compilatori e altre solo su altri e se uno vuole fare un programma unico su un compilatore è un casino con le librerie
In ogni caso quel codice funziona solo per l'indirizzo privato ;)
nuovoUtente86
14-01-2010, 23:20
C'è anche un'alternativa tutta casalinga: avere un nas e dyndns. Basta pubblicare una banalissima pagina in php sul nas che faccia l'echo dell'ip del chiamante.
Lato software una semplice chiamata web all'indirizzo registrato su dyndns.
per funzionare all' interno della lan, bisogna disporre di un router in grado di risolvere le regole di loopback, e quelli casalinghi con tale funzionalità si contano sulle dita di una mano.
jangy22xx
14-01-2010, 23:25
ok ci sono riuscito in questo modo:
#pragma comment(lib,"urlmon.lib")
#include <iostream>
#include <urlmon.h>
#include <fstream>
#include <string>
#include <io.h>
#define indirizzo "http://checkip.dyndns.org/ "
using namespace std;
int main()
{
char tempFileName[]="c:\\temp\\help.jpg";
_mktemp(tempFileName);
if(URLDownloadToFile(NULL,indirizzo,tempFileName,0,NULL)!=S_OK)
{
cerr<<"Impossibile effettuare il download del file.";
}
return 0;
}
peccato che funziona solo con visual studio e a me servirebbe funzionasse con devc++
come faccio? se copio la libreria urlmon.h dalla cartella di visual c++ a quella di devc++ mi da comuqneu degli errori...però la libreria è la stessa
Prova questo: http://msdn.microsoft.com/en-us/library/aa384098(VS.85).aspx
In alternativa ci sono sempre i socket.
jangy22xx
14-01-2010, 23:35
Prova questo: http://msdn.microsoft.com/en-us/library/aa384098(VS.85).aspx
non capisco il codice di quello.... comuqneu quello prima funziona ma non su devc++ porca miseria
Purtroppo ora non posso guardare quali api per la connessione ad internet sono presenti su MingW32...
jangy22xx
15-01-2010, 00:07
vabbè nn importa aspetterò che qualcuno mi dia una mano:doh:
wingman87
15-01-2010, 00:17
Ma non funziona nel senso che non compila o nel senso che l'esecuzione da risultati errati? Perché nel primo caso potrebbe essere una questione di linking delle librerie
jangy22xx
15-01-2010, 00:24
Ma non funziona nel senso che non compila o nel senso che l'esecuzione da risultati errati? Perché nel primo caso potrebbe essere una questione di linking delle librerie
da dei risultati errati...ti postoil log
Compilatore: Default compiler
Building Makefile: "C:\Documents and Settings\ANGELO\Desktop\C++\Makefile.win"
Esecuzione di make...
make.exe -f "C:\Documents and Settings\ANGELO\Desktop\C++\Makefile.win" all
g++.exe -c Z:/PROGECT/SenzaTitolo15.cpp -o Z:/PROGECT/SenzaTitolo15.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/lib"
In file included from Z:/PROGECT/SenzaTitolo15.cpp:29:
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:13:19: msxml.h: No such file or directory
In file included from Z:/PROGECT/SenzaTitolo15.cpp:29:
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:3279: error: `IXMLElement' has not been declared
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:3360: error: `IXMLElement' has not been declared
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:3457: error: `uCLSSPEC' has not been declared
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:3457: error: `QUERYCONTEXT' has not been declared
Z:/PROGECT/SenzaTitolo15.cpp: In function `int main()':
Z:/PROGECT/SenzaTitolo15.cpp:40: error: `URLOpenBlockingStream' undeclared (first use this function)
Z:/PROGECT/SenzaTitolo15.cpp:40: error: (Each undeclared identifier is reported only once for each function it appears in.)
make.exe: *** [Z:/PROGECT/SenzaTitolo15.o] Error 1
Esecuzione terminata
Questo funziona su Dev-C++: http://www.dotnetheaven.com/Uploadfile/mahesh/DownloadwPgbyIntopenURLAPI05232005065621AM/DownloadwPgbyIntopenURLAPI.aspx
wingman87
15-01-2010, 12:59
da dei risultati errati...ti postoil log
Compilatore: Default compiler
Building Makefile: "C:\Documents and Settings\ANGELO\Desktop\C++\Makefile.win"
Esecuzione di make...
make.exe -f "C:\Documents and Settings\ANGELO\Desktop\C++\Makefile.win" all
g++.exe -c Z:/PROGECT/SenzaTitolo15.cpp -o Z:/PROGECT/SenzaTitolo15.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/lib"
In file included from Z:/PROGECT/SenzaTitolo15.cpp:29:
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:13:19: msxml.h: No such file or directory
In file included from Z:/PROGECT/SenzaTitolo15.cpp:29:
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:3279: error: `IXMLElement' has not been declared
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:3360: error: `IXMLElement' has not been declared
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:3457: error: `uCLSSPEC' has not been declared
C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/urlmon.h:3457: error: `QUERYCONTEXT' has not been declared
Z:/PROGECT/SenzaTitolo15.cpp: In function `int main()':
Z:/PROGECT/SenzaTitolo15.cpp:40: error: `URLOpenBlockingStream' undeclared (first use this function)
Z:/PROGECT/SenzaTitolo15.cpp:40: error: (Each undeclared identifier is reported only once for each function it appears in.)
make.exe: *** [Z:/PROGECT/SenzaTitolo15.o] Error 1
Esecuzione terminata
Questi sono errori di compilazione, però non sembrano riferirsi al codice che hai postato, dice che c'è un errore alla riga 40 ma il tuo listato è più corto.
Energy++
15-01-2010, 13:24
PROGECT :eek: :asd:
jangy22xx
15-01-2010, 21:50
PROGECT :eek: :asd:
hhaha risolvi il problema se vuoi fare 1 cosa buona anzichè criticare come ho scritto project se nn sai nemmeno il motivo
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.