1
Hey there!
The windows-utility "tracert" enables you to trace how you connect to a given address. It outputs the IPs you connect to during this connection-attempt.
Added a geolocation-parser that will try to resolve a given IP to a location.
Notes:
1. This application executes "tracert -d <ip/hostname>" on your machine by creating a new instance of cmd.
2. If "Get geolocation of IPs" is checked, this application will connect to "https://www.iplocation.net/", submit the currently processed ip and parse the html-response
Here's the code of the geolocation-parser:
DownloadCode:public const string REGEX_PATTERN = @"<td width='80'>(?<ip>(.*?))<\/td><td>(?<country>(.*?)) <img(.*?)<\/td><td>(?<region>(.*?))<\/td><td>(?<city>(.*?))<\/td>"; public const string GEOLOCATION_PROVIDER = "https://www.iplocation.net/"; private string[] GetGeolocation(string ip) { string[] returnVal = new string[3]; if (ip.StartsWith("192.168")) { returnVal[0] = returnVal[1] = returnVal[2] = "<lan>"; return returnVal; } InvokePostLogLine("geoloc", string.Format("Querying info of {0}", ip)); using (WebClient client = new WebClient()) { client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); try { NameValueCollection coll = new NameValueCollection(); coll.Add("query", ip); coll.Add("submit", "Query"); byte[] data = client.UploadValues(GEOLOCATION_PROVIDER, "POST", coll); string html = Encoding.ASCII.GetString(data); string[] info = ExtractData(html, "EurekAPI"); if (info[0] == "-") info = ExtractData(html, "DB-IP"); returnVal[0] = info[0]; returnVal[1] = info[1]; returnVal[2] = info[2]; } catch (Exception ex) { returnVal[0] = returnVal[1] = returnVal[2] = "<error>"; } } return returnVal; } private string[] ExtractData(string html, string provider) { string[] returnVal = new string[3]; string[] parts = html.Split(new string[] { provider }, StringSplitOptions.None); parts = parts[1].Split(new string[] { "Continent" }, StringSplitOptions.None); Match match = Regex.Match(parts[0], REGEX_PATTERN); if (!match.Success) { returnVal[0] = returnVal[1] = returnVal[2] = "<parsing failed>"; } else { returnVal[0] = match.Groups["city"].Value; returnVal[1] = match.Groups["region"].Value; returnVal[2] = match.Groups["country"].Value; } return returnVal; }
Credits
I didn't make any piece of this program!
Bookmarks