hier eine Loesung mit ioctl() (thx wulf)
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <net/if.h>
unsigned long get_ifaddr(char *ifname)
{
int s;
struct ifreq ifr;
struct sockaddr_in sa;
strncpy(ifr.ifr_name,ifname,IFNAMSIZ);
s=socket(AF_INET,SOCK_DGRAM,0);
if(ioctl(s,SIOCGIFADDR,&ifr))
{
close(s);
return(0);
}
close(s);
memcpy(&sa,&ifr.ifr_addr,16);
return(sa.sin_addr.s_addr);
}
int main(int argc, char **argv)
{
struct in_addr in;
if(argc!=2) {
fprintf(stderr,"Usage: %s interface\n",argv[0]);
return(1);
}
if((in.s_addr=get_ifaddr(argv[1]))==0) {
return(1);
}
printf("%s\n",inet_ntoa(in));
return(0);
}
Als Argument musst du das netz interface angeben bei mit dann:
programm ppp0
fuer lokale ips
programm eth0 etc..
btw...das dingen wird imo definitiv nicht unter win laufen..
:wq!