Вопрос не очень точный и старый, но я все равно его попробую, потому что мне было интересно, что я могу сделать с такими проблемами, так как я пишу приложение, которое манипулирует IP-адресами на ПК для запуска приложений, которые зависят от конкретных адресов.
Если у кого-то еще есть тот же вопрос, я предлагаю сначала попытаться избежать любых конфликтов.
Дело в том, что установка IP-адреса является административной задачей и должна выполняться только «от руки» людьми, которые знают, что они делают. Если вы устанавливаете IP-адреса с помощью кода, ваша задача как разработчика состоит в том, чтобы проверить, является ли адрес, который нужно установить, действительным и еще не известным в сети.
Первый: запрос DNS, если этот адрес принадлежит хосту, отличному от того, на котором работает приложение
Второе: если DNS не знает об адресе, отправьте запросы Ping на адрес.
См .: Проверка локального IP-адреса
public static bool IsLocalIpAddress(string host)
{
try
{
// get host IP addresses
IPAddress[] hostIPs = Dns.GetHostAddresses(host);
// get local IP addresses
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
// test if any host IP equals to any local IP or to localhost
foreach (IPAddress hostIP in hostIPs)
{
// is localhost
if (IPAddress.IsLoopback(hostIP)) return true;
// is local address
foreach (IPAddress localIP in localIPs)
{
if (hostIP.Equals(localIP)) return true;
}
}
}
catch { }
return false;
}
Если вы хотите «прослушивать» конфликты, WMI и EventLog - это путь. EventLog - это первое место, где возникают такие конфликты, и его легко отслеживать.