精华内容
下载资源
问答
  • Linux获取网卡名称的方法如下几种,1和2两种没办法在网卡未分配IP地址时获取: 1.采用socket方式获取网卡列表 int EthManager::listInterface() { int fd; int interface_num = 0,i = 0; struct ifreq ...

    在Linux中获取网卡名称的方法如下几种,1和2两种没办法在网卡未分配IP 地址时获取:

    1.采用socket方式获取网卡列表

    int EthManager::listInterface()
    {
        int fd;
        int interface_num = 0,i = 0;
        struct ifreq ifbuffer[10];
        struct ifconf ifc;
        if((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_IP)) < 0){
            goto error_close;
        }
        ifc.ifc_len = sizeof (ifbuffer);
        ifc.ifc_buf = (caddr_t)ifbuffer;
        if(!ioctl(fd,SIOCGIFCONF,(char*)&ifc)){
            interface_num = ifc.ifc_len / sizeof(struct ifreq);
            nameList.clear();
            while(i < interface_num){
                //如果是本地回环地址,则不插入
                if(!(strstr(ifbuffer[i].ifr_name,"lo"))){
                    nameList.insert(i,QString(ifbuffer[i].ifr_name));
                }
                i++;
            }
        }

        ::close(fd);

        return 0;
    error_close:
        ::close(fd);
        return -1;

    }

    2.采用getifaddrs方式获取网卡列表

    int EthManager::listInterface()
    {

        int i = 0;
        struct sockaddr_in *sin = NULL;
        struct ifaddrs *ifa = NULL,*iflist;
        if(getifaddrs(&iflist) < 0){
            goto error_close;
        }

        for(ifa = iflist; ifa != NULL; ifa = ifa->ifa_next){
            if(ifa->ifa_addr->sa_family == AF_INET){
                nameList.insert(i,QString(ifa->ifa_name));
                i++;
            }

        }
        freeifaddrs(iflist);

        return 0;
    error_close:
        return -1;

    }

    3.使用Linux的文件系统的信息 /proc/net/dev

    int EthManager::listInterface()
    {

        char resultbuf[MAX_PATH_LEN];
        char namebuf[20];
        bzero(resultbuf, MAX_PATH_LEN);
        FILE *fp;
        //该方法在未设备网卡为up状态时无法获取到网卡名称
        //fp = popen("/sbin/ifconfig  | grep \"encap\" | grep -v lo | cut -d ' ' -f1","r");
        //该方法只要插入网卡就可以检测到网卡设备
        //cat /proc/net/dev | grep ":" | grep -v 'lo\|sit0' | cut -d ':' -f1 | sed -e 's/^[ \t]*//g'
        fp = popen("cat /proc/net/dev | grep \":\" | grep -v 'lo\\|sit0' | cut -d ':' -f1 | sed -e 's/^[ \t]*//g'","r");
        if(fp == NULL){
            goto error_close;
        }
        nameList.clear();
        //处理数据行
        while(fgets(resultbuf,sizeof (resultbuf),fp) != NULL){
            bzero(namebuf, sizeof(namebuf));
            sscanf(resultbuf, "%s\n", namebuf);
            nameList.push_back(namebuf);
        }
        ::pclose(fp);
        return 0;
    error_close:

        return -1;

    }

     

    展开全文
  • ifconfig [参数] 获取网卡信息 1.参数说明 参数 说明 -a 显示全部接口信息 -s 显示摘要信息 <interface> address 为网卡设置ipv4地址 <interface> add <address> 给指定网卡设置...

    ifconfig [参数] 获取网卡信息
    1.参数说明

    参数说明
    -a显示全部接口信息
    -s显示摘要信息
    <interface> address为网卡设置ipv4地址
    <interface> add <address>给指定网卡设置ipv6地址
    <interface> del <address>给指定网卡删除ipv6地址
    <interface> netmask <address>设置网卡的子网掩码
    <interface> dstaddr <address>设定一个远端地址,建立点对点通信
    <interface> tunnel <address>建立隧道
    <interface> hw <address>设置硬件地址
    <interface> mtu <NN>设置最大传输单元
    <interface> [-] arp设置指定网卡是否支持ARP协议。-表示不支持arp
    <interface> multicast为网卡设置组播表示
    <interface> [-]promisc设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包。-表示关闭混杂模式
    <interface> txqueuelen <NN>为网卡设置传输队列的长度
    <interface> up启动指定网卡
    <interface> down关闭指定网卡

    2.网卡字段说明

    ifconfig eth0
     
    // UP:表示“接口已启用”。
    // BROADCAST :表示“主机支持广播”。
    // RUNNING:表示“接口在工作中”。
    // MULTICAST:表示“主机支持多播”。
    // MTU:1500(最大传输单元):1500字节
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
      
    // inet :网卡的IP地址。
    // netmask :网络掩码。
    // broadcast :广播地址。
    inet 192.168.1.135 netmask 255.255.255.0 broadcast 192.168.1.255
     
    // 网卡的IPv6地址
    inet6 fe80::2aa:bbff:fecc:ddee prefixlen 64 scopeid 0x20<link>
     
    // 连接类型:Ethernet (以太网) HWaddr (硬件mac地址)
    // txqueuelen (网卡设置的传送队列长度)
    ether 00:aa:bb:cc:dd:ee txqueuelen 1000 (Ethernet)
    
    // RX packets 接收时,正确的数据包数。
    // RX bytes 接收的数据量。
    // RX errors 接收时,产生错误的数据包数。
    // RX dropped 接收时,丢弃的数据包数。
    // RX overruns 接收时,由于速度过快而丢失的数据包数。
    // RX frame 接收时,发生frame错误而丢失的数据包数。
    RX packets 2825 bytes 218511 (213.3 KiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    
    // TX packets 发送时,正确的数据包数。
    // TX bytes 发送的数据量。
    // TX errors 发送时,产生错误的数据包数。
    // TX dropped 发送时,丢弃的数据包数。
    // TX overruns 发送时,由于速度过快而丢失的数据包数。
    // TX carrier 发送时,发生carrier错误而丢失的数据包数。
    // collisions 冲突信息包的数目。
    TX packets 1077 bytes 145236 (141.8 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    

    3.示例

    • 显示网络设备信息
      • 显示激活的网卡信息:ifconfig
      • 显示所有的网卡信息:ifconfig -a
      • 显示简要的网卡信息:ifconfig -s
    • 启动关闭指定网卡
      • 关闭网卡:ifconfig eth0 down
      • 启动网卡:ifconfig eth0 up
    • 配置和删除ip地址
      • 配置ip地址:ifconfig eth0 192.168.1.100
      • 配置ip地址和子网掩码:ifconfig eth0 192.168.1.100 netmask 255.255.255.0
      • 配置ip地址、子网掩码和广播地址:ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
    • 修改mac地址 :ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
    • 启用和关闭arp协议
      • 启用arp:ifconfig eth0 arp
      • 关闭arp:ifconfig eth0 -arp
    • 设置最大传输单元:ifconfig eth0 mtu 1500
    • 设置网卡的promiscuous模式
      • 启用:ifconfig eth0 promisc
      • 禁用:ifconfig eth0 -promisc
    • 设置网卡的多播模式
      • 启用:ifconfig eth0 allmulti
      • 禁用:ifconfig eth0 -allmulti
    • 配置和删除iPv6地址
      • 添加:ifconfig eth0 add 3ffe:3240:800:1005::2/64
      • 删除:ifconfig eth0 del 3ffe:3240:800:1005::2/64
    展开全文
  • 支持多网卡,主要是使用ioctl函数系统调用实现,通过指定设备名实现指定功能.之前使用socket()函数,获取文件描述符.在此基础可以很轻松的扩展,如获取net mask,MAC address等  #include stdio.h  #include ...

    支持多网卡,主要是使用ioctl函数系统调用实现,通过指定设备名实现指定功能.之前使用socket()函数,获取文件描述符.在此基础可以很轻松的扩展,如获取net mask,MAC address等


      #include stdio.h 
      #include sys/types.h 
      #include sys/param.h
      
      #include sys/ioctl.h 
      #include sys/socket.h 
      #include net/if.h 
      #include netinet/in.h 
      #include net/if_arp.h 
      
      #define MAXINTERFACES 16 
      
      int main(void)
      {
       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); 
       printf("number of interface is: %d\n",intrface); 
       while (intrface-- > 0) 
       { 
       printf ("net device %s\n", buf[intrface].ifr_name); 
       
       if ((ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface])) < 0)
       {
       continue; 
       } 
       
       if (buf[intrface].ifr_flags & IFF_PROMISC)
       { 
       puts ("the interface is PROMISC"); 
       } 
       else 
       { 
       if (buf[intrface].ifr_flags & IFF_UP) 
       { 
       puts("the interface status is UP"); 
       } 
       else 
       { 
       if (buf[intrface].ifr_flags & IFF_RUNNING)
       puts("the interface status is RUNNING");
       } 
       }
       
       if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface]))) 
       { 
       puts ("IP address is:"); 
       puts(inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr));
       puts(""); 
       } 
       else
       { 
       char str[256]; 
       sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name); perror (str);
       } 
      
      }
      close (fd); 
      return 0; 
      
      }




    展开全文
  • 一、Linux 中ifreq 结构体原型: struct ifreq { #define IFHWADDRLEN 6 union { char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ } ifr_ifrn; union { struct sockaddr ifru_addr; struct ...

    一、Linux 中ifreq 结构体原型:

    struct ifreq 
    {
    #define IFHWADDRLEN 6
     union
     {
      char ifrn_name[IFNAMSIZ];  /* if name, e.g. "en0" */
     } ifr_ifrn;
     
     union {
      struct sockaddr ifru_addr;
      struct sockaddr ifru_dstaddr;
      struct sockaddr ifru_broadaddr;
      struct sockaddr ifru_netmask;
      struct  sockaddr ifru_hwaddr;
      short ifru_flags;
      int ifru_ivalue;
      int ifru_mtu;
      struct  ifmap ifru_map;
      char ifru_slave[IFNAMSIZ]; /* Just fits the size */
      char ifru_newname[IFNAMSIZ];
      void __user * ifru_data;
      struct if_settings ifru_settings;
     } ifr_ifru;
    };
    
    #define ifr_name ifr_ifrn.ifrn_name   			/* interface name  */
    #define ifr_hwaddr ifr_ifru.ifru_hwaddr 		/* MAC address   */
    #define ifr_addr ifr_ifru.ifru_addr 			/* address  */
    #define ifr_dstaddr ifr_ifru.ifru_dstaddr		/* other end of p-p lnk */
    #define ifr_broadaddr ifr_ifru.ifru_broadaddr 	/* broadcast address */
    #define ifr_netmask ifr_ifru.ifru_netmask 		/* interface net mask */
    #define ifr_flags ifr_ifru.ifru_flags 			/* flags  */
    #define ifr_metric ifr_ifru.ifru_ivalue 		/* metric  */
    #define ifr_mtu  ifr_ifru.ifru_mtu 				/* mtu   */
    #define ifr_map  ifr_ifru.ifru_map				/* device map  */
    #define ifr_slave ifr_ifru.ifru_slave			/* slave device  */
    #define ifr_data ifr_ifru.ifru_data				/* for use by interface */
    #define ifr_ifindex ifr_ifru.ifru_ivalue		/* interface index */
    #define ifr_bandwidth ifr_ifru.ifru_ivalue 		/* link bandwidth */
    #define ifr_qlen ifr_ifru.ifru_ivalue			/* Queue length  */
    #define ifr_newname ifr_ifru.ifru_newname		/* New name  */
    #define ifr_settings ifr_ifru.ifru_settings		/* Device/proto settings*/
    基本介绍:

    ifreq结构定义在/usr/include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的。其中包含了一个接口的名字和具体内容——(是个共用体,有可能是IP地址,广播地址,子网掩码,MAC号,MTU或其他内容)。ifreq包含在ifconf结构中。而ifconf结构通常是用来保存所有接口的信息的。

    举例说明:

    在Linux系统中,ifconfig命令是通过ioctl接口与内核通信,例如,当系统管理员输入如下命令来改变接口eth0的MTU大小:

            ifconfig eth0 mtu 1250

    ifconfig命令首先打开一个socket,然后通过系统管理员输入的参数初始化一个数据结构,并通过ioctl调用将数据传送到内核。SIOCSIFMTU是命令标识符。

    	struct ifreq data;
    	fd = socket(PF_INET, SOCK_DGRAM, 0);
    	<... initialize "data" ...>
    	err = ioctl(fd, SIOCSIFMTU, &data);

    二、获取本地ip,netmask和mac地址

    #include <stdio.h>
    #include <netdb.h>        //gethostbyaddr,gethostbyname
    //#include <unistd.h>       //比如read,write函数
    #include <netinet/in.h>   //地址簇相关,比如sockaddr_in
    #include <arpa/inet.h>    //inet_ntoa
    #include <net/if.h>
    #include <net/if_arp.h>
    #include <sys/types.h>   //比如文件描述符fd_set
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    
    struct in_addr myip,mymask;
    int fd_arp;     		//socket fd for receive packets
    struct ifreq ifr;		//ifr struct
    
    int main()
    {
    	char device[32];  //ethernet device name
    	struct sockaddr from,to;
    	struct sockaddr_in *sin_ptr;
    	u_char *ptr;
    	
    
    	if((fd_arp=socket(AF_INET,SOCK_DGRAM,0))<0)
    	{
    		perror("arp socket error");
    		exit(-1);
    	}
    	
    	strcpy(device,"eth0");
    	strcpy(ifr.ifr_name,device);
    	
    	/**** get ip address of my interface****/
    	if(ioctl(fd_arp,SIOCGIFADDR,&ifr)<0)
    	{
    		perror("ioctl SIOCGIFADDR error");
    		exit(-1);
    	}
    	sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
    	myip = sin_ptr->sin_addr;
    	printf("request IP  %s\n",inet_ntoa(myip));
    	/**** get network mask of my interface****/
    	if(ioctl(fd_arp,SIOCGIFNETMASK,&ifr)<0)
    	{
    		perror("ioctl SIOCGIFNETMASK error");
    		exit(-1);
    	}
    	sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
    	mymask = sin_ptr->sin_addr;
    	printf("request netmask  %s\n",inet_ntoa(mymask));
    	/**** get mac address of my interface****/
    	if(ioctl(fd_arp,SIOCGIFHWADDR,&ifr)<0)
    	{
    		perror("ioctl SIOCGIFHWADDR error");
    		exit(-1);
    	}
    	ptr = (u_char *)&ifr.ifr_ifru.ifru_hwaddr.sa_data[0];
    	printf("request mac %02x:%02x:%02x:%02x:%02x:%02x\n",
    		*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));	
    	/**** ---end--- ****/
    	return 0;
    }
    
    三、域名解析 DNS

     gethostbyname()gethostbyaddr():这两个函数可以获得DNS 信息。

    使用gethostbyname()函数,不能使用perror() 来输出错误信息,因为错误代码存储在h_error中而不是error中。所以,需要调用herror()函数。





    展开全文
  • linux 查看网卡以及开启网卡

    万次阅读 2018-08-07 21:12:15
    HWADDR=00:07:E9:05:E8:B4 #对应的网卡网卡地址,即mac地址(文件里可以没有) TYPE=Ethernet#表示网络类型是以太网 UUID:网卡的UUID(文件里可以没有) ONBOOT=yes【开机加载】 BOOTPROTO=static【是否自动获取,...
  • linux 查看公网IP和获取网卡名称

    千次阅读 2018-07-31 15:04:07
    获取网卡名称 lshw -c network | grep -E "logical name' 一、命令查询 方法1: apt install curl curl ifconfig.me 方法2: echo `nc ns1.dnspod.net 6666` 方法3: curl cip.cc 方法4: curl ...
  • 借用helloworld ko模板,通过网卡名称,如eth0,lo等,获取网卡设备,并打印索引号ifindex。 hello.c如下: /* hello.c */ #include &lt;linux/module.h&gt; #include &lt;linux/kernel.h&gt; #...
  • 那么,在Linux系统中,如何获取这三个数据呢?  既然是一个pci设备,那么首先就得知道BDF——该pci设备在OS中的唯一标识符。以网卡举例,我们可以通过ethtool来得到BDF。其中,bus-info对应的信息就是BDF。# ...
  • Linux C语言获取设备MAC地址

    千次阅读 2014-09-15 13:52:49
    #include #include #include #include #include #include void main() ... //teh0是网卡设备名 unsigned char macaddr[ETH_ALEN]; //ETH_ALEN(6)是MAC地址长度 //AF_INET = 1; int i,s; s = socket(AF
  • Linux 重置网卡

    万次阅读 2019-09-18 06:47:15
    重置网卡的统计信息有两种方法: 重启服务器。卸载网卡驱动并重新挂载。但是很多情况下,服务器是不能随便重启的,所以只能选择第二种方法。注: 网卡的数据统计与驱动有关。 查看网卡现有数据统计:$ ifconfig eth0...
  • Linux下利用ioctl函数获取网卡信息

    千次阅读 2013-10-31 11:37:39
    linux下的ioctl函数原型如下: #include int ioctl(int handle, int cmd, [int *argc, int argv]) 函数成功返回0,失败返回-1. 其相关命令接口如下: 类别 Request 说明 数据类型 套 接 口 ...
  • Linux下C获取所有可用网卡信息

    千次阅读 2018-01-06 11:30:49
    Linux下开发网络程序时,经常会遇到需要取本地网络接口、IP、广播地址、子网掩码或者MAC地址等信息的需求,最常见的办法是配合宏SIOCGIFHWADDR、SIOCGIFADDR、SIOCGIFBRDADDR与SIOCGIFNETMASK作为参数调用函数...
  • linux网卡绑定

    千次阅读 2017-05-05 16:16:06
    一、Linux 多网卡绑定 网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6 常用的有三种 mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。 mode=1:自动备...
  • linux rhel6 网卡配置汇总

    千次阅读 2019-03-25 11:47:30
    Linux系统查看网卡信息相关命令 ifconfig -a 查看网卡ip mii-tool eth0 查看网卡是否连接 网卡配置文件(修改网卡ip)...DEVICE="eth0" / *网卡设备名 BOOTPROTO=none / *网络模式:none/static 手动设置静态i...
  • 声明:文本是看完韦... 在介绍本文之前,我想先对前面的知识做一下总结,我们知道Linux系统的设备分为字符设备(char device),块设备(block device),以及网络设备(network device)。字符设备是指存取时没...
  • tmp=`ifconfig | grep HWaddr`mac=`echo $tmp | awk -F" " '{print $5}'`echo $mac
  • Qt - Pro       QT += network     ...     1、打印网卡Mac地址 (HardwareAddress) void MAC() { foreach (QNetworkInterface netInterface, QNetworkInterface::allInterfaces()) {
  • DEVICE=物理设备名 IPADDR=IP地址 NETMASK=掩码值 NETWORK=网络地址 BROADCAST=广播地址 GATEWAY=网关地址 TYPE=Ethernet (网络类型) ONBOOT=[yes|no](引导时是否激活设备) USERCTL=[yes|no](非root用户是否可以...
  • Linux获取设备pci ID的方法

    千次阅读 2015-02-27 17:08:16
    有的时候,开发时需要用到设备的pci ID,如用dpdk来绑定某个网卡,需要用网卡的pci ID。下面有一些方法是可以获取pci ID的。 1.使用lspci命令。 如 02:00.0 USB controller: Intel Corporation 82371AB/EB/MB...
  • linux网卡配置信息详解

    千次阅读 2019-05-05 16:19:02
    1.网卡配置文件在/etc/sysconfig/network-scripts/下: [root@oldboy network-scripts]# ls /etc/sysconfig/network-scripts/ ifcfg-eth0 ifdown-bnep ifdown-isdn ifdown-tunnel ifup-ib ifup-plusb ifup-t...
  • 网卡的信息储存在一个叫 ifreq 的结构体里面,获取本地IP实质上是从该结构体取想要的信息。该结构体如下: #define IFHWADDRLEN 6 #define IFNAMSIZ IF_NAMESIZE struct ifreq { union { char ifrn_...
  • Android下Linux内核网卡驱动移植

    千次阅读 2016-12-30 17:53:18
    1.下载最新的rtl8188cu的linux驱动:  下载页面:http://www.realtek.com/downloads  也可在这里下载:http://download.csdn.net/detail/hanbo622/9725813   2.解压缩下载的文件,把驱动文件rtl8192cu.zip(xxx是...
  • Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解...
  • 在移植完USB无线网卡的驱动和wpa_supplicant后,我们就可以开始来使用无线网卡连接WIFI接入点了。 前提工作–udhcpc配置 udhcpc是嵌入式的DHCP客户端,用来动态获取IP,一般busybox都会带此工具,但我们还需要做...
  • linux内核模块获取设备IP地址

    千次阅读 2017-01-06 09:16:09
    linux内核模块获取设备IP地址
  • linux网卡捆绑

    万次阅读 2013-02-17 16:39:07
    (1)编辑虚拟网络接口配置文件(bond0),并指定网卡IP  vi /etc/sysconfig/network-scripts/ifcfg-bond0  DEVICE=bond0  ONBOOT=yes  BOOTPROTO=static  IPADDR=192.168.0.254  BROADCAST=192.168.0.255  ...
  • Linux网卡绑定bond详解 1 什么是bond 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels 2.4.12及以后的版本均供bonding模块,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,551
精华内容 13,020
关键字:

linux获取网卡设备名

linux 订阅