C语言获取AIX单网卡的多IP地址

news2024/11/29 1:50:15

环境配置

AIX上,可以使用smitty tcpip命令给单个网卡配置多个IP别名。操作步骤如下:

  1. 选择Further Configuration
    在这里插入图片描述
  2. 选择Network Interfaces
    在这里插入图片描述
  3. 选择 Network Interfaces Selection
    在这里插入图片描述
  4. 选择 Configure Aliases
    在这里插入图片描述
    5.选择Add an IPV4 Network Alias
    在这里插入图片描述
  5. 选择需要配置的网卡,我们这里选择en1
    在这里插入图片描述
  6. IPV4 ADDRESS处输入新的IPNETMASK不需要配置
    在这里插入图片描述
  7. F10保存退出。

查看网卡信息,已经配置完成。

bash-5.0# ifconfig -a
en0: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
        inet 192.168.21.251 netmask 0xffffff00 broadcast 192.168.21.255
         tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
en1: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
        inet 192.168.2.251 netmask 0xffffff00 broadcast 192.168.2.255
        inet 192.168.2.216 netmask 0xffffff00 broadcast 192.168.2.255
lo0: flags=e08084b,c0<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,LARGESEND,CHAIN>
        inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255
        inet6 ::1%1/0
         tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1

C 代码实现

在IBM官方文档,有介绍使用ioctl函数获取单网卡多IP的方法,链接如下: https://www.ibm.com/docs/en/aix/7.2?topic=i-ioctl-socket-control-operations
调用方式为:

ioctl (fd, SIOCGIFADDRS, (caddr_t)ifaddrsp);

其中,会用到一个struct ifreqaddrs *ifaddrsp的结构体,该结构体如下:

struct  ifreqaddrs {
        char    ifr_name[IFNAMSIZ];     /* if name, e.g. "en0" */
        int     ifaddrs;                /* returned number of address on if */
        int     naddrs;                 /* number of addresses returned in req*/
        union {
                struct sockaddr_in      addr_in;
                struct sockaddr_in6     addr_in6;
        } ifrasu[1];
};

我们需要将网卡名提前传入到ifaddrsp->ifr_name中,最终多个IP会通过ifaddrsp->ifrasu的数组返回。
不过需要注意的是,ifaddrsp的内存需要手动申请,如果你需要获取n个IP,那么你至少需要申请sizeof (struct ifreqaddrs) + (n * sizeof (struct sockaddr_in)大小的内存。

#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main() {
    struct sockaddr *sa;
    int sockfd, i;
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	
	//第一遍调用,单纯获取IP个数
    struct ifreqaddrs *ifaddrsp = calloc(1, sizeof (struct ifreqaddrs));
    //此处传入网卡名为en1
    strcpy(ifaddrsp->ifr_name, "en1");
    if (ioctl(sockfd, SIOCGIFADDRS, ifaddrsp) == 0) {
        printf("ifaddrs: %d\n", ifaddrsp->ifaddrs);
    }
    
    //第二遍调用,根据IP个数申请内存空间
    struct ifreqaddrs *ifaddrsp2 = calloc(1, sizeof (struct ifreqaddrs) + (ifaddrsp->ifaddrs * sizeof (struct sockaddr_in)));
    strcpy(ifaddrsp2->ifr_name, "en1");
    //设置需要获取的ip个数及网卡名
   	ifaddrsp2->naddrs =  ifaddrsp->ifaddrs;
    ioctl(sockfd, SIOCGIFADDRS, ifaddrsp2);
    
    //打印IP地址
    for (i = 0; i < ifaddrsp2->naddrs; i++) {
		char ip[64] = {0};
		inet_ntop(AF_INET,&ifaddrsp2->ifrasu[i].addr_in.sin_addr, ip, sizeof(ip));
		printf("ip%d: %s \n", i+1, ip);
    } 
    close(sockfd);
	free(ifaddrsp);
	free(ifaddrsp2);
    return 0;
}

以上代码运行结果:

bash-5.0# ./a.out 
ifaddrs: 2
ip1: 192.168.2.251 
ip2: 192.168.2.216 

推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习: C/C++Linux服务器开发/高级架构师

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/590147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3:组合式写法入门

Vue3&#xff1a;组合式写法入门 Date: May 11, 2023 认识Vue3 1. Vue3组合式API体验 通过 Counter 案例 体验Vue3新引入的组合式API <script> export default {data(){return {count:0}},methods:{addCount(){this.count}} } </script><script setup> imp…

超声波都应用在哪些领域中?功率放大器如何放大超声波?

超声波是声波的一部分&#xff0c;它的频率高于20kHz&#xff0c;是无法被人耳听到的声波&#xff0c;超声波与声波有共通之处&#xff0c;即它们都是由物体振动所产生&#xff0c;只能在介质中进行传播。无论是在自然界&#xff0c;还是人们的日常生活之中&#xff0c;超声波都…

