ver una saber por para nombre internet equipo direccion como comando c# networking udp mask broadcast

c# - por - saber el hostname de una ip linux



¿Cómo se obtiene la dirección de difusión del host del adaptador de red predeterminado? DO# (1)

Si obtiene la IP local y la subred, no debería ser un problema calcular.

Algo como esto tal vez?

using System; using System.Net.NetworkInformation; public class test { public static void Main() { NetworkInterface[] Interfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach(NetworkInterface Interface in Interfaces) { if(Interface.NetworkInterfaceType == NetworkInterfaceType.Loopback) continue; if (Interface.OperationalStatus != OperationalStatus.Up) continue; Console.WriteLine(Interface.Description); UnicastIPAddressInformationCollection UnicastIPInfoCol = Interface.GetIPProperties().UnicastAddresses; foreach(UnicastIPAddressInformation UnicatIPInfo in UnicastIPInfoCol) { Console.WriteLine("/tIP Address is {0}", UnicatIPInfo.Address); Console.WriteLine("/tSubnet Mask is {0}", UnicatIPInfo.IPv4Mask); } } } }

¿Cómo se calcula el rango de IP cuando se proporciona la dirección IP y la máscara de red? Debería darte el resto.

Digamos que quiero enviar un mensaje udp a cada host en mi subred (y luego recibir un mensaje udp de cualquier host en mi subred):

en este momento lo hago:

IPAddress broadcast = IPAddress.Parse("192.168.1.255");

pero, por supuesto, quiero que esto se haga de forma dinámica en el caso de que la subred sea diferente de 192.168.1 / 24. Lo he intentado con:

IPAddress broadcast = IPAddress.Broadcast;

pero IPAddress.Broadcast representa "255.255.255.255" que no se puede usar para enviar mensajes (arroja una excepción) ... así que:

¿Cómo obtengo la dirección de difusión del adaptador de red local (o máscara de red, por supuesto)?

ESTA ES LA SOLUCIÓN FINAL CON LA QUE ME SUBÍ

public IPAddress getBroadcastIP() { IPAddress maskIP = getHostMask(); IPAddress hostIP = getHostIP(); if (maskIP==null || hostIP == null) return null; byte[] complementedMaskBytes = new byte[4]; byte[] broadcastIPBytes = new byte[4]; for (int i = 0; i < 4; i++) { complementedMaskBytes[i] = (byte) ~ (maskIP.GetAddressBytes().ElementAt(i)); broadcastIPBytes[i] = (byte) ((hostIP.GetAddressBytes().ElementAt(i))|complementedMaskBytes[i]); } return new IPAddress(broadcastIPBytes); } private IPAddress getHostMask() { NetworkInterface[] Interfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface Interface in Interfaces) { IPAddress hostIP = getHostIP(); UnicastIPAddressInformationCollection UnicastIPInfoCol = Interface.GetIPProperties().UnicastAddresses; foreach (UnicastIPAddressInformation UnicatIPInfo in UnicastIPInfoCol) { if (UnicatIPInfo.Address.ToString() == hostIP.ToString()) { return UnicatIPInfo.IPv4Mask; } } } return null; } private IPAddress getHostIP() { foreach (IPAddress ip in (Dns.GetHostEntry(Dns.GetHostName())).AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) return ip; } return null; }