远程操作机器有时会比较麻烦,我写了一个工具,主要功能:1.远程执行命令 2.上传下载文件。是一个 Web Server,通过 HTTP 请求来操作机器,类似一个小木马。当然,因为是一个 Web Server,所以也提供了打印 HTTP 请求的能力,方便调试 Webhook 场景。下面给大家演示一下。

安装

工具代码放到 Github 上了,感兴趣的朋友可以瞧瞧,没多少行代码。也给大家编译好了,下载地址在这里:https://github.com/UlricQin/gohttpd/releases。提供 x86 和 arm64 的 Linux 版本,下载后解压就可以直接运行。

# 我是 arm64 架构的机器,所以下载 arm64 版本,下载完了解压缩
tar zxvf gohttpd-v0.3-linux-arm64.tar.gz # 进入解压缩出来的目录里
cd gohttpd-v0.3-linux-arm64 # 运行 gohttpd,监听 8888 端口,认证密码是 Pa55word
./gohttpd 8888 Pa55word

如上,运行 gohttpd 时,需要传入两个参数,第一个是要监听的端口号,第二个是认证密码。这里我传入的是 8888 和 Pa55word。我这个机器的 IP 是 10.211.55.3,下面给大家演示一下。

操作演示

命令执行

我先通过这个 HTTP Server 在目标机器执行个命令:

ulric@ulric-flashcat ~ % curl 10.211.55.3:8888/run -d 'hostname;uptime'
Authorization is blank

报错了,说 Authorization 为空,这是缺少认证信息,认证信息就是 Pa55word,所以我再加上认证信息(放 header 里):

ulric@ulric-flashcat ~ % curl -H "Authorization: Pa55word" 10.211.55.3:8888/run -d 'hostname;uptime'
ubuntu-linux-22-04-desktop
11:01:56 up 2 days, 16:42, 3 users, load average: 0.29, 0.15, 0.11

OK,正常输出了机器名和 uptime 信息。当然,通过 -d 的方式可能不方便编辑,尤其是在换行的时候,我们可以使用 postman 这类工具,更方便的编辑请求体。比如

下载文件

刚才命令执行的时候,调用的接口(URL路径)是 /run,我们不加任何 URL 路径,直接请求,就可以列出当前目录下的文件,比如:

点击对应的文件,就可以下载了。如果你在 Linux 根目录下运行 gohttpd,那么你就可以下载整个系统的文件了,所以要注意安全。

上传文件

上传文件的 URL 是 /upload,使用浏览器打开,如图:

可以选择多个文件,上传,完事去首页看看,就可以看到上传的文件了。

接口调试

有些产品对外提供 Webhook 能力,但是我想之后 Webhook 的具体内容格式,这时候可以用这个工具来打印 HTTP 请求,比如:

