linux查看mask命令,linux中的ifreq(获取linux的网络信息 网卡、mac、ip、mask等)

/**

* \file getifstat.c

* \author  wzj

* \brief 访问这个struct ifconf 修改,查询状态

* \version

* \note

* \date: 2012年08月11日星期六22:55:25

*/

#include       /* for ifconf */

#include    /* for net status mask */

#include       /* for sockaddr_in */

#include

#include

#include

#include

#define MAX_INTERFACE   (16)

voidport_status(unsignedintflags);

/* set == 0: do clean , set == 1: do set! */

intset_if_flags(char*pif_name,intsock,intstaus,intset)

{

structifreq ifr;

intret = 0;

strncpy(ifr.ifr_name, pif_name, strlen(pif_name) + 1);

ret = ioctl(sock, SIOCGIFFLAGS, &ifr);

if(ret)

return-1;

/* set or clean */

if(set)

ifr.ifr_flags |= status;

else

ifr.ifr_flags &= ~status;

/* set flags */

ret = ioctl(sock, SIOCSIFFLAGS, &ifr);

if(ret)

return-1;

return0;

}

intget_if_info(intfd)

{

structifreq buf[MAX_INTERFACE];

structifconf ifc;

intret = 0;

intif_num = 0;

ifc.ifc_len = sizeof(buf);

ifc.ifc_buf = (caddr_t) buf;

ret = ioctl(fd, SIOCGIFCONF, (char*)&ifc);

if(ret)

{

printf("get if config info failed");

return-1;

}

/* 网口总数 ifc.ifc_len 应该是一个出入参数 */

if_num = ifc.ifc_len/sizeof(structifreq);

printf("interface num is interface = %d\n", if_num);

while(if_num-- > 0)

{

printf("net device: %s\n", buf[if_num].ifr_name);

/* 获取第n个网口信息 */

ret = ioctl(fd, SIOCGIFFLAGS, (char*)&buf[if_num]);

if(ret)

continue;

/* 获取网口状态 */

port_status(buf[if_num].ifr_flags);

/* 获取当前网卡的ip地址 */

ret = ioctl(fd, SIOCGIFADDR, (char*)&buf[if_num]);

if(ret)

continue;

printf("IP address is: \n%s\n", inet_ntoa(((structsockaddr_in *)(&buf[if_num].ifr_addr))->sin_addr));

/* 获取当前网卡的mac */

ret = ioctl(fd, SIOCGIFHWADDR, (char*)&buf[if_num]);

if(ret)

continue;

printf("%02x:%02x:%02x:%02x:%02x:%02x\n\n",

(unsigned char)buf[if_num].ifr_hwaddr.sa_data[0],

(unsigned char)buf[if_num].ifr_hwaddr.sa_data[1],

(unsigned char)buf[if_num].ifr_hwaddr.sa_data[2],

(unsigned char)buf[if_num].ifr_hwaddr.sa_data[3],

(unsigned char)buf[if_num].ifr_hwaddr.sa_data[4],

(unsigned char)buf[if_num].ifr_hwaddr.sa_data[5]

);

}

}

voidport_status(unsignedintflags)

{

if(flags & IFF_UP)

{

printf("is up\n");

}

if(flags & IFF_BROADCAST)

{

printf("is broadcast\n");

}

if(flags & IFF_LOOPBACK)

{

printf("is loop back\n");

}

if(flags & IFF_POINTOPOINT)

{

printf("is point to point\n");

}

if(flags & IFF_RUNNING)

{

printf("is running\n");

}

if(flags & IFF_PROMISC)

{

printf("is promisc\n");

}

}

intmain()

{

intfd;

fd = socket(AF_INET, SOCK_DGRAM, 0);

if(fd > 0)

{

get_if_info(fd);

close(fd);

}

return0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值