简介

为了让你的设备接入Shifu。我们用Go编写了一个简单的HTTP到 PowerShell 的中间件,供开发者使用。

设计

这个HTTP到PowerShell的中间件是这样设计的:

  • 中间件在主机上暴露了一个HTTP接口
  • 该HTTP接口用于转发来自外部的请求到 Windows 主机
  • 中间件将代理结果和执行状态返回给请求者

功能

将HTTP请求体代理到PowerShell shell并执行

接受HTTP请求体中的一切内容,并在规定超时时间内执行。

构建中间件

操作

386

GOOS=windows GOARCH=386 go build -a -o http2powershell.exe cmd/httpstub/powershellstub/powershellstub.go

amd64

GOOS=windows GOARCH=amd64 go build -a -o http2powershell.exe cmd/httpstub/powershellstub/powershellstub.go

使用方法

该可执行文件需要配置以下环境变量:

  • EDGEDEVICE_DRIVER_HTTP_PORT (可选)

    • 驱动程序容器的HTTP服务器端口,默认为11112
  • EDGEDEVICE_DRIVER_EXEC_TIMEOUT_SECOND (可选)
    • 执行指令的超时时间,可以通过在命令前面加上timeout <seconds>来实现。

对于Windows主机的操作:

如果要运行中间件,请双击http2powershell.exe,默认情况下,中间件会在0.0.0.0上监听11112端口。

对于Shifu的操作:

使用/examples/simple-powershell-stub中提供的样本部署文件。

shifu的根目录下发布:

kubectl apply -f driver_util/http-to-powershell-stub/examples/Simple-powershell-stub

代理命令

使用curlWindows主机发布请求:

root@nginx:/# curl "edgedevice-powershell/issue_cmd?flags_no_parameter=ls,C:"Directory: C:\
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          6/5/2021   8:10 PM                PerfLogs
d-r---          6/9/2022   2:48 PM                Program Files
d-r---         4/29/2022   8:02 PM                Program Files (x86)
d-r---         4/16/2022   1:46 AM                Users
d-----          6/9/2022   2:48 PM                Windows
d-----         4/17/2022   5:23 PM                xampp                                                     root@nginx:/# curl "edgedevice-powershell/issue_cmd?flags_no_parameter=ping,8.8.8.8"Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=64ms TTL=114
Reply from 8.8.8.8: bytes=32 time=56ms TTL=114
Reply from 8.8.8.8: bytes=32 time=57ms TTL=114
Reply from 8.8.8.8: bytes=32 time=59ms TTL=114Ping statistics for 8.8.8.8:Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:Minimum = 56ms, Maximum = 64ms, Average = 59ms

示例

当使用curl向一个给定的URL发布请求时,命令如下:

curl "example.com/issue_cmd?flags_no_parameter=ping,8.8.8.8

然后请求将从HTTP的中间件传到Windows主机的PowerShell

> powershell.exe ping 8.8.8.8

请注意,默认的定时EDGEDEVICE_DRIVER_EXEC_TIMEOUT_SECOND可以被URL中的timeout标志所覆盖,例如:

  • 如果没有timeout标志(命令超时,输出不完整):
root@nginx:/# curl "example.com/issue_cmd?flags_no_parameter=ping,-n,6,8.8.8.8"   Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=58ms TTL=114
Reply from 8.8.8.8: bytes=32 time=51ms TTL=114
Reply from 8.8.8.8: bytes=32 time=59ms TTL=114
Reply from 8.8.8.8: bytes=32 time=45ms TTL=114
Reply from 8.8.8.8: bytes=32 time=59ms TTL=114
  • 使用timeout标志(输出完整):
root@nginx:/# curl "example.com/issue_cmd?timeout=10&flags_no_parameter=ping,-n,6,8.8.8.8" Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=60ms TTL=114
Reply from 8.8.8.8: bytes=32 time=60ms TTL=114
Reply from 8.8.8.8: bytes=32 time=59ms TTL=114
Reply from 8.8.8.8: bytes=32 time=59ms TTL=114
Reply from 8.8.8.8: bytes=32 time=59ms TTL=114
Reply from 8.8.8.8: bytes=32 time=60ms TTL=114Ping statistics for 8.8.8.8:Packets: Sent = 6, Received = 6, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:Minimum = 59ms, Maximum = 60ms, Average = 59ms

我们还添加了一个参数stub_toleration来处理deviceShifu和中间件之间的延迟问题。默认情况下,它被设置为1秒,你可以用以下方法覆盖这个时间:

root@nginx:/# curl "example.com/issue_cmd?timeout=10&flags_no_parameter=ping,-n,6,8.8.8.8&stub_toleration=0" 

