当前位置: 首页 > news >正文

OS X(MACOS) C/C++ 遍历系统所有的IP路由表配置。

 以下源实现为遍历MAC苹果电脑系统上配置的所有IP路由表配置,回调 predicate 过滤函数只在 AF_INET(IPV4)的时候跳出,其它时不处理,人们可以根据自己的需求改动。

无需依赖MAC OS框架库提供的函数,最小依赖才有可能更容易移植代码到 Apple Inc. 其它操作系统平台上面,另外是 MAC OS 平台依赖不容易受高版本限制。

        static int FetchAllRouteNtreeStuff(const ppp::function<bool(int interface_index, uint32_t ip, uint32_t gw, uint32_t mask)>& predicate) noexcept /* sysctlbyname("net.route.0.0.dump", buf, &len, NULL, 0) */{if (NULL == predicate){return -1;}int mib[] = { CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_FLAGS, RTF_GATEWAY };size_t needed = 0;if (sysctl(mib, arraysizeof(mib), NULL, &needed, NULL, 0) < 0){return -1;}std::shared_ptr<Byte> buffer_managed = ppp::make_shared_alloc<Byte>(needed);if (NULL == buffer_managed){return -1;}char* buffer = (char*)buffer_managed.get();if (sysctl(mib, arraysizeof(mib), buffer, &needed, NULL, 0) < 0){return -1;}struct rt_msghdr* rtm = NULL;char* buffer_needed = buffer + needed;for (char* i = buffer; i < buffer_needed; i += rtm->rtm_msglen){rtm = (struct rt_msghdr*)(i); /* RTAX_NETMASK */if (rtm->rtm_type != RTM_GET){continue;}/* inet_ntop(AF_INET, &sa->sin_addr.s_addr, line, sizeof(line) - 1); */if (!(rtm->rtm_flags & RTF_UP)){continue;}/* MAXHOSTNAMELEN; */if (!(rtm->rtm_flags & RTF_GATEWAY)){continue;}struct sockaddr* sa_tab[RTAX_MAX];if (struct sockaddr* sa = (struct sockaddr*)(rtm + 1); NULL != sa){for (int j = 0; j < RTAX_MAX; j++){if (rtm->rtm_addrs & (1 << j)){sa_tab[j] = sa;sa = (struct sockaddr*)((char*)sa + ROUNDUP(sa->sa_len));}else{sa_tab[j] = NULL;}}}uint32_t ip = IPEndPoint::AnyAddress;uint32_t gw = IPEndPoint::AnyAddress;uint32_t mask = IPEndPoint::AnyAddress;if (rtm->rtm_addrs & (1 << RTAX_DST)){struct sockaddr_in* sa = (struct sockaddr_in*)(sa_tab[RTAX_DST]);if (sa->sin_family != AF_INET){continue;}ip = sa->sin_addr.s_addr;}if (rtm->rtm_addrs & (1 << RTAX_GATEWAY)){struct sockaddr_in* sa = (struct sockaddr_in*)(sa_tab[RTAX_GATEWAY]);if (sa->sin_family != AF_INET){continue;}gw = sa->sin_addr.s_addr;}if (rtm->rtm_addrs & (1 << RTAX_NETMASK)){struct sockaddr_in* sa = (struct sockaddr_in*)(sa_tab[RTAX_NETMASK]);mask = sa->sin_addr.s_addr;}if (predicate(rtm->rtm_index, ip, gw, mask)){break;}}return 0;}

相关文章:

OS X(MACOS) C/C++ 遍历系统所有的IP路由表配置。

以下源实现为遍历MAC苹果电脑系统上配置的所有IP路由表配置&#xff0c;回调 predicate 过滤函数只在 AF_INET(IPV4)的时候跳出&#xff0c;其它时不处理&#xff0c;人们可以根据自己的需求改动。 无需依赖MAC OS框架库提供的函数&#xff0c;最小依赖才有可能更容易移植代码到…...

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_003---人工智能工作笔记0098

前面的环境安装差不多了,这里我没有安装git,因为我认为用不到,好下面去下载算法: 首先是算法下载: https://codeload.github.com/THUDM/ChatGLM-6B/zip/refs/heads/main 算法的下载连接是这里: 可以看到下载以后得到这个ChatGLM-6B-main这个算法压缩包 然后我们再去: 然后…...

基于JAVA的实验室耗材管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…...

NXP实战笔记(七):S32K3xx基于RTD-SDK在S32DS上配置ICU输入捕获

目录 1、概述 2、输入捕获SDK配置 2.1、SAIC中断方式 2.2、IPWM或者IPM 1、概述 输入捕获&#xff0c;可以抓取高电平时间、低电平时间、占空比、周期、边沿检测与回调函数、边沿计数&#xff08;ABZ解码&#xff09;、时间戳、唤醒中断。 记录一下根据Emios模块实现上述部分…...

左右联动布局效果

效果图&#xff1a; <template><el-dialog :modelValue"modelValue" :before-close"close" fullscreen :close-on-click-modal"false"><div class"farmer_detail"><div class"info_content"><di…...

