diff --git a/compare.go b/compare.go index ef3c6fd..d5892f9 100644 --- a/compare.go +++ b/compare.go @@ -1,9 +1,9 @@ package main import ( -"log" + "log" ) func main() { - log.Print("comp") + log.Print("comp") } diff --git a/country.go b/country.go index 590178b..154e4d0 100644 --- a/country.go +++ b/country.go @@ -1,10 +1,10 @@ package main import ( -"log" -"os" + "log" + "os" ) func main() { - log.Print(os.Args[1]) + log.Print(os.Args[1]) } diff --git a/json2csv.go b/json2csv.go index ef3c6fd..d5892f9 100644 --- a/json2csv.go +++ b/json2csv.go @@ -1,9 +1,9 @@ package main import ( -"log" + "log" ) func main() { - log.Print("comp") + log.Print("comp") } diff --git a/latency.go b/latency.go index ef3c6fd..4889630 100644 --- a/latency.go +++ b/latency.go @@ -1,9 +1,82 @@ package main import ( -"log" + "encoding/json" + "flag" + "io/ioutil" + "log" + "strings" ) -func main() { - log.Print("comp") +type openPort struct { + IP string `json:"ip"` + Timestamp string `json:"timestamp"` + Ports []portInfo `json:"ports"` +} + +type portInfo struct { + Port int `json:"port"` + Proto string `json:"proto"` + Status string `json:"status"` + Reason string `json:"reason"` + TTL int `json:"ttl"` +} + +type hostLatency struct { + IP string `json:"ip"` + TTL int `json:"ttl"` +} + +var flagIn = flag.String("in", "", "comma-seperated list of input files") +var flagOut = flag.String("out", "latency.json", "output file") + +func main() { + flag.Parse() + in := strings.Split(*flagIn, ",") + out := *flagOut + + data := make([]openPort, 0) + + for _, fin := range in { + log.Println("Reading file " + fin) + raw, err := ioutil.ReadFile(fin) + if err != nil { + panic(err) + } + + log.Println("Fixing file " + fin) + raw = raw[:len(raw)-3] + raw[len(raw)-1] = ']' + + log.Println("Parsing file " + fin) + fdata := make([]openPort, 0) + err = json.Unmarshal(raw, &fdata) + if err != nil { + panic(err) + } + + log.Println("File " + fin + " read successfully") + data = append(data, fdata...) + } + + log.Println("Reducing data to IP and latency") + odata := make([]hostLatency, 0) + for _, o := range data { + h := hostLatency{ + IP: o.IP, + TTL: o.Ports[0].TTL, + } + odata = append(odata, h) + } + + log.Println("Encoding json") + raw, err := json.Marshal(odata) + if err != nil { + panic(err) + } + log.Println("Writing to file " + out) + err = ioutil.WriteFile(out, raw, 0) + if err != nil { + panic(err) + } }