struct ifreq 的用法详解

详解struct ifreq ifr 以下是// 接口名称,如 "eth0" 或 "wlan0"union {// 用于存储地址// 用于存储硬件地址(MAC 地址)// 网络接口标志// 接口索引// 硬件映射,通常用于设置设备// 指定接口度量// 接口的最大传输单元// 接口配置,通常用于获取接口列表是一个多用途的数据结构,用于存储和操作网络接口的配置信息。它在使用ioctl系统调用时尤其重要,因为ioctl是与网络接口(如获取 IP 地址、MAC 地址、接口标志等)交互的一种常见方式。通过ifreq。 阅读详情
AI摘要

本文介绍了ifreq和ifconf结构体的定义及其在Linux环境下如何用于获取网络接口信息的方法。详细展示了通过ioctl系统调用获取IP地址、子网掩码、广播地址等网络参数的过程。

1、结构定义

struct ifreq
{
#define IFHWADDRLEN 6
 union
 {
  char ifrn_name[IFNAMSIZ];  
 } 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]; 
  char ifru_newname[IFNAMSIZ];
  void __user * ifru_data;
  struct if_settings ifru_settings;
 } ifr_ifru;
};
#define ifr_name ifr_ifrn.ifrn_name 
#define ifr_hwaddr ifr_ifru.ifru_hwaddr 
#define ifr_addr ifr_ifru.ifru_addr 
#define ifr_dstaddr ifr_ifru.ifru_dstaddr 
#define ifr_broadaddr ifr_ifru.ifru_broadaddr 
#define ifr_netmask ifr_ifru.ifru_netmask 
#define ifr_flags ifr_ifru.ifru_flags 
#define ifr_metric ifr_ifru.ifru_ivalue 
#define ifr_mtu  ifr_ifru.ifru_mtu 
#define ifr_map  ifr_ifru.ifru_map 
#define ifr_slave ifr_ifru.ifru_slave 
#define ifr_data ifr_ifru.ifru_data 
#define ifr_ifindex ifr_ifru.ifru_ivalue 
#define ifr_bandwidth ifr_ifru.ifru_ivalue    
#define ifr_qlen ifr_ifru.ifru_ivalue 
#define ifr_newname ifr_ifru.ifru_newname 
#define ifr_settings ifr_ifru.ifru_settings 

struct ifconf 
{
	int ifc_len; /* size of buffer    */
	union 
	{
		char *ifcu_buf; /* input from user->kernel*/
		struct ifreq *ifcu_req; /* return from kernel->user*/
	} ifc_ifcu;
};


2、用法说明

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

3、获取网络信息

