[大家的项目] 获取主机IP地址

news2024/12/23 1:46:08

get-host-ip

https://github.com/stuartZhang/get-host-ip/tree/main

这是一款用rust制作的命令行工具。其被设计用来从C:\Windows\System32\ipconfig.exe的执行结果内提取出指定【网卡】的属性值。比如,从电脑本的【无线局域网适配器WLAN】中提取出【IPv4地址】字符串值。

使用场景

Windows Subsystem for Linux(比如,Ubuntu-20.04)读取其宿主主机(比如,Windows 11)无线物理网卡的IP地址。进而,将其作为两项重要功能的配置项入参:

  1. 投影WSL2图形界面至Windows宿主桌面系统显示。

  • 无论是将整个Gnome桌面系统投影作为Windows环境下的一个应用程序窗口,还仅只是投影某个Linux GUI应用程序,X11 Server都需要借助$DISPLAY环境变量明确地知晓XSTATA的准确IP位置。请不要自做聪明地认为127.0.0.1可能搪塞过去。127.0.0.1是指向WSL2子系统自身,而不是宿主主机。

  • 关于WSL2桌面投影的更多技术细节,可参见我早先的另一篇文章为 Rust+QT 编程搭建【伪】win32 开发环境。还算是详细吧!

使Windows宿主操作系统共享VPN客户端给WSL2子系统。

  • 从操作上,执行export HTTP_PROXY=***指令要比在Linux系统里安装与配置另一个Clash实例要省心多了。

  • 从后续维护上,对VPN客户端的软件升级与配置更新仅需要做一遍操作更节省时间。

  • 从经济上,更少的在线客户端数量也更便宜。

曾经的纠结

早先我也曾经使用nodejs脚本程序实现了相同的功能。但,node虚拟机首次启动时间着实有些长了。虽然该长延时弊端在交互式bash上下文中并不明显(毕竟咱敲键盘也不快,还时不时地敲错字母),但当被置于.bashrc内执行时,其造成的shell会话初始化阻滞就让人有点不好接受了(毕竟,每次开个新shell窗口都得明显黑幕个把秒钟,体验着实有些儿差)。所以,我决心使用rust重构此“热”指令。效果明显,几乎一闪便可完成shell初始化。

命令行指令-用法

$ get-host-ip --help
获取 wsl 宿主机器的物理 IP 地址

Usage: get-host-ip [OPTIONS]

Options:
  -s, --section <SECTION>  ipconfig.exe 返回结果中的【主分类】标题 [default: "无线局域网适配器 WLAN"]
  -e, --entry <ENTRY>      ipconfig.exe 返回结果中的【主分类】下各个条目的标签名 [default: "IPv4 地址"]
  -h, --help               Print help
  -V, --version            Print version

更详细图例

1dc783e0aba42b17b4dd105ea846d967.png

返回结果

get-host-ip执行输出就是没有结尾换行符的IP地址字符串。若将该指令添加入$PATH,那么在Shell求值表达式内可以直接

export HOST_IP=$(get-host-ip);

链接库依赖

因为Windows cmd指令输出文本内容的字符集是cp936,而不是UTF-8。所以,get-host-ip需要依赖操作系统预置的字符集转换动态链接库libiconv,来完成cp936 -> UTF-8的字符集转换。

Linux操作系统

大部分主流Linux OS都包含有libiconv。若你的Linux OS版本比较早或是compact版而缺失了libiconv也不必慌。按如下方式补装即可:

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.1.tar.gz
tar -xzvf libiconv-1.9.1.tar.gz
cd libiconv-1.9.1.tar.gz
./configure --prefix=/usr/local
sudo make -j8
sudo make install
sudo ln -s /usr/local/lib/libiconv.so /usr/lib/libiconv.so
sudo ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2

Windows操作系统

要么,从setup直接下载安装包,并本地安装之。缺点就是会“污染”你的PATH环境变量。

要么,从binary下载预编译包。在解压缩之后,将其下的bin目录添加到你的编译环境变量RUST_FLAGS内。比如,

set RUST_FLAGS=-L C:\libiconv-1.9.2-1-bin\bin

吐槽

同一款libiconv链接库怎么对LinuxWindows操作系统提供了不同名的导出函数呢?这个“缺德的”命名差异导致我在【编译期·动态链接】环节卡住了好几天。相对于Linux版的链接库导出函数名,Windows版的每个导出函数都有一个lib前缀 —— 故意的吧?真要命。

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

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

相关文章

写给开发同学的 AI 强化学习入门指南

该篇文章是我学习过程的一些归纳总结&#xff0c;希望对大家有所帮助。 最近因为 AI 大火&#xff0c;搞的我也对 AI 突然也很感兴趣&#xff0c;于是开启了 AI 的学习之旅。其实我也没学过机器学习&#xff0c;对 AI 基本上一窍不通&#xff0c;但是好在身处在这个信息爆炸的…

数据结构---栈的实现

文章目录 前言一、什么是栈&#xff1f;二、栈的实现 1.栈的结构2.栈的接口实现过程总结 前言 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶&#xff0c;相对地&#xff0c;把另一…

用ChatGPT通过WebSocket开发一个交互性的五子棋微信小程序(二)

文章目录 1 前言1.1 实现的原理1.2 如何与微信小程序联系 2 五子棋项目2.1 申请OpenAI的API2.2 调用API代码2.3 界面代码 3 同步五子棋到前端小程序3.1 WebSocket长连接3.2 获取实时下棋 4 讨论 1 前言 1.1 实现的原理 大体方向是将ChatGPT作为后端语言模型&#xff0c;然后将…

AD19 基础应用技巧(差分线的添加走线与蛇形等长)

《差分线的添加走线与蛇形等长》 问:何为差分信号? 答:通俗地说&#xff0c;就是驱动端发送两个等值、反相的信号&#xff0c;接收端通过比较这两个电压的差值来判断逻辑状态“0”还是“1”。 问:差分线的优势在哪? 答:差分信号和普通的单端信号走线相比&#xff0c;最明量…

【SpringBoot2】三:基础入门---自动配置原理(自动配置原理入门+开发技巧)

文章目录 1.自动配置原理入门1.1 引导加载自动配置类1.2 按需开启自动配置项1.3 修改默认配置1.4 最佳实践 2.开发小技巧2.1 Lombok2.1.1 简化Bean开发2.1.2 简化日志开发 2.2 dev-tools2.3 Spring Initailizr&#xff08;项目初始化向导&#xff09; 1.自动配置原理入门 1.1 …

【数据库】Java的JDBC编程(idea链接数据库)

目录 前言 1、Java的数据库编程&#xff1a;JDBC 2、使用JDBC&#xff08;项目中导入数据库驱动包&#xff09; 2.1、获取驱动包 2.2、将数据库驱动包导入Java项目中 2.3、使用JDBC编写代码 2.3.1、创建并初始化一个数据源 2.3.2、 和数据库服务器建立链接 2.3.3、构…

C++(多态上)

目录: 1.多态的概念 2.多态的定义和实现 3.虚函数构成重写的特例 4.剖析一道非常经典的题 5.剖析多态的原理 ------------------------------------------------------------------------------------------------------------------------- 1.多态的概念 概念:通俗来说&#…

嵌入式开发--无刷电机学习2--克拉克变换

克拉克变换 首先说明&#xff0c;有很多方法&#xff0c;在数学上是等价的&#xff0c;比如33333*412。下面说的事情也是。 为了更简明的控制&#xff0c;克拉克女士提出电机控制简化的方法&#xff0c;即建立一个坐标系&#xff0c;横轴是α 纵轴是β&#xff0c;并将三相电…

RabbitMQ入门Demo 简单模式

出现的问题,原本4个操作,要么全部执行,要么全部不执行------->强一致性 但是现在分开了-----------最终一致性 强一致性&#xff1a;指在消息传递的过程中&#xff0c;系统会确保每个消息被精确地按照发送的顺序被传递&#xff0c;并且每个消息都会被正确地处理。强一致性…

重大问题,Windows11出现重大BUG

