¿Cómo puedo determinar el país en el que se origina una dirección IP específica al usar C#. Necesito usar esto para verificar si las conexiones se originan en un país específico.Cómo determinar si una dirección IP pertenece a un país
Respuesta
Puede utilizar estos datos SQL en su proyecto para determinar que: IP address geolocation SQL database. Descargue esos datos e impórtelos en su base de datos para ejecutarlos localmente.
O puede utilizar su API gratuita que devuelve XML que contiene el código del país y el nombre del país. Se podría hacer una solicitud a la siguiente dirección URL con la dirección IP que quería comprobar, como se ve en este ejemplo:
http://ipinfodb.com/ip_query_country.php?ip=74.125.45.100
Devuelve:
<Response>
<Ip>74.125.45.100</Ip>
<Status>OK</Status>
<CountryCode>US</CountryCode>
<CountryName>United States</CountryName>
</Response>
Tenga en cuenta que las asignaciones de IP cambian ocasionalmente. Así que recuerde actualizar su base de datos ocasionalmente. (La frecuencia de las actualizaciones que necesita depende de lo que esté haciendo; para las estadísticas simples, puede decidir si las actualizaciones anuales son correctas). – user9876
Esto ahora ha cambiado: debes registrarte ahora (gratis) para poder usar su API. Vea aquí: http://ipinfodb.com/ip_location_api.php –
Si no desea use una API como quizás hostip.info, luego sugeriría suscribirse a maxmind y ejecutar localmente una base de datos de búsqueda de host.
puedes pedirle a Google que lo haga por ti.
También hay servicios que usted puede pagar para usted desee:
Aquí es un país libre IP Address to Country database.
ip2cc - Busque país y región de Rusia por dirección IP Módulo Python con secuencia de comandos para crear una base de datos a partir de datos oficiales actualizados.
Este Python
cargas de servicio público (con la frecuencia que se quiere) hasta al día la información de Regional Internet Registry sitios (arin
, ripencc
, apnic
, lacnic
, afrinic
), como shown in the source:
url_template = 'ftp://ftp.ripe.net/pub/stats/%s/delegated-%s-latest'
sources = {}
for name in ('arin', 'ripencc', 'apnic', 'lacnic', 'afrinic'):
sources[name] = url_template % (name, name)
vez que los datos se cargado, las consultas se pueden responder fuera de línea y muy rápidamente. Puede modificarse fácilmente para responder directamente a la pregunta original, o utilizarse desde la línea de comando para devolver el país al que pertenece IP address
.
Otro de los servicios que usted podría utilizar es la mía, http://ipinfo.io, que devuelve la ubicación, organización y otra información:
$ curl ipinfo.io/8.8.8.8
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"loc": "37.385999999999996,-122.0838",
"org": "AS15169 Google Inc.",
"city": "Mountain View",
"region": "California",
"country": "US",
"phone": 650
}
Ver http://ipinfo.io/developers para más información.
para obtener json a mano: "http://ipinfo.io/8.8.8.8/json" –
Solo una simple llamada API p. Ej.https://ipapi.co/8.8.8.8/country/
de EE.UU.
He aquí un ejemplo de C# con working fiddle:
using System;
using System.Net;
using System.IO;
using System.Text;
public class Program
{
public static void Main()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://ipapi.co/8.8.8.8/country/");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var reader = new System.IO.StreamReader(response.GetResponseStream(), ASCIIEncoding.ASCII);
Console.WriteLine(reader.ReadToEnd());
}
}
es como se hace esto con https://ipdata.co
//Common testing requirement. If you are consuming an API in a sandbox/test region, uncomment this line of code ONLY for non production uses.
//System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
//Be sure to run "Install-Package Microsoft.Net.Http" from your nuget command line.
using System;
using System.Net.Http;
var baseAddress = new Uri("https://api.ipdata.co/78.8.53.5");
using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("accept", "application/json");
using(var response = await httpClient.GetAsync("undefined"))
{
string responseData = await response.Content.ReadAsStringAsync();
}
}
Via Curl
Aquícurl https://api.ipdata.co/78.8.53.5
{
"ip": "78.8.53.5",
"city": "G\u0142og\u00f3w",
"region": "Lower Silesia",
"region_code": "DS",
"country_name": "Poland",
"country_code": "PL",
"continent_name": "Europe",
"continent_code": "EU",
"latitude": 51.6461,
"longitude": 16.1678,
"asn": "AS12741",
"organisation": "Netia SA",
"postal": "67-200",
"currency": "PLN",
"currency_symbol": "z\u0142",
"calling_code": "48",
"flag": "https://ipdata.co/flags/pl.png",
"emoji_flag": "\ud83c\uddf5\ud83c\uddf1",
"time_zone": "Europe/Warsaw",
"is_eu": true,
"suspicious_factors": {
"is_tor": false
}
}⏎
Para la base de datos fuera de línea, usted puede conseguir la libre IP2Location LITE DB1
para crear la tabla
CREATE DATABASE ip2location
GO
USE ip2location
GO
CREATE TABLE [ip2location].[dbo].[ip2location_db1](
[ip_from] float NOT NULL,
[ip_to] float NOT NULL,
[country_code] nvarchar(2) NOT NULL,
[country_name] nvarchar(64) NOT NULL,
) ON [PRIMARY]
GO
CREATE INDEX [ip_from] ON [ip2location].[dbo].[ip2location_db1]([ip_from]) ON [PRIMARY]
GO
CREATE INDEX [ip_to] ON [ip2location].[dbo].[ip2location_db1]([ip_to]) ON [PRIMARY]
GO
Para importar los datos
BULK INSERT [ip2location].[dbo].[ip2location_db1]
FROM 'C:\[path to your CSV file]\IP2LOCATION-LITE-DB1.CSV'
WITH
(
FORMATFILE = 'C:\[path to your DB1.FMT file]\DB1.FMT'
)
GO
Para el archivo FMT
10.0
5
1 SQLCHAR 0 1 "\"" 0 first_double_quote Latin1_General_CI_AI
2 SQLCHAR 0 20 "\",\"" 1 ip_from ""
3 SQLCHAR 0 20 "\",\"" 2 ip_to ""
4 SQLCHAR 0 2 "\",\"" 3 country_code Latin1_General_CI_AI
5 SQLCHAR 0 64 "\"\r\n" 4 country_name Latin1_General_CI_AI
La primera línea del código FMT indica la versión de bcp. Por favor, cambie la versión de acuerdo con su MS-SQL instalado.
SQL Server 2016 12,0
SQL Server 2014 12,0
SQL Server 2012 11,0
SQL Server 2008/2008 R2 10,0
SQL Server 2005 9,0
SQL Server 2000 8.0
SQL Server 7.0 7.0
SQL Server 6.5 6.5
código C# para consultar MSSQL
using System.Data.SqlClient;
using System.Numerics;
using System.Net;
using System.Text;
public class Form1 {
private void Form1_Load(object sender, System.EventArgs e) {
string ip = "8.8.8.8";
this.IP2Location(ip);
}
private void IP2Location(string myip) {
IPAddress address = null;
if (IPAddress.TryParse(myip, address)) {
byte[] addrBytes = address.GetAddressBytes();
this.LittleEndian(addrBytes);
UInt32 ipno = 0;
ipno = BitConverter.ToUInt32(addrBytes, 0);
string sql = "SELECT TOP 1 * FROM ip2location_db1 WHERE ip_to >= \'" + ipno.ToString() + "\'";
object conn = new SqlConnection("Server=yourserver;Database=yourdatabase;User Id=youruserid;Password=yourpassword;");
object comm = new SqlCommand(sql, conn);
SqlDataReader reader;
comm.Connection.Open();
reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
int x = 0;
object sb = new StringBuilder(250);
if (reader.HasRows) {
if (reader.Read()) {
for (x = 0; (x <= (reader.FieldCount() - 1)); x++) {
sb.Append((reader.GetName(x) + (": " + (reader.GetValue(x) + "\r\n"))));
}
}
}
reader.Close();
MsgBox(sb.ToString());
}
}
private void LittleEndian(ref byte[] byteArr) {
if (BitConverter.IsLittleEndian) {
List<byte> byteList = new List<byte>(byteArr);
byteList.Reverse();
byteArr = byteList.ToArray();
}
}
}
- 1. ¿Cómo puedo determinar a qué compañía pertenece una dirección IP?
- 2. cómo determinar si una dirección IP es privada?
- 3. País de identificación por dirección IP
- 4. cómo redirigir el dominio según el país dirección de IP
- 5. Cómo determinar la dirección IP de un sistema Solaris
- 6. Convirtiendo un int a una dirección IP
- 7. ¿Cómo determinar si la dirección IP entrante proviene de un operador de telefonía móvil?
- 8. Obtener el país de la dirección IP con PHP
- 9. IP al país - IPv6
- 10. C# - Determinar si un rango de direcciones IP contiene una dirección particular
- 11. ¿Existe una heurística para determinar si un método o campo pertenece a una clase?
- 12. ¿Detecta la dirección IP wifi en Android?
- 13. ¿Existe una función que pueda tomar una dirección IP como cadena y decirme si es una dirección IP no enrutable?
- 14. ¿Cómo obtener el país según una determinada IP?
- 15. Twisted: cómo vincular un servidor a una dirección IP especificada?
- 16. Geocodificar una dirección IP?
- 17. expressjs enlazar a una dirección IP específica
- 18. Verificando si una variable POST [] es una dirección IP?
- 19. Cualquier API fiable disponible para determinar la ciudad y el país del usuario desde la dirección IP
- 20. Enlazar IIS Express a una dirección IP
- 21. ¿Cómo determinar si una cadena es una dirección IPv4 o IPv6 válida en C#?
- 22. Identificación de si una dirección pertenece a heap o stack o registra
- 23. Obtener la ubicación del país de una dirección IP con PHP nativo
- 24. ¿Cómo puedo probar una conexión a un servidor con C# dada la dirección IP del servidor?
- 25. Comprueba si un objeto pertenece a una clase en Java
- 26. ¿Cómo compararías la dirección IP?
- 27. Dirección IP en un MaskedTextBox?
- 28. ¿Alguien puede suplantar una dirección IP a cualquier número?
- 29. Cómo bloquear una dirección IP usando web.xml?
- 30. Cómo validar una dirección IP en C#
necesito que los datos estén disponibles sin conexión, ya que será utilizado para las estadísticas. Debido a esto, estaré usando la opción sql – RC1140
. También podría realizar búsquedas masivas con https://ipdata.co – Jonathan