免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2697 | 回复: 0
打印 上一主题 下一主题

Linux下获取网卡信息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-15 14:23 |只看该作者 |倒序浏览

// all.h
// wenxy created on 2005/04/12,AM
// All copyright reserved.
#ifndef _ALL_H
#define _ALL_H
// ANSC C/C++
#include
#include
#include
#include
#include
// linux
#include
#include
#include
#include
#include
#include   // socket
#include
#include   // time
#include  
#include
#include
//#include
#include
#include
// micro
//#define OutErrStr(info) (printf("Error : %s\n", info))
//#define OutErrInt(info) (printf("Error : %d\n", info))
#define BUFF_SIZE   (1024 * 1)
#define MAX_NIC    16
#endif
// --------------------------------------------------------------------------------------------------
// main.c
#include "all.h"
// function
static bool GetNICInfo(void *pBuff, ...);
// global variable
int g_nSocket = 0;
char chBuff[BUFF_SIZE];
int main(int argc, char *argv[])
{
printf("Run ...\n");
if ( ! GetNICInfo(NULL) )
{
  printf("Error : call GetNICInfo() function failed\n");
  printf("-----------------------------------\n\n");
}
return 0;
}
// NIC attribute
static bool GetNICInfo(void *pBuff, ...)
{
if ( -1 == (g_nSocket = socket(AF_INET, SOCK_DGRAM, 0)) )
{
  printf("Error: create socket failed\n");
  printf("-----------------------------------\n\n");
  return false;
}
struct ifconf ifc;
struct ifreq buff[MAX_NIC];
unsigned int uNICCount = 0;
struct sockaddr_in *pAddr;
memset( &ifc, 0, sizeof(struct ifconf) );
memset( &buff, 0, sizeof(struct ifreq) );
//  control device which name is NIC
if ( ! ioctl (g_nSocket, SIOCGIFCONF, (char *) &ifc) )
{
  uNICCount = ifc.ifc_len / sizeof(struct ifreq);
  printf("NIC total is : %d\n", uNICCount);
  while ( uNICCount -- > 0 )
  {
   if ( ! (ioctl (g_nSocket, SIOCGIFADDR, (char *) &buff[uNICCount]) ) )
   {
    pAddr = (struct sockaddr_in *) (&buff[uNICCount].ifr_addr);
    printf("IP : %s\n", inet_ntoa( (pAddr->sin_addr ) ));
   }
   else
   {
    printf("Error :  read NIC information failed\n");
    printf("-----------------------------------\n\n");
   }
  }
}
if (g_nSocket)
{
  close(g_nSocket);
}
return true;
}
// --------------------------------------------------------------------------------------------------------
# makefile
bin = nic_info
objets = main.o
rubbish = $(objets) $(bin)
$(bin) : main.o
g++ -g -o $(bin) main.o
main.o : main.c all.h
g++ -g -c main.c
.PHONY : clean
clean :
-rm $(rubbish)

# end makefile




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5740/showart_360496.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP