linux获得网卡信息

 1 #define MAX_INTERFACE         64
 2
 3 int showifs()
 4 {
 5     int i;
 6     int rc;
 7     int sock;
 8     int ifnum;
 9     struct ifreq ifr[MAX_INTERFACE];
10 //    struct arpreq arp;
11     struct ifconf ifc;
12
13     sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
14     if ( sock == -1 )
15     {
16         return -1;
17     }
18
19     ifc.ifc_len = sizeof( ifr );
20     ifc.ifc_buf = ( caddr_t ) ifr;
21     rc = ioctl ( sock, SIOCGIFCONF, &ifc );
22     if ( rc == -1 )
23     {
24         close( sock );
25         return -1;
26     }
27
28     ifnum = ifc.ifc_len / sizeof ( struct ifreq );
29     fprintf( stdout, "ifnum=[%d]\n======================================\n", ifnum );
30     for ( i = 0; i < ifnum; i ++ )
31     {
32         fprintf( stdout, "ifname [%s]\n", ifr[i].ifr_name );
33
34         //status
35         rc = ioctl( sock, SIOCGIFFLAGS, ifr + i );
36         if ( rc != -1 )
37         {
38             if ( ifr[i].ifr_flags & IFF_PROMISC )
39             {
40                 fprintf( stdout, "PROMISC=TRUE\n" );
41             }
42             else
43             {
44                 fprintf( stdout, "PROMISC=FALSE\n" );
45             }
46
47
48             if ( ifr[i].ifr_flags & IFF_UP )
49             {
50                 fprintf( stdout, "UP=TRUE\n" );
51             }
52             else
53             {
54                 fprintf( stdout, "UP=FALSE\n" );
55             }
56         }
57
58         //ip
59         rc = ioctl ( sock, SIOCGIFADDR, ifr + i );
60         if ( rc != -1 )
61         {
62             fprintf( stdout, "IP=%s\n", inet_ntoa( ( ( struct sockaddr_in* )( &ifr[i].ifr_addr ) )->sin_addr ) );
63         }
64
65         //netmask
66         rc = ioctl ( sock, SIOCGIFNETMASK, ifr + i );
67         if ( rc != -1 )
68         {
69             fprintf( stdout, "NETMASK=%s\n", inet_ntoa( ( ( struct sockaddr_in* )( &ifr[i].ifr_netmask  ) )->sin_addr ) );
70         }
71
72         //broadcast
73         rc = ioctl ( sock, SIOCGIFBRDADDR, ifr + i );
74         if ( rc != -1 )
75         {
76             fprintf( stdout, "BROADCAST=%s\n", inet_ntoa( ( ( struct sockaddr_in* )( &ifr[i].ifr_broadaddr ) )->sin_addr ) );
77         }
78
79         //mac
80         rc = ioctl ( sock, SIOCGIFHWADDR, ifr + i );
81         if ( rc != -1 )
82         {
83             fprintf( stdout, "%02x:%02x:%02x:%02x:%02x:%02x\n",
84                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[0],
85                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[1],
86                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[2],
87                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[3],
88                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[4],
89                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[5] );
90         }
91     }
92
93     close( sock );
94     return 0;
95 }
时间: 2024-12-19 13:11:53

linux获得网卡信息的相关文章

Linux 获取网卡信息

#include <sys/ioctl.h> #include <net/if.h> #include <unistd.h> #include <netinet/in.h> #include <string.h> int main() { struct ifreq ifr; struct ifconf ifc; char buf[2048]; int success = 0; int sock = socket(AF_INET, SOCK_DGR

Linux基础入门教程

Linux基础入门教程 --------- Linux系统发布于1991年Linux系统的优点:免费,开源,稳定,多任务,多用户,具有良好的可移植性Linux对硬件的要求:i7以上,8G内存以上,反正RAM是越大越好禁用Linux的防火墙--------------查看Linux的网卡信息ifconfig重启网卡service network restart查看防火墙的状态service iptables status很多知识的博大精深,学起来还是需要费一些劲的ls命令 list 显示文件或目录

11个linux查看服务器配置命令

Linux查看操作系统发行版本 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 查看操作系统信息: uname -a ?Linux iz2ze9n3z2fl9zj9hrv58vz 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 看看CPU个数 grep 'physical id' /pr

解决Linux中的ip重启后变化的问题

使用ifconfig命令查看Linux的网卡信息, 可以看到是ens33网卡 在Linux中输入命令, 编辑 ens33 网卡的网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 在配置中作如下修改 将BOOTPORTO=dhcp改为BOOTPORTO=static 原本是自动获取ip,现在改成固定ip ONBOOT=yes这个是no的话就改为yes,表示修改配置后自动启用网卡 并且添加以下配置 如果你是192.168.x.x网段的,就添加

linux 网卡信息

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 静态IP设置DEVICE="eth0"                                     <==网络卡代号,必须要 ifcfg-eth0 相对应HWADDR="08:00:27:71:85:BD"             <==就是网络卡地址NM_CONTROLLED="no"

Linux 获得机器的IP和网卡信息

Linux 获得机器的IP和网卡信息 代码来自于网络, 我改写了, 有美不敢自专, 特分享之.使用方法非常easy,就3个函数. 头文件getmac.h: /** * getmac.h * * 2014-07-08: init created */ #ifndef GETMAC_H_INCLUDED #define GETMAC_H_INCLUDED #if defined(__cplusplus) extern "C" { #endif #include <stdio.h>

linux网卡信息和驱动研究

1.网卡自动识别网卡的模式有关吗? Auto-negotiation: on 2   查看当前网卡信息 [[email protected] ~]# lspci | grep -i eth(-i不敏感大小写) 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06) dmesg | tail -f [

linux下查看网卡信息的命令

rhel 内核版本号信息: [[email protected] ~]# uname -a Linux hvrhub 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64 GNU/Linux 查看网卡的驱动.制造商等信息: [[email protected] ~]# kudzu --probe --class=network - class: NETWORK bus: PCI detached: 0 de

Linux下利用ioctl函数获取网卡信息

linux下的ioctl函数原型如下: #include <sys/ioctl.h> int ioctl(int handle, int cmd, [int *argc, int argv]) 函数成功返回0,失败返回-1. 其相关命令接口如下: 类别 Request 说明 数据类型 套 接 口 SIOCATMARK SIOCSPGRP SIOCGPGRP 是否位于带外标记 设置套接口的进程ID 或进程组ID 获取套接口的进程ID 或进程组ID int int int 文 件 FIONBIO