PDA

View Full Version : [C]Rilevare Indirizzo IP


osa
27-10-2006, 19:22
Uso linux Ububtu, vorrei conoscere l'indirizzo IP di un host (anche del mio computer che usa un indirizzo dinamico). Ho provato ad usare la funzione getipnodebyname ma non mi compila il sorgente ecco l'errore: assignment makes pointer from integer without a cast
/tmp/ccOjuHC8.o: In function `main':
cftp.c:(.text+0x2a): undefined reference to `getipnodebyname'
collect2: ld returned 1 exit status

Sapete dirmi qualcosa?

wisher
27-10-2006, 20:27
sei sicuro di avere incluso le librerie nesessarie?

wisher
27-10-2006, 20:29
questa è la manpage per la funzione che ti interessa
http://www.cs.biu.ac.il/cgi-bin/man?getipnodebyname+3SOCKET

osa
27-10-2006, 20:52
questa è la manpage per la funzione che ti interessa
http://www.cs.biu.ac.il/cgi-bin/man?getipnodebyname+3SOCKET

Ho aggiunto tutte le librerie, è una cosa strana. Conoscete qualche funzione alternativa?
Dimenticavo ho un modem router Telit AR520 (quello che distribuisce Libero ) crea qualche intoppo?

osa
28-10-2006, 11:00
Ho risolto il problema, dovevo converire l'indirizzo con inet_ntop, ma come faccio a sapere il mio indirizzo IP di connessione ad internet, se chiamo gethostbyname("localhost") mi da 127.0.0.1 ovvero l'IP locale.

wisher
28-10-2006, 11:06
prova a inserire al posto di localhost il tuo hostname
(non so se funziona, però è la prima cosa che mi viene in mente)

osa
28-10-2006, 11:25
prova a inserire al posto di localhost il tuo hostname
(non so se funziona, però è la prima cosa che mi viene in mente)
E' lo stesso dato che in /etc/hosts così è impostato

jappilas
28-10-2006, 12:25
Ho risolto il problema, dovevo converire l'indirizzo con inet_ntop, ma come faccio a sapere il mio indirizzo IP di connessione ad internet, se chiamo gethostbyname("localhost") mi da 127.0.0.1 ovvero l'IP locale.
siccome sei dietro router, le macchine interne alla rete non conoscono l' indirizzo con cui escono su internet: l' IP lo sa il router, in quanto è il suo indirizzo sull' interfaccia WAN ottenuto tramite DHCP
se il telit ha un' interfaccia di gestione web based, dovrebbe esserci un pannello sinottico da cui recuperarlo

osa
28-10-2006, 17:14
siccome sei dietro router, le macchine interne alla rete non conoscono l' indirizzo con cui escono su internet: l' IP lo sa il router, in quanto è il suo indirizzo sull' interfaccia WAN ottenuto tramite DHCP
se il telit ha un' interfaccia di gestione web based, dovrebbe esserci un pannello sinottico da cui recuperarlo
Si l'interfaccia di gestione web based è presente, ma in C come faccio a recuperlo, sembra una cosa così banale...

jappilas
28-10-2006, 21:41
Si l'interfaccia di gestione web based è presente, ma in C come faccio a recuperlo, sembra una cosa così banale...
uhm, non saprei... magari con un programmino che si connetta all' indirizzo del gateway, si logghi sulla webconsole e parsi l' html ricevuto per estrarre la quaterna IP scritta nel campo WAN address? :D

(posto che nella pletora di protocolli ausiliari e diagnostici che viaggiano su ip tra router e router e tra router e host un modo quasi sicuramente ci sarà anche se ora non mi viene in mente... :stordita: )

Blackat
29-10-2006, 07:50
uhm, non saprei... magari con un programmino che si connetta all' indirizzo del gateway, si logghi sulla webconsole e parsi l' html ricevuto per estrarre la quaterna IP scritta nel campo WAN address?


Geniale come cosa!!! :D

Certo che se il router non ha interfaccia web la vedo un po' dura.
Poi se ha l'interfaccia web non credo che l'accesso sia garantito a tutti.

Conoscere l'indirizzo IP con cui un router esce su internet non è così semplice.

L'unico modo che conosco io è quello di utilizzare il protocollo STUN.

http://en.wikipedia.org/wiki/STUN

Sì lo so. Sembra brutto ma non lo è. Alla fine basta inviare un pacchetto UDP particolare ad un server STUN pubblico e questo magicamente ti ritorna un pacchetto UDP che contiene il tuo indirizzo pubblico.

Poi non so se esistono altri metodi. Probabilmente sì.

Ciao ciao.