仅使用 proc 获取本地网络接口地址?

2024-01-01

如何仅使用以下命令获取所有网络接口的 (IPv4) 地址proc http://linux.die.net/man/5/proc?经过一番广泛的调查后,我发现了以下内容:

  1. ifconfig利用SIOCGIFADDR,这需要打开套接字并预先了解所有接口名称。它也没有记录在 Linux 的任何手册页中。
  2. proc包含/proc/net/dev,但这是接口统计信息的列表。
  3. proc包含/proc/net/if_inet6,这正是我所需要的,但对于 IPv6。
  4. 一般来说,接口很容易找到proc,但实际地址很少使用,除非明确属于某些连接的一部分。
  5. 有一个系统调用叫getifaddrs http://www.manpagez.com/man/3/getifaddrs/,这是您期望在 Windows 中看到的一个非常“神奇”的功能。它也在 BSD 上实现。然而它不是非常面向文本,这使得它很难在非 C 语言中使用。

/proc/net/fib_trie掌握网络拓扑

要简单地打印所有适配器的地址:

$ awk '/32 host/ { print f } {f=$2}' <<< "$(</proc/net/fib_trie)"
127.0.0.1
192.168.0.5
192.168.1.14

要确定这些地址的适配器 (a) 从以下位置查询适配器的目标网络/proc/net/route,(b)将这些网络与/proc/net/fib_trie(c) 打印这些网络下列出的相应 /32 主机地址。

再次不python不幸的是,但是一个相当尴尬的bash方法:

#!/bin/bash

ft_local=$(awk '$1=="Local:" {flag=1} flag' <<< "$(</proc/net/fib_trie)")

for IF in $(ls /sys/class/net/); do
    networks=$(awk '$1=="'$IF'" && $3=="00000000" && $8!="FFFFFFFF" {printf $2 $8 "\n"}' <<< "$(</proc/net/route)" )
    for net_hex in $networks; do
            net_dec=$(awk '{gsub(/../, "0x& "); printf "%d.%d.%d.%d\n", $4, $3, $2, $1}' <<< $net_hex)
            mask_dec=$(awk '{gsub(/../, "0x& "); printf "%d.%d.%d.%d\n", $8, $7, $6, $5}' <<< $net_hex)
            awk '/'$net_dec'/{flag=1} /32 host/{flag=0} flag {a=$2} END {print "'$IF':\t" a "\n\t'$mask_dec'\n"}' <<< "$ft_local"
    done
done

exit 0

output:

eth0:     192.168.0.5
          255.255.255.0

lo:       127.0.0.1
          255.0.0.0

wlan0:    192.168.1.14
          255.255.255.0

已知限制:

对于与其他主机地址共享网络的主机地址,此方法不能可靠地工作。网络唯一性的丧失使得无法从 fib_trie 确定正确的主机地址,因为这些地址的顺序不一定与路由网络的顺序匹配。