重大问题&#xff0c;Windows11出现重大BUG 这种Windows11操作系统出现BUG已经可以说是非常常见的&#xff0c;但是&#xff0c;今天我将代表所有微软用户&#xff0c;解决一个关于UI设计非常不舒服的功能 关闭多平面覆盖 事情叙述问题 微软社区解决方案自己发现的解决方案解决…

模拟比较器(Comparator)

概述 ⚫ 两个比较器&#xff0c;Comp1为低功耗比较器&#xff0c;Comp2为rail-to-rail快速比较器 ⚫比较器负端输入为vref或者IO输入&#xff0c;比较器正端为IO输入 ⚫ Buffer有Bypass功能&#xff0c;Bypass使能有效则不经过Buffer直接输入至比较器 ⚫ Buffer有1/2分压功能 ⚫…

JSON.stringfy() 和 qs.stringfy()区别 以及post/get 的参数形式

axios中post请求 application/json和 application/x-www-form-urlencoded 前端向后端传输数据时&#xff0c;如果是get传输&#xff0c;直接传在url后&#xff1b;如果是post传输&#xff0c;则在请求体body中传输。 在body中的数据格式又有两种&#xff0c;一种是 json 数据…

【Linux】教你用进程替换制作一个简单的Shell解释器

本章的代码可以访问这里获取。 由于程序代码是一体的&#xff0c;本章在分开讲解各部分的实现时&#xff0c;代码可能有些跳跃&#xff0c;建议在讲解各部分实现后看一下源代码方便理解程序。 制作一个简单的Shell解释器 一、观察Shell的运行状态二、简单的Shell解释器制作原理…

Python+Yolov8+Deepsort入口人流量统计

程序示例精选 PythonYolov8Deepsort入口人流量统计 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov8Deepsort入口人流量统计>>编写代码&#xff0c;代码整洁&#x…

[java]云HIS运维运营分系统功能实现(springboot框架)

运维运营分系统 一级菜单包括&#xff1a;系统运维、综合监管、系统运营 系统运维包括二级菜单&#xff1a;环境管理、应用管理、菜单管理、接口管理、任务管理、配置管理 综合监管包括二级菜单&#xff1a;综合监管 系统运营包括二级菜单&#xff1a;机构管理、药品目录管…

计算机组成原理4.2.3提高存储器访问速度的措施

提高存储器访问层次大概有三种方法 采用高速器件 采用层次结构 Cache 主存 调整主存结构 调整存储结构 单体多字系统 利用程序局部性原理&#xff0c;访问一个块 相邻的若干块都会被拿出来&#xff0c;缺点可能会碰到跳转类指令 多体并行系统 高位是体号&#xff0c;低位时地…

手动搭建高可用的 kubernetes 集群(v1.16.6)

手动搭建高可用的 kubernetes 集群(v1.16.6) 目录 手动搭建高可用的 kubernetes 集群(v1.16.6) 1、组件版本和配置策略 1.1 主要组件版本1.2 主要配置策略2、初始化系统和全局变量 2.1 集群规划2.2 初始化系统环境 2.2.1 关闭防火墙2.2.2 关闭 swap 分区2.2.3 关闭 SELinux2.2.…

【网络技术】什么是CNI

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 Never look back unless you are planning to go that way. 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用…

2023年第十五届华中杯赛题A题详细版思路 新型镇静药物临床实验疗效分析与预测

2023年五一假期期间&#xff0c;数学建模竞赛就有四场&#xff0c;各种比赛各种需求应接不暇。因此&#xff0c;对于本次浅析有不足的地方欢迎大家指出。为了更好的帮助大家华中杯参赛&#xff0c;下面带来&#xff0c;A题详细版思路 问题一&#xff0c;差异性分析 文字分析&a…

JAVA基于Springboot框架的停车场管理系统开发实践和实现【附源码】

运行环境: jdk1.8idea/eclipsemaven3mysql5.6 项目技术: Java,Springboot,mybatis,mysql,jquery,html 该系统为停车场管理人员提供了对停车场中车辆&#xff0c;车位和财务的管理。操作员可以灵活地使用相关权限开展工作。在车位管理&#xff0c;车辆的停放和驶离、缴费&a…