【工具类】vscode ssh 远程免密登录开发

存放代码的机器运行 sshd,使用 vscode 的机器保证可以通过 ssh 登录服务器vscode 机器通过 ssh-keygen 生成 ssh 公私钥对将客户端的 id_rsa.pub 加入到服务器的鉴权队列 cat id_rsa.pub >> authorized_keysvscode 配置即可.ctrlp, remote-ssh: open ssh configuration f…...

【Antd】Form 表单获取不到 Input 的值

文章目录 今天遇到了一个奇怪的bug&#xff0c;Form表单中的Input组件的值&#xff0c;不能被Form获取&#xff0c;导致输入了内容&#xff0c;但是表单提交的时候值为undefined 报错代码 import { Button, Form, Input } from antd; import React from react;const App: Rea…...

Encoder-decoder 与Decoder-only 模型之间的使用区别

承接上文&#xff1a;Transformer Encoder-Decoer 结构回顾 笔者以huggingface T5 transformer 对encoder-decoder 模型进行了简单的回顾。 由于笔者最近使用decoder-only模型时发现&#xff0c;其使用细节和encoder-decoder有着非常大的区别&#xff1b;而huggingface的接口为…...

【STM32备忘录】【STM32WB系列的BLE低功耗蓝牙】一、测试广播配置搜不到信号的注意事项

一、预备知识&#xff1a; WB系列是双核单片机&#xff0c;用户写M4&#xff0c;无线协议栈使用M0新买到手的单片机&#xff0c;需要自己刷入使用的无线协议栈刷入无线协议栈的途径是通过一个叫FUS的东东&#xff0c;类似于bootloader&#xff0c;这个FUS新买的芯片通常已经刷…...

ChatGPT 是什么

文章目录 一、ChatGPT 是什么二、ChatGPT的发明者三、ChatGPT的运作方式四、ChatGPT的技术五、ChatGPT的优势六、ChatGPT的局限性七、ChatGPT的应用八、ChatGPT的未来九、总结 一、ChatGPT 是什么 OpenAI的ChatGPT&#xff0c;即Chat Generative Pre-Trained Transformer&…...

4款好用的ai智能写作软件,为写作排忧解难!

在当今信息爆炸的时代&#xff0c;写作已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;对于许多人来说&#xff0c;写作可能是一项具有挑战性的任务&#xff0c;需要花费大量的时间和精力。幸运的是&#xff0c;随着人工智能技术的不断发展&#xff0c;ai智能写作…...

js设计模式:计算属性模式