static int get_net_info(const char *eth_name, uint32_t *ipaddr, uint32_t *netmask, uint32_t *gateway, uint32_t *bcast_addr)
{
	int skfd = -1;
	struct ifreq ifr;

	skfd = socket(PF_INET, SOCK_DGRAM, 0);
	if (skfd < 0)
	{
		return -1;
	}

	if(eth_name == NULL)
	{
		strcpy(ifr.ifr_name, "eth0");
	}
	else
	{
		strcpy(ifr.ifr_name, eth_name);
	}

	if (ioctl(skfd, SIOCGIFADDR, &ifr) == 0)
	{
		*ipaddr = ((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr.s_addr;
	}
	if (ioctl(skfd, SIOCGIFNETMASK, &ifr) == 0)
	{
		*netmask = ((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr.s_addr;
	}

	if (ioctl(skfd, SIOCGIFBRDADDR, &ifr) == 0)
	{
		*bcast_addr = ((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr.s_addr;
	}

	close(skfd);

	if (eth_name == NULL)
	{
		get_gateway(gateway);
	}
	else
	{
		if(strcmp(eth_name, ETH0) == 0)
		{
			*gateway = inet_addr(sysconfig_get_value("net", "gateway"));
		}
		else
		{
			*gateway = inet_addr(sysconfig_get_value("net", "gateway2"));
		}
	}

	return 0;
}



Codex 100个真实案例 - 用AI自动生成API测试用例(接口测试全覆盖) API 测试是保障后端质量的关键环节,但手写测试用例既枯燥又容易遗漏。本案例将展示如何用 Codex 从 Swagger/OpenAPI 规范文档自动生成 pytest 测试用例——包括正常流程测试、边界值测试、异常参数测试、性能压力测试,还能自动生成 Mock 数据和精美的 HTML 测试报告。全程自然语言驱动,让 API 测试覆盖率从 0 飙到 90%+! 阅读详情

相关推荐

STM32F103C8T6驱动DM542步进电机:从CubeMX配置到按键控制的全流程避坑指南

本文详细介绍了如何使用STM32F103C8T6通过CubeMX配置驱动DM542步进电机的全流程,包括PWM频率计算、GPIO模式选择及按键控制实现。重点解决了常见硬件连接错误、PWM参数配置及加减速算法优化,帮助开发者快速搭建稳定的电机控制系统。

weixin_42741930的博客 308

struct ifreq学习和实例

一、struct ifreq结构体 这个结构定义在/usr/include/net/if.h,用来配置和获取ip地址,掩码,MTU等接口信息的。 /* Interface request structure used for socket ioctl's. All interface ioctl's must have parameter definitions which

Jalen_king 2万+

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1305

Linux网络编程- struct ifreq & ioctl() 系统调用

是一个数据结构,用于各种与接口相关的输入/输出控制 (ioctl) 调用。它的主要用途是在网络编程中获取和设置网络接口的属性。这个结构体在头文件中定义。以下是: 一个字符数组,表示接口的名称,如 “eth0”, “wlan0” 等。: 一个类型的结构,表示接口的地址。: 同样是一个类型的结构,表示接口的网络掩码。: 表示接口的广播地址。: 表示接口的标志,如IFF_UP(接口正在运行)、(接口支持广播)、(接口在混杂模式下)等。: 表示接口的硬件(通常是 MAC)地址。

青衫客36的博客 6916

STM32 IIC电量计LTC2944

LTC2944是一款电池电量计,设计用于端电压为3.6V至60V的多节电池。它测量电池充电和放电、电池电压、电流和自身温度。精密模拟库仑计数器通过电池正极端子与负载或充电器之间的检测电阻器对电流进行积分。电池电压、电池电流和硅温度由内部ADC测量。

baidu_34971492的博客 3161

JVM高频面试基本问题与知识点整理

JVM高频面试基本问题与知识点整理

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 87万+

Linux网络编程- ioctl()结合struct ifreq使用案例

当我们使用ioctl()函数和请求码来获取网络接口的标志时,我们需要提供一个结构体作为参数。这个结构体包含了网络接口的名称和一个将被填充的字段,该字段将在调用返回时包含所请求的标志。

青衫客36的博客 485

【Python办公】剪贴板记录工具(记录文本 + 图片防重复)

本文介绍了一个用Python开发的剪贴板记录工具,能够自动记录复制过的文本和图片内容。该工具使用tkinter构建GUI界面,通过后台线程实时监控剪贴板变化,具有文本记录、图片保存(自动去重)功能。核心代码采用pyperclip访问剪贴板,PIL处理图片,hashlib计算图片哈希值实现去重。运行程序后,文本内容直接显示在界面,图片保存为PNG文件并记录路径。工具还提供清空历史记录功能,适合日常办公中需要追踪剪贴板历史的使用场景。

weixin_42636075的博客 240

linux 获取网卡接口信息

获取网卡的信息需要通过

antRain的博客 2713

【100分- 求最多可以派出多少支团队】(题目+思路+Java&C++&Python解析+在线测试)

用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。

m0_73659489的博客 313

FPGA开发中的操作系统

在FPGA开发中,操作系统起着关键的作用,它负责任务管理、资源管理、中断处理和设备驱动程序等功能。在实际的FPGA开发中,可以选择使用现有的操作系统,如MicroC/OS-II、FreeRTOS等,或者根据具体需求自行设计和开发操作系统。在FPGA(可编程逻辑门阵列)开发中,操作系统扮演着关键的角色,为硬件设计师提供了一种有效的方式来管理资源、调度任务并实现系统级功能。本文将介绍FPGA开发中的操作系统概念,并提供一个简单的示例代码来说明如何在FPGA平台上实现一个基本的操作系统。

CqpFsharp的博客 1157

使用struct ifreq实现ifconfig

ifconfig是我们查看/设定网口状态常用的命令,其实这个命令就是对一些系统函数的封装,通过对struct ifreq的修改,我们可以很轻易地设定网口状态,获取网口状态。 这个结构体位于头文件中,打开去看看吧,对照着英文注释,很容易找到自己想要的东西。而网卡相关的一些ioctl操作, 也就是用于查询/修改状态的标记位,都在中,很清晰的,找份源码看看吧。下面是一个小示例,演示了获取信息的过程,如

joker0910的专栏 1万+

高通平台蓝牙学习-- 基于WCN6750 Bluetooth 5.2的讲解

摘要:蓝牙5.2解决方案WCN6750具备多项先进特性:完全兼容5.2标准及ANT+协议,支持2Mbps高速BLE和长距离传输;采用射频集成方案,与WLAN共享天线并支持5G并发;内置功率放大器,支持Class1/2传输;提供双音频流和Slimbus接口优化。其HCI UART接口支持3.2Mbps速率,通过BlueZ协议栈实现蓝牙5.2功能,包括2Mbps模式和长距离传输,符合核心规范要求。(149字)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 3万+

struct ifconf和struct ifreq,获取网线插入状态

struct ifreq 这个结构定义在include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的 structifconf 通常是用来保存所有接口信息的 应用 想要获取当前网口网线插入状态,需要用到ifreq结构体,获取网卡的信息,然后socket结合网卡驱动的ioctl,就可以得到与网线插入状态相关的数据。 用ioctl获得本地ip...

1048

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

UDP struct ifreq和struct ifconf获取IP地址

UDP struct ifreq和struct ifconf获取IP地址 (一)获得本地ip地址时要用到两个结构体ifconf和ifreq(#include /* * Interface request structure used for socket * ioctl's.All interface ioctl's must have parameter ifco

懒洋洋工程师的笔记 1526

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

struct ifreq

用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人 来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助 理解的方法,在描述中可能会有一些地方与真实定义有所出入,仅供参考. 首先先认识一下ifconf和ifreq: //ifconf通常是用来保存所有接口信息的 //if.h struct ifconf { int i

vc0051127833的专栏 1711

UNP编程:37---struct ifreq、 struct ifconf结构体

一、struct ifconf结构体 功能:用来保存所有网络接口的名字和信息(不是全部信息,是ip地址) // if.h /* * Structure used in SIOCGIFCONF request. * Used to retrieve interface configuration * for machine (useful for programs which * mus...

董哥的黑板报 1772

struct ifreq

这个结构定义在/usr/include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的。 /* Interface request structure used for socket ioctl's. All interface    ioctl's must have parameter definitions which begin with ifr_name.

newbix的专栏 1471

struct ifreq 学习,现实ifconfig 功能

一、struct ifreq结构体 这个结构定义在/usr/include/net/if.h,用来配置和获取ip地址,掩码,MTU等接口信息的。 /* Interface request structure used for socket ioctl's. All interface    ioctl's must have parameter definitions which begin ...

adolph的博客 1250

ioctl和struct ifreq

用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助理解的方法,在描述中可能会有一些地方与真实定义有所出入,仅供参考. 首先先认识一下ifconf和ifreq:

飞火映天 1246

struct in_addr ,struct sockadd,ifreq,eth0,ioctl

struct in_addr ,struct sockadd,ifreq,eth0,ioctl

qq_35997741的博客 563

《Linux网络接口》---------struct ifreq struct ifconf

网络接口--------------struct ifconf,struct ifreq 网络相关的ioctl请求的request参数及arg地址必须指向的数据类型如下表所示: 接口 SIOCGIFCONF SIOCSIFADDR SIOCGIFADDR SIOCSIFBRDADDR SIOCGIFBRDADDR SIOCSIFNETMASK SIOCGIFNETMASK 获取所有接口...

〃々‰幻想VS自由※№★ 431

struct ifconf 和struct ifreq

用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人 来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助 理解的方法,在描述中可能会有一些地方与真实定义有所出入,仅供参考. 首先先认识一下ifconf和ifreq: //ifconf通常是用来保存所有接口信息的 //if.h struct ifconf { int ifc_len

领悟 释然 847

获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf

转载请注明出处:windeal专栏 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq 结构体struct ifconf来获取网络接口的各种信息。 ioctl 首先看ioctl()用法 ioctl()原型如下: #include <sys/ioctl.h> ...

aidixi4007的博客 668
上一篇: gcc 常见的编译错误,警告总结
下一篇: struct dirent 和 DIR结构体 详解
三角函数sin
博客等级 码龄16年 18粉丝 28原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值