View Full Version : ifconfig solo per visualizzare ip
Prince_81
16-01-2009, 08:57
ho creato un programmino in c che mi permetta di visualizzare l'ip del mio pc in questo modo:
#include <stdio.h>
#include <stdlib.h>
void main(){
printf("s\n",system("ifconfig"));
}
solo ke mi ritorna una lunga serie di informazioni che no mi servono io voglio che mi ritorni solo l'ip, sapete come si fa?
ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
Questo ti restituisce l'indirizzo ip di ogni interfaccia di sistema tranne quella di loopback. se ti interessa l'indirizzo ip di un interfaccia specifica aggiungi l'interfaccia a ifconfig e togli il grep -v '127.0.0.1
scusa...
capisco che magari lo stai usando per imparare a programmare...
ma fare un programma che non fa altro che lanciarne un altro, mi sembra un pochino inutile!
se lo fai per imparare a programmare, sono sicuro che in C c'e' qualche libreria per riuscire ad avere direttamente l'ip senza usare programmi esterni... altrimenti se invece quello che vuoi e' solo l'ip, ma non ti interessa imparare a programmare, usa uno script bash che ci metti meno!
tipo:
ifconfig eth0 | grep "inet addr" | cut -d ":" -f 2 | cut -d " " -f 1
ovviamente ti da l'ip di eth0... e l'ho scritto in 10 secondi, quindi magari c'e' di meglio!
Oppure lo fai in C e al posto di stampare subito a video memorizzi l'output di system in un buffer di char, cerchi il pezzo che ti serve, lo estrai e stampi solo quello.
Prince_81
20-01-2009, 13:23
W.S dici bene mi interesserebbe una funzione in c che mi restituisca l'ip per poi memorizzarlo in un array ma pultroppo il mio manuale non indica una funzione del genere.
Se tu la conosci mi sarebbe di grandissimo aiuto saperla.
Comunque grazie a tutti dell'aiuto.
E-Tip provo subito i comandi che mi hai indicato e ti farò sapere.
Un programmino base base per stampare hostname e ip può essere questo:
#include <stdio.h>
#include <netdb.h>
int main(void){
char Buf[200];
struct hostent *host;
gethostname(Buf, 200);
host = (struct hostent*)gethostbyname(Buf);
printf("Hostname : %s\n", host->h_name);
printf("IP Address : %s\n", inet_ntoa(*((struct in_addr *)host->h_addr)));
}
Prince_81
20-01-2009, 15:11
w.s il programmino mi da i seguenti worning:
prova.c: In function ‘main’:
prova.c:11: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
prova.c:4: warning: return type of ‘main’ is not ‘int’
e l'output è:
Hostname : ubuntu.ubuntu-domain
Segmentation fault
hmm, a me va senza problemi..
white@lilith:~/ws_dev/scripts$ gcc -o getIp getIp.c
white@lilith:~/ws_dev/scripts$ ./getIp
Hostname : lilith
IP Address : 192.168.0.66
white@lilith:~/ws_dev/scripts$
immagino sia un problema di librerie/compilatore, prova a scomporre l'istruzione
inet_ntoa(*((struct in_addr *)host->h_addr))
in diversi passi per localizzare il problema.
Strano, di solito quell'errore capita al contrario, cioè quando si usa main void() senza int main void().
Che compilatore stai usando?
C/C++, vero ? Non un c#.
@W.S
Il tuo hostname è uguale al nick di una mia amica romagnola ... non è che ...
Prince_81
21-01-2009, 17:05
microsoft visual c++ 2008 express edition
Prince_81
21-01-2009, 17:08
vorrei chiedervi conoscete qualche manuale c che tratta le librerie per creare socket tipo le librerie che mi state spiegando voi ?
Già non avevo notato quel warning, mi ero soffermato sulla differenza dell'inet_ntoa e al segfault.
@W.S
Il tuo hostname è uguale al nick di una mia amica romagnola ... non è che ...
:D purtroppo no
microsoft visual c++ 2008 express edition
Cos'è 'sta cosa in neretto ? :muro:
Se è quello in edicola, credo sia il c# .net.
Ma lo compili su win e lo lanci su Ubuntu ? C'è qualcosa che non mi quadra.
P.S: Warnings, con la 'a'
:eek: :eek: MS visual studio?!?!? :confused:
questo spiega perché le librerie sono diverse :D
Se vuoi programmare su linux qui c'è una buona documentazione:
http://gapil.truelite.it/
in particolare per la rete:
http://www.lilik.it/~mirko/gapil/gapilpa2.html#x545-257000II
però quell'ambiente di sviluppo non va bene, le winsock sono diverse.
Usa il classico gcc.
ho creato un programmino in c che mi permetta di visualizzare l'ip del mio pc in questo modo:
#include <stdio.h>
#include <stdlib.h>
void main(){
printf("s\n",system("ifconfig"));
}
solo ke mi ritorna una lunga serie di informazioni che no mi servono io voglio che mi ritorni solo l'ip, sapete come si fa?
Perché hai postato qui se stai programmando su Windows ?
Ma non sta programmando in win, altrimenti ifconfig non funzionerebbe e nemmeno il programma iniziale.. c'è parecchio che non mi torna in ste thread :D
Ma non sta programmando in win, altrimenti ifconfig non funzionerebbe e nemmeno il programma iniziale.. c'è parecchio che non mi torna in ste thread :D
Forse voleva usare ipconfig ? Boh.
Quel codice poi compila giusto perché non ha messo la % nel formato in printf :)
Prince_81
22-01-2009, 17:52
scusate compilo con gcc
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.