domingo, 13 de marzo de 2016

MyIP (Programa para saber tu IP)

 Hola, un poco abandonado tengo el blog, hasta creo que le están saliendo tela de arañas...
 Este es el primer post de una serie de post que ya tengo casi escritos sobre programación.
 Acá va un artículo que escribí el año pasado y nunca publiqué, así que, disfruten... y si no lo disfrutan, me importa poco y nada.
Empecemos...
 Con el reciente cierre de GameSpy surgieron muchos inconvenientes a la hora de armar partidas on line de fórmula uno.
 El problema principal es que ya no pueden verse las partidas armadas, ese inconveniente planeo solucionarlo haciendo una web que muestre las partidas, pero por ahora no, en un futuro medio-lejano que quizás nunca llegue.
 Para armar partidas hay que usar algún sistema de redes como Hamachi, o en su defecto, quien arme una partida, debe pasarle la IP (Internet Protocol) de su conexión, así el que quiera unirse pueda hacerlo, pero surge aquí el inconveniente de los novatos: Cuál es mi IP?
 Cualquier usuario avanzado no duda mucho tiempo y enseguida lo obtiene yendo al panel de control de Windows o accediendo a múltiples páginas que se dedican a decirte cuál es tu IP.
Pero los usuarios novatos ni siquiera saben cuál es su IP, ni que es una IP, entonces decidí hacer este programita super simple en C# que les diga cuál es su IP en ese momento y tomo como base distintos métodos que he aplicado en  sistemas grandes que hice y que necesitaban saber la IP.

 Dividamos en 2 el trámite, por un lado está la IP Privada y por el otro, la IP pública. Para la IP privada vamos a usar la librería System.Net. Si el usuario usa un router, el métodos para saber la IP por medio de System.Net no va a servir, por qué? porque va a dar solamente la IP que asigna el router, que no es justamente la IP que le confiere el ISP al usuario que se conecta.

El Sistema está hecho en WPF (El que quiera lo puede hacer para Windows Forms), uso el compilador SharpDevelop.

Vayamos al grano:
La dll se llama MyIPFunction y posee la clase con el mismo nombre además de los siguientes métodos principales, que les transcribo a continuación con la explicaciónd e cada uno:

// Devuelve la IP Pública, la que requerimos para Jugar, para devolver la IP, uso la página //web "http://checkip.dyndns.org/"
LA IP PÚBLICA
private string sIPPublic(){
string s;
try
{
WebClient client = new WebClient();
// Add a user agent header in case the requested URI contains a query;
client.Headers.Add("user-agent""Mozilla/4.0 (compatible;"+
"MSIE 6.0; Windows NT 5.2; .NET CLR1.0.3705;)");

string baseurl = "http://checkip.dyndns.org/";

Stream data = client.OpenRead(baseurl);
StreamReader reader = new StreamReader(data);
s = reader.ReadToEnd();
data.Close();
reader.Close();

s=s.Substring(76);
s=s.Replace("</body></html>""").ToString();

}
catch (Exception)
{ s="0.0.0.0"; }
return s;
}

LA IP PRIVADA
// Devuelve la IP Privada , Listo todas las IP asignadas por el Router y verifico cuál es la mía
private string sIPPrivate()
{
sListIP=new List<string>();
NetworkInterface[] ni = NetworkInterface.GetAllNetworkInterfaces();// Listado de IP

//Después, las recorremos y las tratamos.
foreach(NetworkInterface n in ni)// No uso foreach mucho, pero acá sí
sListIP.Add(n.GetIPProperties().UnicastAddresses[0].Address.ToString());

IPHostEntry host;
string slocalIP = "";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
 {
 if (ip.AddressFamily.ToString() == "InterNetwork")
 {
 slocalIP = ip.ToString();
 }
 }
 return slocalIP;
}
 
DEVOLVIENDO LAS IP
Bien, ahora las IP las devuelvo con las siguientes funciones, que no debería tener necesidad de explicarlas, si necesitás que las explique, volvé a la escuela.

public string sGetIPPublic
{
get{return sIPPublic();}
}

public string sGetIPPrivate
{
get{return sIPPrivate();}
}

SI HAY ROUTER
Y por último, para saber si hay un Router o no conectado, basta con simplemente comparar las IP, la pública y la privada, si éstas son distintas, si son distintas, hay router, si son iguales, simplemente no hay router.
public bool bIsRouter(string ip1, string ip2)
{
return !ip1.Equals(ip2);
}

ENLACES
Que tengan buena vida y hasta el próximo capítulo, les dejo el enlace del código y su debug en mi dropbox.
https://www.dropbox.com/s/vhrk6fb1p07un8c/MyIP.rar?dl=0

No hay comentarios:

Publicar un comentario

Escriba su comentario...