81 lines
2.9 KiB
C#
81 lines
2.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Net;
|
|
using Yaulw.Registry;
|
|
|
|
namespace TCMPortMapper.Helpers
|
|
{
|
|
public static class Utility
|
|
{
|
|
/// <summary>
|
|
/// This function uses a Web request to find the external IP Address your machine is using
|
|
/// </summary>
|
|
/// <param name="pTimeOutMiliSeconds">Number of miliseconds to wait for a response</param>
|
|
/// <param name="forceMultipleChecks">Tells if we should attempt to get the external ip in multiple tries</param>
|
|
/// <returns>External facing IP address</returns>
|
|
public static string GetExternalIP(int pTimeOutMiliSeconds, bool forceMultipleChecks)
|
|
{
|
|
var externalIP = Yaulw.Net.IPHostHelper.GetExternalIP(forceMultipleChecks);
|
|
if (externalIP == null || externalIP == IPAddress.None)
|
|
return string.Empty;
|
|
|
|
return externalIP.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// This function uses a Web request to find the external IP Address your machine is using
|
|
/// </summary>
|
|
/// <param name="pTimeOutMiliSeconds">Number of miliseconds to wait for a response</param>
|
|
/// <returns>External facing IP address</returns>
|
|
public static string GetExternalIP(int pTimeOutMiliSeconds)
|
|
{
|
|
string whatIsMyIp = "http://automation.whatismyip.com/n09230945.asp";
|
|
WebClient wc = new WebClient();
|
|
UTF8Encoding utf8 = new UTF8Encoding();
|
|
try
|
|
{
|
|
string ipaddr = null;
|
|
bool done = false;
|
|
|
|
wc.DownloadDataCompleted += new
|
|
DownloadDataCompletedEventHandler((object sender,
|
|
DownloadDataCompletedEventArgs e) =>
|
|
{
|
|
ipaddr = utf8.GetString(e.Result);
|
|
done = true;
|
|
});
|
|
|
|
wc.DownloadDataAsync(new Uri(whatIsMyIp));
|
|
System.DateTime startTime = System.DateTime.Now;
|
|
while (!done)
|
|
{
|
|
System.TimeSpan sp = System.DateTime.Now - startTime;
|
|
|
|
// We should get a response in less than timeout.
|
|
// If not, we cancel all and return the internal IP Address
|
|
if (sp.TotalMilliseconds > pTimeOutMiliSeconds)
|
|
{
|
|
done = true;
|
|
wc.CancelAsync();
|
|
}
|
|
}
|
|
return ipaddr;
|
|
}
|
|
catch
|
|
{
|
|
return null;
|
|
}
|
|
finally
|
|
{
|
|
if (wc != null)
|
|
{
|
|
wc.Dispose();
|
|
wc = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|