本文由边无际授权发布

Shifu高级功能:命令行中间件之HTTP 到 PowerShell 的中间件相关推荐

  1. java指令工具_jvm 指令工具 jcmd 命令(Java多功能命令行)

    jcmd 命令 在 jdk1.7 之后,新增了一个命令行工具jcmd,它是一个多功能工具,用它可以导出堆,查看java进程,导出线程信息,执行GC等.jcmd能将命令发送给正在运行的JVM,诊断运行中 ...

  2. Wireshark—高级特性命令行模式

    文章目录 wireshark协议解析错误 查看两个主机通信过程 查看所有数据包长度分布 专家信息 TCP的14种专家模式 Wireshark命令行模式 Tshark.exe Dumpcap.exe 利 ...

  3. CMD命令行修改.ps1文件(powershell脚本)的默认打开方式

    只需要以管理员身份运行CMD命令行,执行一次以下代码,以后即可双击运行 .ps1 脚本: ftype Microsoft.PowerShellScript.1="%SystemRoot%\s ...

  4. 7.0、Android Studio命令行工具

    命令行工具分成SDK工具和平台工具. SDK工具 SDK工具跟随SDK安装包安装并随时更新. Virtual Device 工具 1. Android Virtual Device Manager 提 ...

  5. 传递命令行参数示例代码 (C 和 Python)

    C语言 在 C 语言中, 使用 main 函数的输入参数 argc 和 argv 传入命令行参数. argc 为 int 类型, 表示传入命令行参数的个数 (argument count); argv ...

  6. JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-命令行方式

    性能优化的步骤 第1步(发现问题):性能监控 一种以非强行或者入侵方式收集或查看应用运营性能数据的活动. 监控通常是指一种在生产.质量评估或者开发环境下实施的带有预防或主动性的活动. 当应用相关干系人 ...

  7. golang flag包(命令行参数解析)

    1.1 使用示例: 我们以 nginx 为例,执行 nginx -h,输出如下: nginx version: nginx/1.10.0 Usage: nginx [-?hvVtTq] [-s sig ...

  8. GC调优基础知识之工具篇--jdk为我们提供的命令行命令 jps,jstat,jmap,jinfo,jstat,jstack,jhat 等

    一. JDK为我们提供的工具:    在Windows中对于这些命令的支持是源自JDK -->bin下面的.exe可执行文件的支持.    在Linux中对于这些命令的支持是源自JDK --&g ...

  9. 08-SNAP的命令行处理工具gpt及其批处理(Sentinel-1和Sentinel-2为例)

    转载自:https://blog.csdn.net/lidahuilidahui/article/details/107005979 08-SNAP的命令行处理工具gpt及其批处理(Sentinel- ...

最新文章

  1. CVPR2020行人重识别算法论文解读
  2. iOS黑科技之(CoreImage)静态人脸识别(一)
  3. linux 读写设备文件,linux-中块设备文件及字符设备文件的本质区别
  4. 不是Linux文件系统的权限,Linux中文件系统的权限管理(普通权限,特殊权限,文件的扩展属性,FACL)...
  5. HTML常用特效代码
  6. MM定价计算方案确定详细图解
  7. HDFS的访问方式之HDFS shell的常用命令
  8. [网络安全自学篇] 六十四.Windows安全缺陷利用之SMBv3服务远程代码执行(CVE-2020-0796)复现及防御机理
  9. 批量清除为Button注册的事件
  10. 【例3-4】求后序遍历
  11. 小米5如何支持ATT网络运营商
  12. 感谢大家对《软件性能测试与Loadrunner实战》的支持
  13. 剑指offer面试题50. 第一个只出现一次的字符(哈希表)
  14. [数据库]Bulk Insert命令详细
  15. bt种子文件是什么(包括bt文件结构)
  16. 电商购物后台管理系统总结
  17. 秒杀项目的总结及面试常见问题
  18. uwb最详细的DS-TWR测距
  19. 写给‘真‘零经验的童鞋学习编程的建议
  20. matlab 画折线图(美化)

热门文章

  1. 国内常用NTP服务器地址及IP(阿里云时间服务器)
  2. 如何用GraphPad Prism 进行显著性分析
  3. 一本二本三本有什么区别
  4. 城区现有5种共享单车 ofo率先加入智慧城市建设
  5. [USACO2.3]奶牛家谱 Cow Pedigrees
  6. java bson创建_Java 构造 BSON 数据类型
  7. a标签的target属性
  8. privoxy无法启动
  9. 聊聊 SQLAlchemy 连接池中的连接失效问题
  10. c++ 内存池的实现