Quasar/Client/Core/Information/GeoIP.cs

66 lines
2.8 KiB
C#
Raw Normal View History

2014-07-08 12:58:53 +00:00
using System.IO;
using System.Net;
2015-02-24 11:04:07 +00:00
using System.Xml;
2014-07-08 12:58:53 +00:00
2015-02-24 18:21:01 +00:00
namespace xClient.Core.Information
2014-07-08 12:58:53 +00:00
{
internal class GeoIP
2014-07-08 12:58:53 +00:00
{
public string WanIp { get; private set; }
2014-07-08 12:58:53 +00:00
public string Country { get; private set; }
public string CountryCode { get; private set; }
public string Region { get; private set; }
public string City { get; private set; }
public GeoIP()
{
try
{
HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://freegeoip.net/xml/");
2014-07-08 12:58:53 +00:00
request.Proxy = null;
2014-12-02 20:10:27 +00:00
request.Timeout = 5000;
2014-07-08 12:58:53 +00:00
// Be sure that response, dataStream, and reader will be disposed of, even if an error is thrown.
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(dataStream))
{
string responseString = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
2014-07-08 12:58:53 +00:00
XmlDocument doc = new XmlDocument();
doc.LoadXml(responseString);
WanIp = doc.SelectSingleNode("Response//IP").InnerXml;
Country = (!string.IsNullOrEmpty(doc.SelectSingleNode("Response//CountryName").InnerXml))
? doc.SelectSingleNode("Response//CountryName").InnerXml
: "Unknown";
CountryCode =
(!string.IsNullOrEmpty(doc.SelectSingleNode("Response//CountryCode").InnerXml))
? doc.SelectSingleNode("Response//CountryCode").InnerXml
: "-";
Region = (!string.IsNullOrEmpty(doc.SelectSingleNode("Response//RegionName").InnerXml))
? doc.SelectSingleNode("Response//RegionName").InnerXml
: "Unknown";
City = (!string.IsNullOrEmpty(doc.SelectSingleNode("Response//City").InnerXml))
? doc.SelectSingleNode("Response//City").InnerXml
: "Unknown";
}
}
}
2014-07-08 12:58:53 +00:00
}
catch
{
WanIp = "-";
2014-07-08 12:58:53 +00:00
Country = "Unknown";
CountryCode = "-";
Region = "Unknown";
City = "Unknown";
}
}
}
2015-02-24 11:04:07 +00:00
}