PDA

Visualizza la versione completa : [C] Ottenere l'indirizzo IP della propria macchina


jonah.qua
08-04-2007, 16:51
Ciao a tutti, avrei bisogno di fare un piccolo programmino C che mi restituisca come output l'indirizzo IP della mia macchina. (non il 127.0.0.1).
Non ho nessun router quindi nessun problema di IP interno o esterno e sto lavorando con le librerie di Linux. Ho scritto qualcosa ma ottengo degli indirizzi IP a casaccio sempre diversi!
Ho cercato in internet se ci fosse qualcosa già fatto ma non ho trovato niente..
Sapete darmi una dritta? :confused:

Grazie, ciao ciao! :D

jonah.qua
08-04-2007, 17:07
Questo è quello che ho combinato ma come ripeto restituisce IP a caso sempre diversi..


char *getip (u_long in);

int
main ()
{

struct
{
struct iphdr ip;
char data[sizeof (struct iphdr)];
} Packet;

printf("SOURCE IP: %s\n",getip(Packet.ip.saddr));

}

char *getip ( u_long in)
{
struct in_addr s;
s.s_addr = in;
return inet_ntoa(s);
}

XWolverineX
08-04-2007, 18:57
Intendi l'ip della "rete locale" o quello con cui sei collegato a internet?

jonah.qua
08-04-2007, 19:20
Quello con cui sono collegato ad internet!

XWolverineX
08-04-2007, 19:26
Su linux non lo so (a dir la verità non lo so nemmeno su windows :D) ma potresti provare a usare

popen(ifconfig)


e cercare di effettuare il parsing dell'output...

jonah.qua
08-04-2007, 19:34
Ma non saprei come estrarre solo l'IP. Mi serve quello perchè devo salvarlo in una variabile

MItaly
08-04-2007, 20:40
Siamo sempre sullo stesso problema: comunque tu sia collegato ad internet è sempre molto ma molto probabile che la tua macchina, di per sé, non sappia il suo indirizzo visibile dall'esterno, perché spesso e volentieri si trova dietro a uno o più NAT (tuoi o del tuo ISP). L'unica di solito è effettuare una richiesta HTTP ad un qualunque sito che restituisce il tuo IP (ad esempio http://pchelplive.com/ip.php) ed esaminare il risultato.

jonah.qua
08-04-2007, 23:15
Risolto ma scavalcando il problema..

Ho aggiunto al file /etc/ppp/ip-up la riga:


echo $4 > ip

e poi vado a riprendermi la stringa scritta nel file

:ciauz:

XWolverineX
09-04-2007, 09:58
Potrei vedere il codice? Sono curioso.

jonah.qua
09-04-2007, 12:09
FILE *ingresso;

printf("Lettura dal file %s\n",FileIP);
ingresso=fopen(FileIP,"r");
if(ingresso==NULL)
return ErroreIO;
stringa=calloc(LunghezzaMaxStringa,sizeof(char));
if(stringa==NULL)
return ErroreMemoria;
fscanf(ingresso,"%s",stringa);
printf("Stringa: %s\n",stringa);
fclose(ingresso);

Loading