Power BI DAX函数

1、聚合函数——由表达式定义的列或表中所有行的&#xff08;标量&#xff09;值&#xff0c;例如计数、求和、平均值、最小值或最大值。 函数说明APPROXIMATEDISTINCTCOUNT在列中返回唯一值的估计计数AVERAGE返回列中所有数字的平均值&#xff08;算术平均值&#xff09;AVER…

基于 Python 和深度学习技术实现的人体姿态识别

人体姿态识别是计算机视觉领域的一个重要应用&#xff0c;它通过识别人体的关键点和关节位置&#xff0c;能够准确地判断人体的姿态和动作。这项技术可以应用在很多领域&#xff0c;比如运动训练、医疗康复、安保监控等&#xff0c;为人们的生活和工作带来了很大的便利和效益。…

Fiddler抓包工具之fiddler设置弱网测试

弱网测试 概念&#xff1a;弱网看字面意思就是网络比较弱&#xff0c;我们通称为信号差&#xff0c;网速慢。 意义&#xff1a;模拟在地铁、隧道、电梯和车库等场景下使用APP &#xff0c;网络会出现延时、中断和超时等情况。 Fiddler弱网测试流程&#xff1a; 一、限速操作…

redis学习记录

前言 1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; Redis&#xff0c;英文全称是 Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xf…

代码里乐观锁与悲观锁

乐观锁与悲观锁区别 synchronized与cas举例 cas算法自旋 乐观锁原理&#xff1a;cas算法自旋 1.cas算法 2.自旋 乐观锁工具类 Atomiclnteger原子类incrementAndGet方法源码解析

React Fiber架构

说到Fiber&#xff0c;不得不说说他的发展史&#xff1a; React15 架构 React16之前的版本比对更新虚拟DOM的过程是采用循环递归方式来实现的&#xff0c;这种比对方式有一个问题&#xff0c;就是一旦任务开始进行就无法中断&#xff0c;如果应用中数组数量庞大&#xff0c;主…

红黑树及插入过程详解

推荐可视化插入、删除节点的二叉树网站&#xff1a;Red/Black Tree Visualization (usfca.edu) 1. 概述 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉搜索树&#xff08;Binary Search Tree&#xff09;。它在普通二叉搜索树的基础上通过引入额外的颜色属…

DragGAN图像生成原理与实现

DragGAN图像生成原理与实现 DragGAN模型是什么呢1. DragGAN背景介绍2. 模型方法2.1 算法原理2.1.1 Motion Supervision2.1.2 点跟踪 3. 实现部署步骤3.1 安装PyTorch3.2 安装 DragGAN3.3 运行 DragGAN Demo3.4 功能介绍 项目地址&#xff1a;https://github.com/Zeqiang-Lai/Dr…

衡量有效的质量保证过程的10个基本指标

作者 | Tania Zhydkova 在开发的世界中&#xff0c;有一个永恒的规则&#xff0c;那就是你无法改进无法衡量的东西。当然&#xff0c;这条规则也适用于质量保证。 所生产软件的阵列呈指数级增长&#xff0c;这意味着保证质量所需的测试覆盖率也在以同样的程度增长。这也导致了…

浅谈Web渗透测试

目录 背景介绍 漏洞挖掘 渗透测试 个人看法 Web 渗透测试方法构想 PTES 简介 Web “PTES” 前期交互 信息收集 漏洞建模 漏洞分析 渗透利用 测试报告 Web渗透测试实例 前期交互 信息收集 漏洞建模 漏洞分析 渗透利用 报告 本文包括 背景介绍&#xff0c;We…

上传作品并投票的小程序微信中的微信投票微信小程序

现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。 通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情&#xff0c;又可以让商家和企业实现推广的目的&am…

IDEA 创建 Springmvc 项目

一、概述 在18年的时候就开始接触 SpringBoot &#xff0c;然后就一直在使用它。众所周知 SpringBoot 内嵌 Tomcat&#xff0c;后续再也没有单独新建过Web 项目。作为IDEA 的用户&#xff0c;总想要用它来建一个Web 项目自己跑一跑&#xff0c;但建项目不是我最终目的~~ &…

为什么那么多人劝退软件测试?月薪1万以上的就别点进来了

2023年已经过了快一半了&#xff0c;今天跟大家聊一聊软件测试薪资这个话题 和大家说一句掏心窝的话&#xff1a;直到现在&#xff0c;软件测试依旧是寒门改变命运的一个最佳选择之一&#xff0c;要不是怕被喷&#xff0c;我都想把之一去掉&#xff0c;因为想了半天&#xff0…

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

uni-app生命周期有哪些?怎么理解?

uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f; uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f; 文章目录 uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f;前言一、什么是生命周期函数&#xff1f;二、uni-app生命周期分类总结 前言 UNI-APP学习系…

Spring概述、Spring的优势和体系结构

Spring是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和 AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层 Sprin…