作用: 将对象中的某些值与其他值进行关联,根据其他值来计算该值的结果 vue中的计算属性就是很经典的例子 示例: let nowDate 2023const wjtInfo {brithDate:1995,get age(){return nowDate-this.brithDate}}console.log(wjtInfo.age,wjt年龄)nowDate 1console.log(wjtInf…...

2015-2024年考研数学(一)真题练习和解析——选择题

各个大学已经陆陆续续开学了&#xff0c;备考2025年考研的同学也要紧锣密鼓地开始备考&#xff0c;尤其是三门公共课——政治、英语、数学&#xff0c;备考的时间和周期都比较长&#xff0c;每一门都是难啃的硬骨头。 在这三门公共课中&#xff0c;数学的灵活性是最大的&#x…...

Git合并固定分支的某一部分至当前分支

在 Git 中&#xff0c;通常使用 git merge 命令来将一个分支的更改合并到另一个分支。如果你只想合并某个分支的一部分代码&#xff0c;可以使用以下两种方法&#xff1a; 1.批量文件合并 1.1.创建并切换到一个新的临时分支 首先&#xff0c;从要合并的源分支&#xff08;即要…...

Codeforces Round 928 (Div. 4) (A-E)

比赛地址 : https://codeforces.com/contest/1926 A 遍历每一个字符串&#xff0c;比较1和0的数量即可&#xff0c;那个大输出那个; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \n #define lowbit(x) (x&am…...

git远程操控gitee

配置SSH公钥 首先&#xff0c;在本地计算机上生成SSH公钥。打开终端或命令提示符窗口&#xff0c;并执行以下命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com"按照提示操作&#xff0c;生成SSH密钥对。默认情况下&#xff0c;公钥将保存在~…...

常见面试题:TCP的四次挥手和TCP的滑动窗口

说一说 TCP 的四次挥手。 挥手即终止 TCP 连接&#xff0c;所谓的四次挥手就是指断开一个 TCP 连接时。需要客户端和服务端总共发出四个包&#xff0c;已确认连接的断开在 socket 编程中&#xff0c;这一过程由客户端或服务端任意一方执行 close 来触发。这里我们假设由客户端…...

力扣随笔之两数之和 Ⅱ -输入有序数组(中等167)

思路&#xff1a;在递增数组中找出满足相加之和等于目标数 定义左右两个指针&#xff08;下标&#xff09;从数组两边开始遍历&#xff0c;若左右指针所指数字之和大于目标数&#xff0c;则将右指针自减&#xff0c;若左右指针所指数字之和小于目标数&#xff0c;则左指针自加&…...

最优传输(Optimal Transport)

最优传输&#xff08;Optimal Transport&#xff09;是一种数学理论和计算方法&#xff0c;用于描述两个概率分布之间的距离或者对应关系。它的核心概念是如何以最佳方式将一组资源&#xff08;如质量、能量等&#xff09;从一个位置传输到另一个位置。 基本概念&#xff1a; …...

MIT-6.824-Lab2,Raft部分笔记|Use Go

文章目录 前记Paper6&#xff1a;RaftLEC5、6&#xff1a;RaftLAB22AtaskHintlockingstructureguide设计与编码 2BtaskHint设计与编码 2CtaskHint question后记 LEC5&#xff1a;GO, Threads, and Raftgo threads技巧raft实验易错点debug技巧 前记 趁着研一考完期末有点点空余…...

用STM32F103C8T6做个触摸感应示波器?手把手教你ADC采集+OLED波形显示(附完整代码)

用STM32F103C8T6打造触摸感应示波器&#xff1a;从ADC采集到OLED波形显示的趣味实践 在嵌入式开发领域&#xff0c;将枯燥的技术参数转化为可视化的交互体验&#xff0c;往往能激发学习者的深层兴趣。今天我们要实现的&#xff0c;不仅是一个简单的信号采集系统&#xff0c;而是…...

Claude Code 模型切换脚本 switch.sh 编写

背景 Claude code 使用不同模型&#xff0c;需要切换&#xff0c;之前手动切换重命名 setting.json 和环境变量修改&#xff0c;想着切换麻烦&#xff0c;编写个脚本吧&#xff0c;用 claude code 编写。基本流程是&#xff1a; 将 settings-model.json 复制为 settings-json。…...

2026年企业做GEO推广找哪家?推荐几家源头厂家

2026年&#xff0c;GEO赛道正在经历一场剧烈的洗牌。根据界面新闻、极客公园、IT之家及多家第三方机构近期密集发布的行业评测&#xff0c;头部服务商格局已初步成型&#xff0c;但大量贴牌套壳的“伪源头”仍在搅浑市场。企业在选型时最焦虑的问题已经从“要不要做GEO”变成了…...

A-29P深度解析:100dB回音消除与AI降噪的硬件设计实战

摘要&#xff1a;在可视门禁、车载蓝牙、远程会议等设备中&#xff0c;结构空间狭小与高音量需求往往导致严重的回声和啸叫问题。本文基于A-29P纯模拟回音消除模块&#xff0c;深入解析其100dB消回音能力、AI降噪特性及7种硬件应用模式&#xff0c;为工程师提供一套无需代码的快…...

教你一招轻松定生物医学论文插图

写生物医学论文时&#xff0c;信号通路图、细胞调控机制图、病理机制图是展示研究逻辑的核心视觉语言&#xff0c;几乎是投稿刚需。但不少科研人都踩过绘图的坑&#xff1a;找不到专业的受体、离子通道、磷酸化符号等矢量图标&#xff0c;只能用基础形状拼凑&#xff0c;结果图…...

【Java实战】Java 实现 Base64 文件批量压缩为 ZIP

一、前言在实际项目开发中&#xff0c;经常遇到这样的场景&#xff1a;前端上传多个文件后以 Base64 格式存储&#xff0c;或者从数据库读取多个 Base64 编码的文件&#xff0c;需要将这些文件打包成 ZIP 压缩包供用户下载。本文分享一个实用的 Java ZIP 压缩工具类二、应用场景…...

AI 编程能力实战基准测试报告:编程能力评估体系 (Programming Capability Benchmark)

&#x1f916; AI 编程能力实战基准测试报告&#xff1a;编程能力评估体系 (Programming Capability Benchmark) 文件目标: 一份用于评估当前顶级生成式模型&#xff08;如GPT-5.5, Claude 4.7, Deepseek V4等&#xff09;实际软件开发能力和系统级思维的权威指南。 核心原则: …...

终极Gerber文件查看器Gerbv:免费开源PCB设计验证的5大优势

终极Gerber文件查看器Gerbv&#xff1a;免费开源PCB设计验证的5大优势 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 还在为PCB设计文件的查看和验证而烦恼吗&#xff1f;Gerbv这款强…...

WarcraftHelper:让经典魔兽在现代系统上重获新生

WarcraftHelper&#xff1a;让经典魔兽在现代系统上重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还记得那个在老旧电脑上流畅运行的…...

【Qt串口实战】硬件升级后readyRead信号丢失的排查与修复

1. 问题现象&#xff1a;硬件升级后readyRead信号神秘消失 那天早上刚到公司&#xff0c;硬件组的同事兴冲冲地跑过来告诉我&#xff1a;"老王&#xff0c;我们给设备升级了最新固件&#xff0c;性能提升30%&#xff01;"我心想这是好事啊&#xff0c;结果打开调试软…...