2020-06-19 13:31:20 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
2021-04-23 16:08:42 +00:00
|
|
|
"github.com/maride/afl-transmit/logistic"
|
2020-06-19 13:31:20 +00:00
|
|
|
"github.com/maride/afl-transmit/net"
|
2021-04-20 08:28:03 +00:00
|
|
|
"github.com/maride/afl-transmit/stats"
|
2020-06-19 13:31:20 +00:00
|
|
|
"github.com/maride/afl-transmit/watchdog"
|
|
|
|
"log"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
outputDirectory string
|
2021-04-20 08:36:04 +00:00
|
|
|
printStats bool
|
2020-06-19 13:31:20 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
// Register flags
|
|
|
|
watchdog.RegisterWatchdogFlags()
|
|
|
|
net.RegisterSenderFlags()
|
|
|
|
net.RegisterListenFlags()
|
2021-04-23 14:17:44 +00:00
|
|
|
net.RegisterCryptFlags()
|
2021-04-23 16:08:42 +00:00
|
|
|
logistic.RegisterPackerFlags()
|
2020-06-19 13:31:20 +00:00
|
|
|
RegisterGlobalFlags()
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
// Check if we have the only required argument present - outputDirectory
|
|
|
|
if outputDirectory == "" {
|
|
|
|
fmt.Println("Please specify fuzzer-directory. See help (--help) for details.")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read peers file
|
|
|
|
net.ReadPeers()
|
|
|
|
|
2021-04-23 14:17:44 +00:00
|
|
|
// Initialize crypto if desired
|
|
|
|
cryptErr := net.InitCrypt()
|
|
|
|
if cryptErr != nil {
|
|
|
|
fmt.Printf("Failed to initialize crypt function: %s", cryptErr)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2020-06-19 13:31:20 +00:00
|
|
|
// Start watchdog for local afl instances
|
|
|
|
go watchdog.WatchFuzzers(outputDirectory)
|
|
|
|
|
2021-04-20 08:28:03 +00:00
|
|
|
// Start stat printer
|
2021-04-20 08:36:04 +00:00
|
|
|
if printStats {
|
|
|
|
go stats.PrintStats()
|
|
|
|
}
|
2021-04-20 08:28:03 +00:00
|
|
|
|
2020-06-19 13:31:20 +00:00
|
|
|
// Listen for incoming connections
|
|
|
|
listenErr := net.Listen(outputDirectory)
|
|
|
|
if listenErr != nil {
|
|
|
|
log.Println(listenErr)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Registers flags which are required by multiple modules and need to be handled here
|
|
|
|
func RegisterGlobalFlags() {
|
|
|
|
flag.StringVar(&outputDirectory, "fuzzer-directory", "", "The output directory of the fuzzer(s)")
|
2021-04-20 08:36:04 +00:00
|
|
|
flag.BoolVar(&printStats, "print-stats", true, "Print traffic statistics every few seconds")
|
2020-06-19 13:31:20 +00:00
|
|
|
}
|