#include<iostream>
#include<net/if.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/ioctl.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
using namespace std;
int main(int argc,char**argv)
{
int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
struct ifreq buf[8];
struct ifconf ifc;
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t)buf;
if(!ioctl(fd, SIOCGIFCONF, (char*)&ifc))
{
int interface = ifc.ifc_len / sizeof(ifreq);
while (interface-- > 0)
{
if (!(ioctl(fd, SIOCGIFADDR, (char*)&buf[interface])))
{
in_addr *paddr = &(((sockaddr_in*)(&buf[interface].ifr_addr))->sin_addr);
if (paddr->s_addr == 0x100007F) continue;
char* ip = inet_ntoa(*paddr);
cout<<ip<<endl;
}
}
}
return 0;
}