linux下如何获取网卡信息

author author     2023-05-08     597

关键词:

有时候,写程序的时候需要获取计算机的网络信息,比如IP地址、电脑名称、DNS等信息。IP地址和电脑名称是比较容易获取到的,而要想获取地址掩码、DNS、网关等信息就有些麻烦了。在Windows下我们一般都是通过从注册表读取这些信息。在Linux怎么做呢?其实,Linux下更加容易一些。因为我们可以拿现成的程序看它的源代码。通过阅读其源代码找到解决该问题的方法。那么,看哪个程序的源代码呢?如果你使用过Linux,并且比较熟悉的话就肯定知道一个命令ifconfig。这个命令和Windows下的ipconfig差不多,都可以输出网卡的信息,其中就包含DNS、掩码等信息。所以,我们可以通过看它的源代码来找到解决该问题的方法。获取系统中的网卡数量 并没有那个系统调用提供网卡数量的获取。但是,我们可以通过强大的proc文件系统获取网卡数量的信息。实际上,ifconfig也是这样做的,请看示例代码如下:0001 #include <stdio.h>0002 #include <string.h>0003 #include <errno.h>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 <= 0)continue;0026 if (szName[nLen - 1] == ':') szName[nLen - 1]= 0;0027 if (strcmp(szName, "lo") == 0)continue;0028 nCount++;0029 0030 0031 fclose(f);0032 f= NULL;0033 return nCount;0034 0035 0036 int main(int argc, char* argv[])0037 0038 printf("NetCardCount: %d\n", GetNetCardCount());0039 return 0;0040 获取IP、掩码、MAC及网关获取IP、掩码、MAC和广播地址是比较容易的,只需要调用对应的IOCTL即可。只是大家对Linux下的IOCTL可能不太熟悉。却看示例代码: 0001 void DispNetInfo(constchar* szDevName)0002 0003 int s = socket(AF_INET, SOCK_DGRAM, 0);0004 if (s < 0)0005 0006 fprintf(stderr, "Create socket failed!errno=%d", errno);0007 return;0008 0009 0010 struct ifreq ifr;0011 unsignedchar mac[6];0012 unsignedlong nIP, nNetmask, nBroadIP;0013 0014 printf("%s:\n", szDevName);0015 0016 strcpy(ifr.ifr_name, szDevName);0017 if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0)0018 0019 return;0020 0021 memcpy(mac, ifr.ifr_hwaddr.sa_data, sizeof(mac));0022 printf("\tMAC: x-x-x-x-x-x\n",0023 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);0024 0025 strcpy(ifr.ifr_name, szDevName);0026 if (ioctl(s, SIOCGIFADDR, &ifr) < 0)0027 0028 nIP = 0;0029 0030 else0031 0032 nIP =*(unsignedlong*)&ifr.ifr_broadaddr.sa_data[2];0033 0034 printf("\tIP: %s\n", inet_ntoa(*(in_addr*)&nIP));0035 0036 strcpy(ifr.ifr_name, szDevName);0037 if (ioctl(s, SIOCGIFBRDADDR, &ifr) < 0)0038 0039 nBroadIP = 0;0040 0041 else0042 0043 nBroadIP =*(unsignedlong*)&ifr.ifr_broadaddr.sa_data[2];0044 0045 printf("\tBroadIP: %s\n", inet_ntoa(*(in_addr*)&nBroadIP));0046 0047 strcpy(ifr.ifr_name, szDevName);0048 if (ioctl(s, SIOCGIFNETMASK, &ifr) < 0)0049 0050 nNetmask = 0;0051 0052 else0053 0054 nNetmask =*(unsignedlong*)&ifr.ifr_netmask.sa_data[2];0055 0056 printf("\tNetmask: %s\n", inet_ntoa(*(in_addr*)&nNetmask));0057 close(s);0058 那么如何获取网关地址呢?更加容易,但是,好像很少有人知道。反正我在网上没有找到有人知道。最后看了nslookup的源代码以后才知道正确的做法。代码如下: res_init(); for (int i = 0; i < _res.nscount; i++) struct sockaddr* server = (struct sockaddr*)&_res.nsaddr_list[i]; printf("Server: %s\n", inet_ntoa(*(in_addr*)&(server->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 参考技术A

一、查看命令

1启动 linux 操作系统,进入到桌面。

2启动终端。

3在终端键入命令 ifconfig eth0,回车。如下图所示:

二、信息解读

第一行说明了网卡类型和MAC地址。

第二行说明了IPV4地址,广播地址和子网掩码。

第三行说明了IPV6地址。

第五行说明了接收的数据包总数,以及错误的包数、丢失的数据包数。

第六行与第五行相对应,分别是发送的数据包总数,以及错误的包数、丢失的数据包数。

第八行则分别是接收和发送的字节数。

linux下如何编程实现获取显卡的状态?

这个要获取网卡的状态的话,唯一的方法就是调用网卡驱动提供的服务也就是ioctl函数,ioctl函数可以接受网卡驱动提供的功能标识然后反馈网卡的状态,可以参见unix网络编程的第15或者16章。也可以参考ifconfig的源代码。参考技... 查看详情

linux下如何查看网卡驱动版本信息?

Linux下查看网卡驱动和版本信息查看网卡生产厂商和信号查看基本信息:lspci查看详细信息:lspci-vvv#3个小写的v查看网卡信息:lspci|grepEthernet查看网卡驱动查看网卡驱动信息:lspci-vvv#找到网卡设备的详细信息,包括网卡驱动#lsmod... 查看详情

