Bwall имеет подходящее решение Отвечали в this thread.
foreach(NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
if(ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{
Console.WriteLine(ni.Name);
foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
Console.WriteLine(ip.Address.ToString());
}
}
}
}
Важно в этой части кода, что это только списки IP-адреса локальных сетей и беспроводных интерфейсов. Я сомневаюсь, что у вас будет серийное соединение, поэтому это не имеет значения. Альтернативно вы всегда можете редактировать инструкцию if.
// EDIT Если вы хотите, чтобы IP-адрес, который фактически соединяется с использованием Интернет Hosam Aly «ы solution
Это его код:
static IPAddress getInternetIPAddress()
{
try
{
IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName());
IPAddress gateway = IPAddress.Parse(getInternetGateway());
return findMatch(addresses, gateway);
}
catch (FormatException e) { return null; }
}
static string getInternetGateway()
{
using (Process tracert = new Process())
{
ProcessStartInfo startInfo = tracert.StartInfo;
startInfo.FileName = "tracert.exe";
startInfo.Arguments = "-h 1 www.example.com
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
tracert.Start();
using (StreamReader reader = tracert.StandardOutput)
{
string line = "";
for (int i = 0; i < 5; ++i)
line = reader.ReadLine();
line = line.Trim();
return line.Substring(line.LastIndexOf(' ') + 1);
}
}
}
static IPAddress findMatch(IPAddress[] addresses, IPAddress gateway)
{
byte[] gatewayBytes = gateway.GetAddressBytes();
foreach (IPAddress ip in addresses)
{
byte[] ipBytes = ip.GetAddressBytes();
if (ipBytes[0] == gatewayBytes[0]
&& ipBytes[1] == gatewayBytes[1]
&& ipBytes[2] == gatewayBytes[2])
{
return ip;
}
}
return null;
}
Что в основном делает, является проследите маршрут до www.example.com и обработайте правильный IP-адрес оттуда. Я тестировал код на своей машине и мне нужно было изменить итерации с 9 до 5, чтобы получить правильную линию из потока. Лучше перепроверьте его или вы можете исключить NullReferenceException, потому что line
будет null
.
Что вы подразумеваете под "active"? ПК может иметь много IP-адресов, а несколько могут считаться активными. –
Я хочу знать, какой IP - это тот, кто представляет ПК в локальной сети. –
Проверьте подключенную: System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable(); – Stefan