话虽如此,我不确定为什么您首先想要属于同一网络的多个主机地址。因此,在大多数用例中,这种方法应该可以正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅使用 proc 获取本地网络接口地址? 的相关文章

  • OpenCV 错误:使用 COLOR_BGR2GRAY 函数时断言失败

    我在使用 opencv 时遇到了一个奇怪的问题 我在 jupyter 笔记本中工作时没有任何问题 但在尝试运行此 Sublime 时却出现问题 错误是 OpenCV错误 cvtColor中断言失败 深度 CV 8U 深度 CV 16U 深度
  • 根据 pandas 中的条件交换列值

    我想按条件重新定位列 如果国家 地区是 日本 我需要将姓氏和名字反向重新定位 df pd DataFrame France Kylian Mbappe Japan Hiroyuki Tajima Japan Shiji Kagawa Eng
  • 为什么方法无法访问类变量?

    我试图理解Python中的变量作用域 除了我不明白为什么类变量不能从其方法访问的部分之外 大多数事情对我来说都很清楚 在下面的例子中mydef1 无法访问a 但如果a可以在全局范围 类定义之外 声明 class MyClass1 a 25
  • 如何在算术表达式的结果上添加 SQLAlchemy 标签?

    我如何将这样的东西翻译成 SQLAlchemy select x y as difference 我知道该怎么做 x label foo 但我不确定在哪里放置下面的 label 方法调用 select table c x table c y
  • DataFrame 中的字符串,但 dtype 是对象

    为什么 Pandas 告诉我我有对象 尽管所选列中的每个项目都是一个字符串 即使在显式转换之后也是如此 这是我的数据框
  • multiprocessing.freeze_support()

    为什么多处理模块需要调用特定的function http docs python org dev library multiprocessing html multiprocessing freeze support在被 冻结 以生成 Wi
  • 一起使用 Argparse 和 Json

    我是 Python 初学者 我想知道 Argparse 和 JSON 是否可以一起使用 说 我有变量p q r 我可以将它们添加到 argparse 中 parser add argument p param1 help x variabl
  • 如何解码 dtype=numpy.string_ 的 numpy 数组?

    我需要使用 Python 3 解码按以下方式编码的字符串 gt gt gt s numpy asarray numpy string hello nworld gt gt gt s array b hello nworld dtype S1
  • 将具有不同大小的行的数据加载到 Numpy 数组中

    假设我有一个包含如下数据的文本文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 如何将它加载到 numpy 数组中 使其看起来像这样 1 2 3 4 5 0 6 7 8 0 0 0 9 1
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作
  • 如何在 Linux x86_64 上模拟 iret

    我正在编写一个基于 Intel VT 的调试器 由于当 NMI Exiting 1 时 iret 指令在 vmx guest 中的性能发生了变化 所以我应该自己处理vmx主机中的NMI 否则 guest会出现nmi可重入错误 我查了英特尔手
  • django如何将字符串转换为模块?

    我试图了解 django 的另一个神奇之处 它可以将字符串转换为模块 In settings py INSTALLED APPS声明如下 INSTALLED APPS django contrib auth django contrib c
  • Python:如何从文件中的一行读取字符并将它们转换为浮点数和字符串,具体取决于它们是数字还是字母?

    我有一个如下所示的文件 1 1 C C 1 9873 2 347 3 88776 1 2 C Si 4 887 9 009 1 21 我想逐行读取文件的内容 当我使用的行上只有数字时 for line in readlines file d
  • Scikit Learn - K-Means - 肘部 - 标准

    今天我想学习一些关于 K means 的知识 我已经了解该算法并且知道它是如何工作的 现在我正在寻找正确的 k 我发现肘部准则作为检测正确的 k 的方法 但我不明白如何将它与 scikit learn 一起使用 在 scikit learn
  • python csv按列转换为字典

    是否可以将 csv 文件中的数据读取到字典中 使得列的第一行是键 同一列的其余行构成列表的值 例如 我有一个 csv 文件 strings numbers colors string1 1 blue string2 2 red string
  • 本地设置的 Cython 编译器指令是否影响一个或所有函数?

    我正在努力使用 Cython 加速一些 Python Numpy 代码 并且对 本地 设置 如定义的here http docs cython org en latest src reference compilation html在文档中
  • sqlite 插入需要很长时间

    我正在将不到 200 000 行插入到 sqlite 数据库表中 我只是在终端中通过 sqlite3 使用一个非常简单的 sql 文件 我打赌它已经运行了至少 30 分钟 这是正常现象还是我应该关闭该过程并尝试不同的方法 sqlite中的插
  • Python“self”关键字[重复]

    这个问题在这里已经有答案了 我是 Python 新手 通常使用 C 最近几天开始使用它 在类中 是否需要在对该类的数据成员和方法的任何调用前添加前缀 因此 如果我在该类中调用方法或从该类获取值 我需要使用self method or sel
  • 字母尺度和随机文本上的马尔可夫链

    我想使用 txt 文件中的一本书中的字母频率生成随机文本 以便每个新字符 string lowercase 取决于前一个 如何使用马尔可夫链来做到这一点 或者使用每个字母都有条件频率的 27 个数组更简单 我想使用来自的字母频率生成随机文本
  • Django - 缺少 1 个必需的位置参数:'request'

    我收到错误 get indiceComercioVarejista 缺少 1 个必需的位置参数 要求 当尝试访问 get indiceComercioVarejista 方法时 我不知道这是怎么回事 views from django ht

