Come tutti sanno, recuperare il proprio IP quando si è direttamente connessi in rete, senza l'utilizzo di un router, è semplice :
IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
string myIP = addressList[0].ToString();
Il discorso cambia quando si è connessi in rete tramite router poichè ci viene assegnato un IP interno e solo il router ha un IP pubblico.
Come fare in questo caso??
using System.Text.RegularExpressions;
using System.Net;
public IPAddress GetIp()
{
string myIp = "http://whatismyip.com";
string ipRegx = @"(?<=<TITLE>.*)\d*\.\d*\.\d*\.\d*(?=</TITLE>)";
WebClient webClient = new WebClient();
UTF8Encoding utf8 = new UTF8Encoding();
string requestHtml = "";
try
{
requestHtml = utf8.GetString(webClient.DownloadData(myIp));
}
catch (WebException e)
{
Console.Write(e.ToString());
}
Regex regx = new Regex(ipRegx);
Match res = regx.Match(requestHtml);
IPAddress publicIp = null;
if (res.Success)
{
publicIp = IPAddress.Parse(res.Value);
}
return publicIp;
}
Credo che il codice sia facile da capire...nulla di complicato!
Enjoy!