0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_wN0SrCdH 来源:Rust语言中文社区 2023-05-04 09:56 次阅读

get-host-ip

这是一款用rust制作的命令行工具。其被设计用来从C:WindowsSystem32ipconfig.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

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

更详细图例

c363230a-e8b5-11ed-ab56-dac502259ad0.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-binbin

吐槽

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

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 命令
    +关注

    关注

    5

    文章

    678

    浏览量

    21971
  • 脚本
    +关注

    关注

    1

    文章

    387

    浏览量

    14814
  • Rust
    +关注

    关注

    1

    文章

    228

    浏览量

    6550

原文标题:get-host-ip

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在STM32实现命令行

    工作中的开发环境都是基于linux命令行交互,作为命令行的重度使用者,玩单片机也要使用命令行工具,百度了
    发表于 12-09 11:32 2243次阅读

    Linux命令行工具

    Linux 新手往往对命令行心存畏惧。部分原因是因为需要记忆大量的命令,毕竟掌握命令是高效使用命令行的前提不幸的是,学习这些命令并无捷径,
    发表于 07-25 08:10

    caxa命令行中的应用

    caxa命令行中的应用 命令行对于大多用户来说往往只是输入数据的作用,但是其中的奥妙还有很多,下面就给大家
    发表于 10-18 18:18 2276次阅读

    CMD的命令行高级教程

    CMD的命令行高级教程
    发表于 10-24 08:31 30次下载
    CMD的<b class='flag-5'>命令行</b>高级教程

    监控jvm常用的5个命令行工具

    常用的几个命令行工具有jps、jstat、jinfo、jmap、jstack等。这几个工具可以安装openjdk-devel-debug包。
    的头像 发表于 02-06 14:47 5831次阅读
    监控jvm常用的5个<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>

    实用 Linux 命令行使用技巧集锦

    下面介绍的都是命令行工具,这些工具在日常工作中都很有用。
    的头像 发表于 03-21 14:42 4717次阅读

    Xilinx软件命令行工具:XSCT开发和调试

    了解如何使用XSCT,Xilinx软件命令行工具进行开发和调试。 该视频演示了XSCT如何充当Xilinx SDK的命令行控制台。
    的头像 发表于 11-21 06:02 1.4w次阅读

    Xilinx软件命令行工具进行开发和调试

    了解如何使用XSCT,Xilinx软件命令行工具进行开发和调试。 该视频演示了XSCT如何充当Xilinx SDK的命令行控制台。
    的头像 发表于 11-22 06:53 6622次阅读

    Git常见的误区和命令行工具等综述

    Git常见的误区和命令行工具等综述
    发表于 08-31 09:51 0次下载

    Golang基于flag库实现命令行工具

    Golang 标准库中的 flag 库提供了解析命令行选项的能力,我们可以基于此来开发命令行工具
    的头像 发表于 10-28 09:26 1259次阅读

    新的开源命令行工具west

    电子发烧友网站提供《新的开源命令行工具west.zip》资料免费下载
    发表于 11-11 09:25 0次下载
    新的开源<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>west

    用于解析和操作URL的命令行工具

    curl 作者 Daniel 宣布推出新的开源项目:trurl,这是一款用于解析和操作 URL 的命令行工具,主要是面向 shell 脚本作者提供。Daniel 称项目名字中的 'tr' 代表 transla
    的头像 发表于 04-11 10:02 1098次阅读

    介绍Go里面经常使用到的命令行工具

    优秀的工具配合熟练的使用,往往可以让开发效率大幅度提升,本小节介绍 Go 里面经常使用到的命令行工具
    的头像 发表于 05-22 16:58 1247次阅读
    介绍Go里面经常使用到的<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>

    PetaLinux工具文档:命令行参考指南

    电子发烧友网站提供《PetaLinux工具文档:命令行参考指南.pdf》资料免费下载
    发表于 09-15 14:52 0次下载
    PetaLinux<b class='flag-5'>工具</b>文档:<b class='flag-5'>命令行</b>参考指南

    HarmonyOS开发:【基于命令行(安装库和工具集)】

    使用命令行进行设备开发时,可以通过以下步骤安装编译OpenHarmony需要的库和工具
    的头像 发表于 04-25 21:03 358次阅读
    HarmonyOS开发:【基于<b class='flag-5'>命令行</b>(安装库和<b class='flag-5'>工具</b>集)】