diff --git a/IPInfo.go b/IPInfo.go index e037f4f..0be80f6 100644 --- a/IPInfo.go +++ b/IPInfo.go @@ -5,6 +5,7 @@ import ( "fmt" "io/ioutil" "net/http" + "sort" "strings" ) @@ -30,7 +31,6 @@ func getIPInfo(ipaddress string) IPAddressInfo { apiEndpoint := "http://ip-api.com/json/" + ipaddress resp, _ := http.Get(apiEndpoint) body, _ := ioutil.ReadAll(resp.Body) - // fmt.Print(string(body)) infoString := string(body) var info IPAddressInfo err := json.Unmarshal([]byte(infoString), &info) @@ -40,12 +40,29 @@ func getIPInfo(ipaddress string) IPAddressInfo { return info } -func printIPInfo(input string) { +func getBGPPrefixes(as string) { + apiEndpoint := "https://api.hackertarget.com/aslookup/?q=" + as + resp, _ := http.Get(apiEndpoint) + body, _ := ioutil.ReadAll(resp.Body) + prefixesString := string(body) + var prefixes = strings.Split(prefixesString, "\n")[1:] + sort.Strings(prefixes) + for i := 0; i < len(prefixes); i++ { + fmt.Println(prefixes[i]) + } +} + +func printIPInfo(input string, wantPrefixes bool) { var IPInfo IPAddressInfo = getIPInfo(input) var location string = IPInfo.Country + "/" + IPInfo.RegionName + "/" + IPInfo.City + var bgpAS string = strings.Fields(IPInfo.AS)[0] fmt.Println("IP Address: ", IPInfo.IPAddress) fmt.Println("Location: ", location) fmt.Println("Timezone: ", IPInfo.Timezone) fmt.Println("ISP: ", IPInfo.ISP) - fmt.Println("BGP AS: ", strings.Fields(IPInfo.AS)[0]) + fmt.Println("BGP AS: ", bgpAS) + if wantPrefixes == true { + fmt.Println("\nBGP Prefixes:") + getBGPPrefixes(bgpAS) + } } diff --git a/Main.go b/Main.go index 0b1aed4..7dd5d3d 100644 --- a/Main.go +++ b/Main.go @@ -9,17 +9,22 @@ func main() { printHeader() var input string + var wantPrefixes bool localIPAddress := getLocalIP() flag.StringVar(&input, "i", localIPAddress, "Specify IP address or domain name.") + flag.BoolVar(&wantPrefixes, "p", false, "Enable printing of advertised BGP prefixes.") flag.Parse() var isIPCorrect bool = checkIPSyntax(input) if isIPCorrect == true { - printIPInfo(input) + printIPInfo(input, wantPrefixes) } else { - // fmt.Println(ipaddress, "is not a valid IP address.") - fmt.Println("Domain Name: ", input) ipaddress := resolveDNSHostname(input) - printIPInfo(ipaddress) + if checkIPSyntax(ipaddress) == true { + fmt.Println("Domain Name: ", input) + printIPInfo(ipaddress, wantPrefixes) + } else { + fmt.Println("Invalid query.") + } } }