linux环境下如何获取主板或硬盘或网卡序列号

参考技术A获取主板序列号(ubuntu环境)dmidecode-tsystem 参考技术Bsudo dd if=/dev/zero of=/dev/sd* 参考技术C命令ifconfig哈 查看详情

怎样查看linux的网卡信息

...开解压缩目录下的*.spec文件查看驱动的版本;参考技术A如何详细查看硬盘信息fdisk-l:查看分1如何查看内存信息,大概有以下几种方式2如何查看CPU信息cat/proc/cpuinfo:通3如何查看网卡,显卡等板卡信息本回答被提问者采纳 查看详情

如何在linux下查看网卡硬件信息

参考技术A[root@wds~]#ethtool-ieth0driver:pcnet32version:1.31firmware-version:bus-info:0000:00:11.0[root@wds~]#ethtool-keth0Offloadparametersforeth0:Cannotgetdevicerxcsumsettings:Operationnotsupportedrx-checksumming:offtx-checksumming:offscatter-gather:offtcpsegmentationoffload:off[root@wds~]#eth... 查看详情

获取linux系统所有网卡信息(代码片段)

功能介绍获取Linux系统网卡数量(包括环回)遍历每张网卡打印网卡的名称、MAC地址、IP地址、广播地址、子网掩码源码interface_info.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<errn 查看详情

linux下如何查看某个网卡当前使用的ip。

在linux系统下如何能得知某个网卡当前使用的IP是多少,比如我是通过执行ifconfigeth0配置的eth0网卡的ip,那么这个ip在/etc/sysconfig/network-script/ifcfg-eth0文件里看不到这个ip,那么是在哪个文件里记录了eth0所使用的这个IP,而我只需要... 查看详情

linux下centos配置网卡ip地址网关dns信息(代码片段)

文章目录查看网卡信息修改网卡信息详解enp5s0的内容重启网络服务修改DNS配置文件查看网卡信息ifconfigip地址为:192.168.18.200,网关为:255.255.255.0修改网卡信息切换到指定目录下cd/etc/sysconfig/network-scripts/ls寻找自己的网... 查看详情

linux下如何实行adsl拨号上网?

如题!有图最好!1首先,你必须安装相应的ADSL拨号软件。平常用的redhat发行版本中,带有pppoe这个rpm包。我们通过下面的命令实现:[root@Serverroot]#rpm-qa|greppppoerp-pppoe-3.4-7这个命令的输出来确定系统中是否已经安装了pppoe这个包。... 查看详情

如何在linux下安装网卡驱动?

参考技术A一、查看网卡型号和机器位数1、查看网卡型号linux系统下通过以下命令,可以查看当前的网卡驱动信息;[boxcolor="white"icon="none"][root@localhostzhangy]#lspci|grep-ieth03:00.0Ethernetcontroller:RealtekSemiconductorCo.,Ltd.RTL8111/... 查看详情

linux系统下怎么上网?

...我什么也干不了因为我不知道在哪里配置上网也不知道改如何配置帮帮我好吗?我需要详细的解答因为我是菜鸟我用的是RedhatEnterpriselinuxserve5.0企业版可以按照如下方式进行分析:不同的Linux发行版、不同的图形界面会提供各自的... 查看详情

如何在 Linux 上获取磁盘信息?

】如何在Linux上获取磁盘信息?【英文标题】:HowtogetdiskinformationonLinux?【发布时间】:2019-08-0606:18:20【问题描述】:目的是获取Linux平台下物理硬盘的信息。所需信息包括物理硬盘名称(标题)、设备路径(如/dev/sda)、读/写速... 查看详情

linux下显卡网卡声卡信息的查看,求高人帮忙!!!

假设我现在不知道我现在显卡,网卡,声卡的型号。有什么命令能查看这些硬件的基本信息吗?还有在装完驱动后,有命令能看出驱动是否安装成功了呢?各个linux版本间命令可能不同以下仅供参考1,主板信息.查看主板的序列号-... 查看详情

如何查看linux网口配置

如何查看linux网口配置通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使用一些选项属性,ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置。1.命令格式:if... 查看详情

怎么在linux系统下查看网卡状态信息?

参考技术A方法一:ethtooleth0采用此命令可以查看到网卡相关的技术指标。(不一定所有网卡都支持此命令)ethtool-ieth1加上-i参数查看网卡驱动。可以尝试其它参数查看网卡相关技术参数。方法二:也可以通过dmesg|grepeth0等看到网卡名字... 查看详情

怎样查看linux的网卡信息

Linux查看网卡信息,可以通过nmcli命令来进行获取:1、查看网卡信息2、查看网卡的连接状态3、查看网卡的详细信息参考技术A启动linux系统打开终端输入命令ifconfigeth0查看eth0网卡信息或输入ifconfig查看网络信息 参考技术Blspci命令:... 查看详情

怎么查看linux单个网卡的型号

参考技术A查看linux的网卡信息步骤如下:工具原料:linux操作系统①启动linux操作系统,进入到桌面;②启动终端;③终端输入命令ifconfigeth0,回车;④linux的网卡信息解读:1.查看网卡生产厂商和信号:查看基本信息:lspci查看... 查看详情

急!!!!!linux没有网卡和无线网卡信息

...看到网卡和无线网卡相关信息。网络那一栏是空的。请问如何去解决这个问题??谢谢急!如linux未发现无线网卡,可通过以下步骤进行排障解决:1、如是自动安装的驱动,可重新手动安装网卡驱动,打开电脑桌面的“计算机”... 查看详情