I posted the wrong code I tried also something simple like that: cmd := exec.Command(binPath, "-i") //bin/sh -i cmd.Stdin = conn stdout := new(bytes.Buffer) cmd.Stdout = io.Write(stdout) conn.Write(stdout.Bytes()) cmd.Stderr = conn cmd.Run()
Still no output of the commands I enter Il giorno domenica 11 luglio 2021 alle 21:00:41 UTC+2 LetGo ha scritto: > AAAAAAAAAH sorry! > > It was a really tough day and I tried to code in the worst situation ever, > I was really tired that I did not even noticed how stupid and newbie was > that, sorry! > PLEASE just ignore my last comment... ahah Im REALLY embarrassed > After a break of 2 days, I went back on my code, and after some trials I > got something weird. > Im trying something simple. to test what happens between each step to get > out fron that situation- from an io.writer to *bytes.Buffer to []byte and > viceversa.. > Well, once compailed, everything works fine, expect the stout: > > once I get the shell, the command /bin/sh -i gets executed If from the > server I type a non existing command, *I get the sterr on the server, but > I don't get the stout ... I wanna smash my keyboard > . https://play.golang.org/p/RWs7Kkccz-S > <https://play.golang.org/p/RWs7Kkccz-S>* > *I mean, if I use these exact line on a simple command in another project, > everything works fine, but in that situation it does not, its like if stout > goes lost in the space: * > > I hope I won't hurt your brain again ahah > Sorry again, I did not mean that! ahah > > > > > > I > Il giorno giovedì 8 luglio 2021 alle 20:43:31 UTC+2 Brian Candler ha > scritto: > >> Complete code on play.golang.org is much easier to understand. At the >> moment I don't think your code will do anything useful. For example >> >> buf := new(bytes.Buffer) >> ... >> bizz := buf.Bytes() >> >> will always set bizz to an empty slice; since you never modify bizz, >> len(bizz) will always be zero. Also, >> >> kk := io.Writer(z) >> >> creates an io.Writer variable with a particular value, but never uses >> that value, because 2 lines later you replace it with a different value. I >> can't say for sure without seeing the whole program, but I don't think >> that's where the error is occurring; I think it's the later line ("kk = >> conn"), because you don't seem to use that value. It's as if you wrote a >> program like this: >> >> func main() { >> i := 1 >> i = 2 >> } >> >> i.e. you just return and never use the value of "i". >> >> I think the previous advice given was good. Do the go tour, several >> times if required; look at the tutorials at https://golang.org/doc/, >> look for interesting articles at https://blog.golang.org/index; after >> you pick up the core concepts, find some example sockets-based code, run >> it, modify it. Stringing together statements, if you don't understand what >> each individual statement does, is unlikely to give a useful result. >> >> On Thursday, 8 July 2021 at 18:54:29 UTC+1 LetGo wrote: >> >>> I thought that after getting the bytes, chunk the data, I need to have >>> the io.writer back before send the chunked data >>> So far I came up with this: >>> >>> ... >>> cmd.Stdin = conn >>> buf := new(bytes.Buffer) >>> cmd.Stdout = buf >>> >>> bizz := buf.Bytes() >>> >>> var i int >>> for { >>> n := int(math.Min(float64(rand.Intn(len(bizz))), float64(len(bizz)))) >>> d := bizz[i : i+n] >>> i += n >>> >>> >>> z := bytes.NewBuffer(d) >>> >>> kk := io.Writer(z) >>> //this line creates the error >>> >>> time.Sleep(400 * time.Millisecond) >>> >>> kk = conn >>> >>> >>> if i >= len(bizz) { >>> break >>> } >>> } >>> cmd.Stderr = conn >>> cmd.Run() >>> ..... >>> >>> But know I get this error: >>> >>> conn.go:95:21: kk declared but not used >>> Il giorno mercoledì 7 luglio 2021 alle 15:49:56 UTC+2 mlevi...@gmail.com >>> ha scritto: >>> >>>> You cannot *per se* convert an interface or a struct to a builtin like >>>> []byte >>>> You might wanna have a look at the Bytes method >>>> <https://golang.org/pkg/bytes/#Buffer.Bytes> of *bytes.Buffer, which >>>> returns the internal buffer of the type as a slice of bytes. Normally that >>>> would have been a good exercise to let you find it yourself, and I don't >>>> know if it is really "help" to give it to you directly, but as I said, >>>> once >>>> you are done with your small tool, the next step for you will be to go >>>> back >>>> from the basic Go constructs :) >>>> >>>> Glad I could help, and don't bother with the comments, the best "thank >>>> you" I can wish for is that we continue learning together ;) >>>> Hope the following adventures of your Go journey are as interesting as >>>> they are for me! >>>> >>>> Cheers >>>> >>>> Le mer. 7 juil. 2021 à 15:08, LetGo <non3...@gmail.com> a écrit : >>>> >>>>> Thanks for your answer!(: >>>>> You are right, but I just wanted to have this one little tool in Go >>>>> and I have never thought that could be that hard... ahahah >>>>> >>>>> By the way, it works as you said, it fixed the error! ( obviously.. ) >>>>> the only thing left is to convert type *bytes.Buffer to []byte * I think* >>>>> and then I will be almost done. >>>>> Im already searching how to do that. >>>>> >>>>> Once it will work as I wish, I will add your names to my comments ( I >>>>> think this is better than any "thank you" ) in the code, to remind me of >>>>> your kind help(: >>>>> >>>>> >>>>> >>>>> Il giorno mercoledì 7 luglio 2021 alle 14:01:33 UTC+2 >>>>> mlevi...@gmail.com ha scritto: >>>>> >>>>>> [Sorry forgot to hit "Reply all"] >>>>>> >>>>>> Are you trying to cast cmd.Stdout here? >>>>>> What you can do is: >>>>>> buf := new(bytes.Buffer) >>>>>> cmd.Stdout = buf // buf is an io.Writer so this is fine >>>>>> >>>>>> but I don't get the point of the data := foo? >>>>>> >>>>>> Maybe, before trying to convert a whole complex program in Python to >>>>>> a whole working program in Go, you should take time to familiarize >>>>>> yourself >>>>>> with the language. >>>>>> Go through the Go tour <https://tour.golang.org/welcome/1>, read a >>>>>> little of the specs, have yourself code some small, simple programs that >>>>>> don't require using lots of std packages at once... >>>>>> >>>>>> Once you are familiar with the language constructs, which I have to >>>>>> say are pretty different from Python's, you will have a better >>>>>> understanding of where to start and how to implement your program. >>>>>> Otherwise I think this will all only get you confused. >>>>>> And understanding at least the important basics of Go will help you >>>>>> explain your pain points here, if any remains :) >>>>>> >>>>>> Hope this helps, >>>>>> >>>>>> Le mer. 7 juil. 2021 à 12:41, LetGo <non3...@gmail.com> a écrit : >>>>>> >>>>>>> One of these is this: >>>>>>> ... >>>>>>> buf := new(bytes.Buffer) >>>>>>> foo := buf(cmd.Stdout) // this line is 87 >>>>>>> data := foo >>>>>>> var i int >>>>>>> ... >>>>>>> >>>>>>> pkg/conn.go:87:20: cannot call non-function buf (type *bytes.Buffer) >>>>>>> Il giorno mercoledì 7 luglio 2021 alle 12:10:03 UTC+2 LetGo ha >>>>>>> scritto: >>>>>>> >>>>>>>> I tried also both of them, but I got stuck into a loop of errors >>>>>>>> again.. probably I coded in the wrong way >>>>>>>> >>>>>>>> Il giorno mercoledì 7 luglio 2021 alle 11:50:51 UTC+2 Brian Candler >>>>>>>> ha scritto: >>>>>>>> >>>>>>>>> It makes no sense to convert an io.Writer to a string. >>>>>>>>> >>>>>>>>> io.Writer is an interface: any type which has a Write() method. >>>>>>>>> So you can pass a string *to* a writer, to get it written somewhere, >>>>>>>>> by >>>>>>>>> calling the Write() method. In general, you can't get a string >>>>>>>>> *from* a >>>>>>>>> writer. If you google "go io.Writer" you'll get lots of tutorials >>>>>>>>> and >>>>>>>>> examples. >>>>>>>>> >>>>>>>>> Depending on your application though, you might want to create a >>>>>>>>> bytes.Buffer <https://golang.org/pkg/bytes/#Buffer> or >>>>>>>>> strings.Builder <https://golang.org/pkg/strings/#Builder> object, >>>>>>>>> both of which are an io.Writer. The written data gets appended to a >>>>>>>>> buffer >>>>>>>>> that you can read later. >>>>>>>>> >>>>>>>>> On Wednesday, 7 July 2021 at 10:07:19 UTC+1 LetGo wrote: >>>>>>>>> >>>>>>>>>> Thanks for your answer!(: >>>>>>>>>> You are right, sorry! >>>>>>>>>> This is the code: https://play.golang.org/p/zEZ2HIUNffs >>>>>>>>>> >>>>>>>>>> About the lines, wow! Yes, you got them! ahah >>>>>>>>>> About the errors, I tried to convert ( cmd.Stdout ) io.Write to >>>>>>>>>> bytes/ strings, but.. I have then entered into a loop of errors... >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Il giorno martedì 6 luglio 2021 alle 21:32:10 UTC+2 Brian Candler >>>>>>>>>> ha scritto: >>>>>>>>>> >>>>>>>>>>> You haven't shown which lines 75, 76 and 83 correspond to. It's >>>>>>>>>>> easier if you put the whole code on play.golang.org, and we'll >>>>>>>>>>> be able to point to the error. >>>>>>>>>>> >>>>>>>>>>> But I'm guessing it's this: >>>>>>>>>>> data := cmd.Stdout >>>>>>>>>>> ... >>>>>>>>>>> n := int(math.Min(float64(rand.Intn(len(data))), >>>>>>>>>>> float64(len(data)))) << line 75? >>>>>>>>>>> d := data[i : i+n] << line 76? >>>>>>>>>>> ... >>>>>>>>>>> if i >= len(data) { << line 83? >>>>>>>>>>> >>>>>>>>>>> If I'm right, the compiler is saying: cmd.Stdout (which you >>>>>>>>>>> assigned to 'data') is of type io.Writer. It's not a string; you >>>>>>>>>>> can't >>>>>>>>>>> take len(...) of an io.Writer, nor can you slice it. >>>>>>>>>>> >>>>>>>>>>> On Tuesday, 6 July 2021 at 16:03:26 UTC+1 LetGo wrote: >>>>>>>>>>> >>>>>>>>>>>> I think I made some progress.... I think. Is it right what I'm >>>>>>>>>>>> doing ? >>>>>>>>>>>> >>>>>>>>>>>> ................ >>>>>>>>>>>> cmd.Stdin = conn >>>>>>>>>>>> // cmd.Stdout = conn >>>>>>>>>>>> // data := []byte(cmd.Stdout) >>>>>>>>>>>> data := cmd.Stdout >>>>>>>>>>>> var i int >>>>>>>>>>>> for { >>>>>>>>>>>> n := int(math.Min(float64(rand.Intn(len(data))), >>>>>>>>>>>> float64(len(data)))) >>>>>>>>>>>> d := data[i : i+n] >>>>>>>>>>>> i += n >>>>>>>>>>>> time.Sleep(400 * time.Millisecond) >>>>>>>>>>>> d = conn >>>>>>>>>>>> >>>>>>>>>>>> if i >= len(data) { >>>>>>>>>>>> break >>>>>>>>>>>> } >>>>>>>>>>>> } >>>>>>>>>>>> cmd.Stderr = conn >>>>>>>>>>>> cmd.Run() >>>>>>>>>>>> ............................ >>>>>>>>>>>> >>>>>>>>>>>> But when I try to build I get these errors: >>>>>>>>>>>> >>>>>>>>>>>> conn.go:75:46: invalid argument data (type io.Writer) for len >>>>>>>>>>>> conn.go:76:16: cannot slice data (type io.Writer) >>>>>>>>>>>> conn.go:83:22: invalid argument data (type io.Writer) for len >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Il giorno martedì 29 giugno 2021 alle 19:37:04 UTC+2 LetGo ha >>>>>>>>>>>> scritto: >>>>>>>>>>>> >>>>>>>>>>>>> Thank you guys for all your answers and suggestions! >>>>>>>>>>>>> I really appreciate! >>>>>>>>>>>>> Sorry about the screenshots, it was the only way to make the >>>>>>>>>>>>> packets "human readable" >>>>>>>>>>>>> How could you code that kind of implementation based on your >>>>>>>>>>>>> knowledge and skill? >>>>>>>>>>>>> I have noone of these in golang ahah as I said, im too newbie >>>>>>>>>>>>> to do all this alone! >>>>>>>>>>>>> Also not working examples ( if they throw an error I don't >>>>>>>>>>>>> care, based on my code are fine! >>>>>>>>>>>>> These examples could rapresent a great start from me!(: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Il giorno martedì 29 giugno 2021 alle 19:00:06 UTC+2 >>>>>>>>>>>>> jesper.lou...@gmail.com ha scritto: >>>>>>>>>>>>> >>>>>>>>>>>>>> On Tue, Jun 29, 2021 at 5:24 PM LetGo <non3...@gmail.com> >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks for the answer! (: >>>>>>>>>>>>>>> In python it was straightforward to implement and it works >>>>>>>>>>>>>>> like a charm. It sends small packets with delay between each >>>>>>>>>>>>>>> other without >>>>>>>>>>>>>>> even care if it is UDP or TCP: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> Beware! This is an assumption that will break at some point >>>>>>>>>>>>>> in time. Currently the delay and the OS makes things >>>>>>>>>>>>>> straightforward for >>>>>>>>>>>>>> you. But TCP doesn't behave like you expect, and you are very >>>>>>>>>>>>>> likely to run >>>>>>>>>>>>>> into trouble if the machine, the network, or the system starts >>>>>>>>>>>>>> taking >>>>>>>>>>>>>> additional load. >>>>>>>>>>>>>> >>>>>>>>>>>>>> You need to frame the data. A good way is to use 4 bytes as a >>>>>>>>>>>>>> size (unsigned 32 bit integer), followed by a payload of that >>>>>>>>>>>>>> size. You can >>>>>>>>>>>>>> then avoid this becoming an uncontrolled explosion in your >>>>>>>>>>>>>> software at a >>>>>>>>>>>>>> later date. You can also close connections early if too large >>>>>>>>>>>>>> messages get >>>>>>>>>>>>>> sent, etc. >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "golang-nuts" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to golang-nuts...@googlegroups.com. >>>>>>> >>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/golang-nuts/466d016b-b90b-4505-b4a8-7e5fc62679b4n%40googlegroups.com >>>>>>> >>>>>>> <https://groups.google.com/d/msgid/golang-nuts/466d016b-b90b-4505-b4a8-7e5fc62679b4n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "golang-nuts" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to golang-nuts...@googlegroups.com. >>>>> >>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/golang-nuts/0f12076e-f325-4583-ba85-857084aec83dn%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/golang-nuts/0f12076e-f325-4583-ba85-857084aec83dn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/70bb1d90-14d0-4a58-8500-fce56d024991n%40googlegroups.com.