随机推荐

  • Python tkinter 列表框绑定 仅在第二次单击时有效

    如果有其他讨论已经解决了这个问题 我预先表示歉意 但我找不到任何东西 我是 Python 新手 除了 90 年代的一点点 Pascal 之外 我也是编程新手 我正在构建一个带有 tk 输入框的 GUI 供用户输入值 然后将其存储在 sqli
  • Android RecyclerView - 多个Edittext同时更改

    我有一个RecyclerView有很多张牌可以容纳 4EditText 当我在其中输入值时EditText一张卡的值会在随机卡中填充相同的值 令人惊讶的是它不会跳EditText例如 如果我输入值edittext1 of card1它会将相
  • 如何在 Android RecyclerView 上对字符串进行排序?

    我有一个充满 CardView 的 recyclerView 它有 2 个参数 它们都是字符串 其中之一是标题 我想要一个按钮来根据标题按字母顺序对它们进行排序 因为它没有太多元素 所以我决定使用插入排序 即 o n 2 这是我的实现 pu
  • Spring Boot中处理嵌入式Tomcat异常

    我们遇到嵌入式 Tomcat 抛出的问题IllegalArgumentException来自LegacyCookieProcessor 它抛出 500 HTTP 响应代码 我们需要处理异常并对其执行某些操作 具体来说 将其作为 400 发送
  • Android中TextView的TextAppearance属性

    我正在开发我正在使用的 Android 应用程序TextView在屏幕上显示文本 我将此属性用于TextView设置文本的大小android textAppearance android attr textAppearanceMedium
  • 使用 Cognito 令牌访问 S3 时收到“AccessDenied”

    我正在尝试在存储桶上使用 listObjects 操作 这是通过 WebService 访问的 我不想授予用户控制台访问权限 角色政策 Version 2012 10 17 Statement Effect Allow Action mob
  • U2Net模型在android中的使用

    我按照以下步骤将原始 u2net 模型权重文件 u2net pth 转换为tensorflow lite说明 https qiita com PINTO items ed06e03eb5c007c2e102 就转换成功了 但是我在tenso
  • 了解分段错误的堆栈跟踪

    我正在做一个snprintf并出现段错误 当我像这样在 gdb 上加载核心文件时 gdb my executable core 并做了bt为了获得回溯 我得到了以下内容 Program terminated with signal 11 S
  • 构建 OpenAPI 响应,包括 oneOf 或 allOf

    我正在尝试使用 OpenAPI 3 从各种架构组件构建响应 响应基本上分为三个部分 其他端点使用的共享组件 即成功 失败标志 components schemas core response schema inside allOf 属性al
  • 用 Angular 上传文件?

    我知道这是一个非常普遍的问题 但我无法在 Angular 2 中上传文件 我努力了 1 http valor software com ng2 file upload http valor software com ng2 file upl
  • 将用户控件与 ViewModel 类关联

    当我定义一个DataTemplate内联 Visual Studio 知道我要绑定的类型 并且该类型中的属性会在自动完成中出现 例如 在下面的代码中 我可以选择DisplayName从里面的自动完成列表FirstViewModel模板
  • jQuery 同时切换“幻灯片”和“淡入淡出”动画

    jQuery 有一个slideToggle and a fadeToggle 但他们在一起玩得不好 参见小提琴here http jsfiddle net Y2yvd div on click function span slideTogg
  • Spring Boot 自定义错误页面堆栈跟踪

    我在几个位置找到了如何使用 Spring boot 制作自定义错误页面 但我似乎无法弄清楚如何使其显示堆栈跟踪 这就是我所拥有的 Bean public EmbeddedServletContainerCustomizer containe
  • 从 WooCommerce 中的 apply_filters('prefix_xml_feeds_productname_variant') 函数获取数据

    我对 WordPress 和 WooCommerce 完全陌生 所以对糟糕的解释表示歉意 我有这个代码 text apply filters prefix xml feeds productname variant text product
  • 使用java代码计算S3上文件的行数

    使用java代码 是否可以计算AWS s3上文件的行数 而无需将其下载到本地计算机 取决于你所说的下载是什么意思 S3 中没有远程处理 您无法上传将在 S3 服务中执行的代码 可能的替代方案 如果问题是文件太大而无法存储在内存或本地磁盘中
  • 如何将一个值的所有权从 Rust 转移到 C 代码?

    我正在尝试使用 FFI 编写一些 Rust 代码 其中涉及 C 获取结构的所有权 fn some function let c SomeStruct new unsafe c function mut c I want c function
  • Spring Security 如何在跨 Web 应用程序请求的线程中管理 SecurityContext?

    在 SpringSecurity 中 它有一个类名 SecurityContextHolder 及其规范 将给定的 SecurityContext 与当前执行线程关联 对于Web应用程序 每当请求到达服务器时 Spring也会重新加载并在S
  • 对部分文本使用自定义字体

    Typeface robotoBold Typeface createFromAsset activity getAssets fonts Roboto Bold ttf Typeface robotoLight Typeface crea
  • 如何将 HTC android 手机连接到电脑作为调试设备

    我想将 HTC Desire 连接到电脑 仅作为调试设备 每次我插入数据线时 它都会在电脑上搜索 HTC Sync 软件 需要很长时间 直到手机上出现一条消息 例如 未找到 HTC Sync 请安装 之后手机就可以在eclipse中进行调试
  • 仅使用 proc 获取本地网络接口地址?

    如何仅使用以下命令获取所有网络接口的 IPv4 地址proc http linux die net man 5 proc 经过一番广泛的调查后 我发现了以下内容 ifconfig利用SIOCGIFADDR 这需要打开套接字并预先了解所有接口