Feedback

C# - GeoLocation einer IP Adresse ermitteln

Veröffentlicht von am 24.07.2010
(0 Bewertungen)
Der Dienst ipinfodb.com bietet eine kostenlose Lokalisierung der übergebenen IP Adresse an. Dieser Snippet zeigt, wie die Informationen mit .NET abgerufen werden können. Exceptionhandling ist nicht implementiert.
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

VB.NET 2017/2015/2013 Komplett

Ziel des Seminars ist der flexible Umgang mit VB.NET, wie z.B. die damit verbundene eigenständige Entwicklung von Programmen oder das Verwenden von Datenbanken.

using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Xml.Linq;
 
namespace IpLoc
{
    internal class IpInfo
    {
        public IpInformation GetIpInformation(string ip)
        {
            WebClient webClient = new WebClient();
            webClient.Encoding = Encoding.UTF8;
            XDocument xDocument = XDocument.Parse(webClient.DownloadString(string.Format("http://ipinfodb.com/ip_query.php?ip={0}&timezone=false", ip)));
            IpInformation ipInformation = new IpInformation();
 
            ipInformation.Ip = xDocument.Elements().Select(a => a.Element("Ip").Value).FirstOrDefault();
            ipInformation.CountryCode = xDocument.Elements().Select(a => a.Element("CountryCode").Value).FirstOrDefault();
            ipInformation.CountryName = HttpUtility.HtmlDecode(xDocument.Elements().Select(a => a.Element("CountryName").Value).FirstOrDefault());
            ipInformation.RegionCode = xDocument.Elements().Select(a => a.Element("RegionCode").Value).FirstOrDefault();
            ipInformation.RegionName = HttpUtility.HtmlDecode(xDocument.Elements().Select(a => a.Element("RegionName").Value).FirstOrDefault());
            ipInformation.City = HttpUtility.HtmlDecode(xDocument.Elements().Select(a => a.Element("City").Value).FirstOrDefault());
            ipInformation.ZipPostalCode = xDocument.Elements().Select(a => a.Element("ZipPostalCode").Value).FirstOrDefault();
            ipInformation.Latitude = xDocument.Elements().Select(a => a.Element("Latitude").Value).FirstOrDefault();
            ipInformation.Longitude = xDocument.Elements().Select(a => a.Element("Longitude").Value).FirstOrDefault();
 
            return ipInformation;
        }
 
        #region Nested type: IpInformation
 
        public class IpInformation
        {
            public string Ip { get; set; }
            public string CountryCode { get; set; }
            public string CountryName { get; set; }
            public string RegionCode { get; set; }
            public string RegionName { get; set; }
            public string City { get; set; }
            public string ZipPostalCode { get; set; }
            public string Latitude { get; set; }
            public string Longitude { get; set; }
        }
 
        #endregion
    }
}

Abgelegt unter GeoLocation, IP, IP Adresse, Longitude, Latitude.

3 Kommentare zum Snippet

ak34141 schrieb am 17.04.2012:
Eine kleine Anpassung an die neuen Gegebenheiten bei ipinfodb.com:


public class IpInformation
{
public string Ip { get; set; }
public string CountryCode { get; set; }
public string CountryName { get; set; }
public string RegionName { get; set; }
public string City { get; set; }
public string ZipPostalCode { get; set; }
public string Latitude { get; set; }
public string Longitude { get; set; }
public string TimeZone { get; set; }
}


public IpInformation GetIpInformation(string ip)
{
WebClient webClient = new WebClient();
webClient.Encoding = Encoding.UTF8;
string test = webClient.DownloadString(string.Format("http://api.ipinfodb.com/v3/ip-city/?key=<your_key>&ip={0}&format=xml", ip));

XDocument xDocument = XDocument.Parse(test);
IpInformation ipInformation = new IpInformation();
if (xDocument.Elements().Select(a => a.Element("statusCode").Value).FirstOrDefault() == "OK")
{
ipInformation.Ip = xDocument.Elements().Select(a => a.Element("ipAddress").Value).FirstOrDefault();
ipInformation.CountryCode = xDocument.Elements().Select(a => a.Element("countryCode").Value).FirstOrDefault();
ipInformation.CountryName = xDocument.Elements().Select(a => a.Element("countryName").Value).FirstOrDefault();
ipInformation.RegionName = xDocument.Elements().Select(a => a.Element("regionName").Value).FirstOrDefault();
ipInformation.City = xDocument.Elements().Select(a => a.Element("cityName").Value).FirstOrDefault();
ipInformation.ZipPostalCode = xDocument.Elements().Select(a => a.Element("zipCode").Value).FirstOrDefault();
ipInformation.Latitude = xDocument.Elements().Select(a => a.Element("latitude").Value).FirstOrDefault();
ipInformation.Longitude = xDocument.Elements().Select(a => a.Element("longitude").Value).FirstOrDefault();
ipInformation.TimeZone = xDocument.Elements().Select(a => a.Element("timeZone").Value).FirstOrDefault();
}
return ipInformation;
}
Thomas Roskop schrieb am 07.09.2015:
Es scheint, als habe der Anbieter seine API-Struktur verändert.
Hier ist die Dokumentation zu der API http://www.ipinfodb.com/ip_location_api.php
Neu ist:

- Es ist ein Schlüssel (API-Key) notwendig
- Es werden auch https-Anfragen unterstützt

Für die Benutzung soltle man sich das unterere Beispiel auf der Seite (ASP-Script) anschauen.

~Thomas
Jan Welker schrieb am 07.09.2015:
Danke für den Hinweis Thomas!
 

Logge dich ein, um hier zu kommentieren!