ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

»ñµÃÖ÷»úµÄIPºÍÖ÷»úÃû
2014-11-23 21:45:57 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:5571´Î
Tags£º»ñµÃ Ö÷»ú

/*
* g++ -o gethostip gethostip.cpp
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define MAXINTERFACES 16
#define INT int
#define CHAR char

class CIfCfg
{
public:
enum IFSTATUS {UNKOWN,PROMISC,UP,RUNNING,DOWN};
struct Sifcfg
{
CHAR name[16];
CHAR address[16];
IFSTATUS status;
};
Sifcfg interfaces[MAXINTERFACES];
INT size;

CIfCfg()
{
size=0;
}
};

INT getLocalHostAddress(CIfCfg& ifcfg)
{
register int fd, intrface;
struct ifreq buf[MAXINTERFACES];
struct ifconf ifc;

if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0)
{
return -1;
}

ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t) buf;
if (ioctl (fd, SIOCGIFCONF, (char *) &ifc) < 0)
{
return -1;
}

intrface = ifc.ifc_len/sizeof(struct ifreq);
while (intrface-- > 0)
{
if ((ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface])) < 0)
{
continue;
}
snprintf(ifcfg.interfaces[ifcfg.size].name,
sizeof(ifcfg.interfaces[ifcfg.size].name),
"%s",buf[intrface].ifr_name);

if (buf[intrface].ifr_flags & IFF_PROMISC)
{
ifcfg.interfaces[ifcfg.size].status=CIfCfg::PROMISC;
}
else
{
if (buf[intrface].ifr_flags & IFF_UP)
{
ifcfg.interfaces[ifcfg.size].status=CIfCfg::UP;
}
else
{
if (buf[intrface].ifr_flags & IFF_RUNNING)
{
ifcfg.interfaces[ifcfg.size].status=CIfCfg::RUNNING;
}
}
}

if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface])))
{
snprintf(ifcfg.interfaces[ifcfg.size].address,
sizeof(ifcfg.interfaces[ifcfg.size].address),
"%s",
inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr));
}
else
continue;

ifcfg.size++;

}
close (fd);
return ifcfg.size;

}

int main(void)
{
CIfCfg ipconfig;
int num=getLocalHostAddress(ipconfig);
for (int i=0; i printf("-------- num:%d name:%s status:%d address:%s ",
i,
ipconfig.interfaces[i].name,
ipconfig.interfaces[i].status,
ipconfig.interfaces[i].address);
return 1;
}

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£ºCÓïÑÔС³ÌÐò¨DÊ®½øÖÆСÊýת¶þ½øÖ.. ÏÂһƪ£ºÁ½ÖÖÍâÅÅÐòµÄ˼·sorting by merg..

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