This library aims to provide to golang developers an idiomatic interface for zmap version 2.1.1.
Inspired by the nmap library.
Zmap is a network tool for scanning the entire Internet (or large samples). ZMap is capable of scanning the entire Internet in around 45 minutes on a gigabit network connection, reaching ~98% theoretical line speed.
- All of
zmap 2.1.1native options. - Cancellable contexts support
- Validation for options
- Async Scanner
- Blocking Scanner
- More examples
go get github.com/justmumu/zmapgo
package main import ( "context" "fmt" "log" "os" "strings" "time" "github.com/justmumu/zmapgo" ) func main() { // Create Context ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) defer cancel() // Create Blocking Scanner with InitOptions scanner, err := zmapgo.NewBlockingScanner( zmapgo.WithContext(ctx), ) if err != nil { log.Fatalf("unable to create zmap scanner: %v", err) } // Add Options to scanner // Equivalent to `zmap ---target-port 80 1.1.1.0/30 --rate 10000 --output-fields saddr,sport --log-file ./log-file.txt --output-file ./output-file.txt` err = scanner.AddOptions( zmapgo.WithTargets("1.1.1.0/30"), zmapgo.WithTargetPort("80"), zmapgo.WithRate("10000"), zmapgo.WithOutputFields([]string{"saddr", "sport"}), zmapgo.WithLogFile("./log-file.txt"), zmapgo.WithOutputFile("./output-file.txt"), ) if err != nil { log.Fatalf("unable to add options: %v", err) } // Run the scan results, _, _, _, _, fatals, err := scanner.RunBlocking() if err != nil { log.Fatalf("unable to run zmap scan: %v", err) } // It's always good to check for fatals. if len(fatals) > 0 { // So zmap did not work as expected and waiting for results would be pointless. for _, fatal := range fatals { log.Printf("[FATAL]: %s", fatal.Message) } os.Exit(1) } // Print All Results for _, result := range results { fmt.Printf("%s\n", strings.Repeat("-", 20)) for key, value := range result { fmt.Printf("%s: %s\n", key, value) } }
The program output:
-------------------- saddr: 1.1.1.3 sport: 80 -------------------- saddr: 1.1.1.1 sport: 80 -------------------- saddr: 1.1.1.0 sport: 80 -------------------- saddr: 1.1.1.2 sport: 80
This project is under MIT License