ulric@ulric-flashcat ~ % curl 10.211.55.3:8888/request
r.RequestURI: /request
r.URL.Path: /request
r.URL.Host:
r.URL.Hostname():
r.Method: GET
r.URL.Scheme:
gohttpd pid: 842085 Headers:
User-Agent: curl/8.4.0
Accept: */* Payload: ulric@ulric-flashcat ~ % curl 10.211.55.3:8888/request -d 'hello world'
r.RequestURI: /request
r.URL.Path: /request
r.URL.Host:
r.URL.Hostname():
r.Method: POST
r.URL.Scheme:
gohttpd pid: 842085 Headers:
User-Agent: curl/8.4.0
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded Payload:
hello world

如上,通过 /request 接口,可以打印出 HTTP 请求的详细信息,包括 URL、Method、Headers、Payload 等。但是这个内容是通过 HTTP Response 直接返回的。不方便调试 Webhook 场景,Webhook 场景可以使用 /print 接口,别的服务调用 /print 接口的时候,就会在 gohttpd 的控制台打印出 HTTP 请求的详细信息。

比如我 curl 一下 /print

ulric@ulric-flashcat ~ % curl 10.211.55.3:8888/print -d 'hello world'
ok

然后到启动 gohttpd 的控制台看看:

root@ubuntu-linux-22-04-desktop:~/download/gohttpd-v0.2-linux-arm64# ./gohttpd 8888 Pa55word
2024/04/10 11:00:04 main.go:211: listening http on 8888
r.RequestURI: /print
r.URL.Path: /print
r.URL.Host:
r.URL.Hostname():
r.Method: POST
r.URL.Scheme:
gohttpd pid: 842085 Headers:
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded
User-Agent: curl/8.4.0 Payload:
hello world

对于调试 Webhook 的场景,这就比较方便了。

如上知识,希望对你有帮助。文末请允许我插播一个小广告。本人创业两年了,我们公司的业务如下,如果你有这方面的需求,欢迎联系我们做产品技术交流哈。

关于快猫星云

快猫星云是一家云原生智能运维科技公司,由知名开源项目“夜莺(Nightingale)”的核心开发团队组成,创始团队均来⾃阿⾥、百度、滴滴等互联⽹公司。夜莺是一款开源云原生监控工具,是中国计算机学会接受捐赠并托管的第一个开源项目,在GitHub上有超过8000颗星,迭代发布了超过100多个版本,上百位社区贡献者,是国内领先的开源可观测性解决方案。

快猫星云以开源夜莺为内核打造的“Flashcat平台”,是国内顶级互联⽹公司可观测性实践的产品化落地,致力于让可观测性技术更好的服务企业,保障服务稳定性。Flashcat 平台具有以下特点:

  • 统一采集:采用插件化思路,内置集成上百种采集插件,服务器、网络设备、中间件、数据库、应用、业务,均可监控,开箱即用。
  • 统一告警:支持几十种数据源对接,收集各类监控系统的告警事件,进行统一的告警收敛、降噪、排班、认领、升级、协同,大幅提升告警处理效率。
  • 统一观测:将 Metrics、Logs、Traces、Events、Profiling 等多种可观测性数据融会贯通,并预置行业最佳实践,既提供全局业务视角、技术视角的驾驶舱,也提供层层下钻的故障定位能力,有效缩短故障发现和定位时间。

快猫星云,让可观测性数据更有价值!
https://flashcat.cloud/

写了一个 SRE 调试工具,类似一个小木马的更多相关文章

  1. 自己写一个与startWith类似的判断方法

    package com.hanqi.lianxi; import java.util.Scanner; public class startWith {        //自己顶一个与startWit ...

  2. 转-MySQL教程-写的很详细,赞一个

    原帖地址:https://www.w3cschool.cn/mysql/,谢谢原帖大人 MySQL是什么? MySQL安装 MySQL示例数据库 MySQL导入示例数据库 MySQL基础教程 MySQ ...

  3. 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果

    package com.rui.test; import java.util.Random; /** * @author poseidon * @version 1.0 * @date:2015年10 ...

  4. javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

    javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...

  5. 写一个方法,用一个for循环打印九九乘法表

    public class MultiplicationTable { /**  * @description 写一个方法,用一个for循环打印九九乘法表   * @author  wangkun  * ...

  6. 我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容

    我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容,目前测试了300多个新闻网站的新闻页,都能准确识别

  7. 38 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

    题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度. public class _038PrintLength { public static void main(Stri ...

  8. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度

    import java.util.Scanner; /** * [程序38] * * 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度. * * @author Jame ...

  9. 写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true;

    写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true:也就是实现这样一个函数boolean isPalindrome(int x); 分析一下,该题目主要是通过 ...

  10. JavaScript封装一个函数效果类似内置方法concat()

    JavaScript封装一个函数效果类似内置方法concat() 首先回忆concat()的作用: concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个 ...

随机推荐

  1. Apsara Stack 技术百科 | 标准化的云时代:一云多芯

    ​简介:随着今年云栖大会现场平头哥的自研云芯片倚天710发布,以及众多新兴厂商的芯片发布,将有越来越多的类型芯片进入到主流市场,"多芯"的架构将在数据中心中越来越常见,阿里云混合云 ...

  2. Java编程技巧之样板代码

    简介: 在日常编码的过程中,可以总结出很多"样板代码",就像"活字印刷术中的"活字"一样.当我们编写新的代码时,需要用到这些"活字" ...

  3. 云原生消息、事件、流超融合平台——RocketMQ 5.0 初探

    简介: 今天分享的主题是云原生消息事件流超融合平台 RocketMQ 5.0 初探,内容主要分为三个部分: 首先,带大家回顾业务消息领域首选 RocketMQ 4 发展历史以及 4.x 版本的演进与发 ...

  4. 2018-5-28-WPF-Process.Start-出现-Win32Exception-异常

    title author date CreateTime categories WPF Process.Start 出现 Win32Exception 异常 lindexi 2018-05-28 10 ...

  5. Raft 共识算法2-领导者选举

    Raft 共识算法2-领导者选举 Raft算法中译版地址:https://object.redisant.com/doc/raft中译版-2023年4月23日.pdf 英原论文地址:https://r ...

  6. Rust中的并发性:Sync 和 Send Traits

    在并发的世界中,最常见的并发安全问题就是数据竞争,也就是两个线程同时对一个变量进行读写操作.但当你在 Safe Rust 中写出有数据竞争的代码时,编译器会直接拒绝编译.那么它是靠什么魔法做到的呢? ...

  7. iceoryx源码阅读(一)——全局概览

    一.什么是iceoryx iceoryx是一套基于共享内存实现的进程间通信组件. 二.源码结构 iceoryx源码包括若干工程,整理如下表所示: 下图展示了主要项目之间的依赖(FROM:iceoryx ...

  8. java 读取气象专业格式NetCDF文件

    一.NetCDF简介NetCDF全称为network Common Data Format( "网络通用数据格式"),是一个软件库与机器无关的数据格式,支持创建,访问基于数组的科研 ...

  9. JDK源码阅读-------自学笔记(二十二)(java.util.ArrayList自定义晋级,ArrayList实战详解)

    简介(Introduction)   上篇文章主要介绍了ArrayList自行模仿建立的方式,那么,其实这个类不是一次性就那么完美的,现在做一个一步步变成那样完整的ArrayList的版本升级测试. ...

  10. CentOS7 升级 curl 到 HTTP2

    目录 文章目录 目录 编译安装 YUM 升级 编译安装 安装编译环境: yum -y groupinstall "Development Tools" yum -y install ...