Linux下如何获取网卡信息

2024-05-20

1. Linux下如何获取网卡信息

有时候,写程序的时候需要获取计算机的网络信息,比如IP地址、电脑名称、DNS等信息。IP地址和电脑名称是比较容易获取到的,而要想获取地址掩码、DNS、网关等信息就有些麻烦了。在Windows下我们一般都是通过从注册表读取这些信息。在Linux怎么做呢?其实,Linux下更加容易一些。因为我们可以拿现成的程序看它的源代码。通过阅读其源代码找到解决该问题的方法。那么,看哪个程序的源代码呢?如果你使用过Linux,并且比较熟悉的话就肯定知道一个命令ifconfig。这个命令和Windows下的ipconfig差不多,都可以输出网卡的信息,其中就包含DNS、掩码等信息。所以,我们可以通过看它的源代码来找到解决该问题的方法。获取系统中的网卡数量 并没有那个系统调用提供网卡数量的获取。但是,我们可以通过强大的proc文件系统获取网卡数量的信息。实际上,ifconfig也是这样做的,请看示例代码如下:0001 #include 0002 #include 0003 #include 0004 0005 int GetNetCardCount()0006 {0007 int nCount = 0;0008 FILE* f = fopen("/proc/net/dev", "r");0009 if (!f)0010 {0011 fprintf(stderr, "Open /proc/net/dev failed!errno:%d\n", errno);0012 return nCount;0013 }0014 0015 char szLine[512];0016 0017 fgets(szLine, sizeof(szLine), f); 0018 fgets(szLine, sizeof(szLine), f);0019 0020 while(fgets(szLine, sizeof(szLine), f))0021 {0022 char szName[128]= {0};0023 sscanf(szLine, "%s", szName);0024 int nLen = strlen(szName);0025 if (nLen sa_data[2]))); }代码很简单,就不做解释了。 怎么获取网关呢?这个稍微有点麻烦一些,不过和获取网卡数量相似,都是通过proc文件系统。这次分析的/proc/net/route文件。我就不再贴出示例代码了。最后,我把运行示例程序获取到的信息附上,以供大家有个直观的认识:eth0: MAC: 08-00-27-98-bf-f3 IP: 192.168.1.106 BroadIP: 255.255.255.255 Netmask: 255.255.255.0Gateway: 192.168.1.1eth1: MAC: 08-00-27-16-f4-bf IP: 192.168.1.108 BroadIP: 192.168.1.255 Netmask: 255.255.255.0Gateway: 0.0.0.0eth2: MAC: 08-00-27-37-9c-91 IP: 0.0.0.0 BroadIP: 0.0.0.0 Netmask: 0.0.0.0Gateway: 0.0.0.0eth3: MAC: 08-00-27-5a-d2-39 IP: 0.0.0.0 BroadIP: 0.0.0.0 Netmask: 0.0.0.0Gateway: 0.0.0.0NetCardCount: 4DNS 0: 218.2.135.1DNS 1: 61.147.37.1

Linux下如何获取网卡信息

最新文章
热门文章
推荐阅读