Ответ 1
Я уже указал это в комментарии, но поставил это как ответ, так как вы, возможно, его не замечали, и никаких ответов не ожидается.
Вместо использования 255.255.255.255
для широковещания используйте свой локальный IP-адрес подсети (например, 192.168.0.255 в подсети 192.168.0.1/24). Адрес 255.255.255.255
не будет перенаправлен маршрутизатором (это актуально, если на сайтах ваших клиентов есть несколько подсетей), тогда как перенаправленная трансляция может быть перенаправлена (если такая настройка). Раньше это было так, что маршрутизаторы отправляли направленные трансляции по умолчанию, но это было изменено в RFC2644, поэтому не делайте ставку на ферму на нем;.)
Здесь приведен пример расчета направленного широковещательного адреса IPV4 для каждого адаптера:
public static void DisplayDirectedBroadcastAddresses()
{
foreach (var iface in NetworkInterface.GetAllNetworkInterfaces()
.Where(c => c.NetworkInterfaceType != NetworkInterfaceType.Loopback))
{
Console.WriteLine(iface.Description);
foreach (var ucastInfo in iface.GetIPProperties().UnicastAddresses
.Where(c => !c.Address.IsIPv6LinkLocal))
{
Console.WriteLine("\tIP : {0}", ucastInfo.Address);
Console.WriteLine("\tSubnet : {0}", ucastInfo.IPv4Mask);
byte[] ipAdressBytes = ucastInfo.Address.GetAddressBytes();
byte[] subnetMaskBytes = ucastInfo.IPv4Mask.GetAddressBytes();
if (ipAdressBytes.Length != subnetMaskBytes.Length) continue;
var broadcast = new byte[ipAdressBytes.Length];
for (int i = 0; i < broadcast.Length; i++)
{
broadcast[i] = (byte)(ipAdressBytes[i] | ~(subnetMaskBytes[i]));
}
Console.WriteLine("\tBroadcast: {0}", new IPAddress(broadcast).ToString());
}
}
}