一款用rust制作的命令行工具

get-host-ip 这是一款用rust制作的命令行工具。其被设计用来从c:windowssystem32ipconfig.exe的执行结果内提取出指定【网卡】的属性值。比如,从电脑本的【无线局域网适配器wlan】中提取出【ipv4地址】字符串值。
使用场景 从windows subsystem for linux(比如,ubuntu-20.04)读取其宿主主机(比如,windows 11)无线物理网卡的ip地址。进而,将其作为两项重要功能的配置项入参:
投影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 ipconfig.exe 返回结果中的【主分类】标题 [default: 无线局域网适配器 wlan] -e, --entry ipconfig.exe 返回结果中的【主分类】下各个条目的标签名 [default: ipv4 地址] -h, --help print help -v, --version print version
更详细图例
返回结果 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-binbin
吐槽 同一款libiconv链接库怎么对linux与windows操作系统提供了不同名的导出函数呢?这个“缺德的”命名差异导致我在【编译期·动态链接】环节卡住了好几天。相对于linux版的链接库导出函数名,windows版的每个导出函数都有一个lib前缀 —— 故意的吧?真要命。


区块链技术将如何影响电子商务行业
芯海科技CSC2E101:一款应用于高端商务笔记本电脑的EC芯片
三季度中国品牌电视出货量居首,市占率三星电子第一
2019年全球晶圆厂投资将会达到566亿美元
小胜机器人与创意银行达成深度合作 已入驻线下体验店
一款用rust制作的命令行工具
工信部印发新一代人工智能产业创新重点任务揭榜优胜单位名单
从产品的演变过程看KVM行业的发展
英飞凌推出高度集成且可灵活扩展的WLC无线充电平台,采用符合Qi标准的可编程控制器
常用的锂电参数与计算公式
10个流行的Python库平台
BYCOO H9电动牙刷:一款适合敏感牙齿的低噪音电动牙刷
用树莓派与OpenMediaVault打造自己的NAS
知汇研发高效无功补偿发生器SVG无功补偿快速响应
让汽车驾驶更加安全 北京首条车联网道路落地
三星的智能手机出货量出现衰退迹象
海水电导率仪的测量范围与校准原理
苹果13系列都有什么特色
机场车辆电动化开启LFP新蓝海
华为发布智能音箱,离实现生态闭环的目标正渐行渐近