Wie Sie feststellen, ob eine IP aus dem gleichen LAN ist programmatisch in .NET C #

StackOverflow https://stackoverflow.com/questions/416524

  •  03-07-2019
  •  | 
  •  

Frage

Ich weiß, dass, wenn ein IP-Subnet Mask + Lokale IP-Regeln fällt nicht, wird es durch ein Tor nur erreichbar sein. Das Problem ist, dass ich weiß nicht, wie die lokale IP-Adresse zu erhalten, weder die lokale Subnetz-Maske, programmatisch .NET. Jeder von euch kann mir helfen?

Ich werde diese Informationen benutzen, um die maximale Leistung aus meiner Batch-SQL-Insertion Warteschlange zu quetschen. Wenn der SQL-Server im selben Subnetz fällt, dann wird es einen Algorithmus für mininum Latenz optimiert verwenden, sonst ich werde eine für hohe Latenz optimiert verwenden.

War es hilfreich?

Lösung

Sie können die Klassen innerhalb des System.Net.NetworkInformation Namespace (eingeführt in .NET 2.0):

        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

        foreach (NetworkInterface iface in interfaces)
        {
            IPInterfaceProperties properties = iface.GetIPProperties();

            foreach (UnicastIPAddressInformation address in properties.UnicastAddresses)
            {
                Console.WriteLine(
                    "{0} (Mask: {1})",
                    address.Address,
                    address.IPv4Mask
                    );
            }
        }

Andere Tipps

Es gibt eine alternative Art und Weise der NetworkInformation mit Klasse:

public static void ShowNetworkInterfaces()
{
    // IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();

    if (nics == null || nics.Length < 1)
    {
        Console.WriteLine("  No network interfaces found.");
        return;
    }

    Console.WriteLine("  Number of interfaces .................... : {0}", nics.Length);
    foreach (NetworkInterface adapter in nics)
    {
        IPInterfaceProperties properties = adapter.GetIPProperties();
        Console.WriteLine();
        Console.WriteLine(adapter.Description);
        Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length,'='));
        Console.WriteLine("  Interface type .......................... : {0}", adapter.NetworkInterfaceType);
        Console.WriteLine("  Physical Address ........................ : {0}", adapter.GetPhysicalAddress().ToString());
        string versions ="";

        // Create a display string for the supported IP versions.
        if (adapter.Supports(NetworkInterfaceComponent.IPv4))
        {
            versions = "IPv4";
        }
        if (adapter.Supports(NetworkInterfaceComponent.IPv6))
        {
            if (versions.Length > 0)
            {
                versions += " ";
            }
            versions += "IPv6";
        }
        Console.WriteLine("  IP version .............................. : {0}", versions);
        UnicastIPAddressInformationCollection uniCast = properties.UnicastAddresses;
        if (uniCast != null)
        {
            foreach (UnicastIPAddressInformation uni in uniCast)
            {
                Console.WriteLine("  Unicast Address ......................... : {0}", uni.Address);
                Console.WriteLine("     Subnet Mask  ......................... : {0}", uni.IPv4Mask);
            }
        }
    Console.WriteLine();
    }
}

Das Codebeispiel wird ein Mashup, die Beispiele von Msdn, vereinfacht, um nur die Informationen, die Sie wahrscheinlich benötigen.

vorgesehen bilden

EDIT: Hatte mir zu lange (zu viele Dinge zur gleichen Zeit :)) diesen Beitrag zu machen, und Mitch schlug mich zu ihm:)

Dies wird Sie den Host-Namen erhalten und die IP-Adresse. Ich gehe davon aus Sie die IP-Adressen in Ihrem LAN wissen, so sollten Sie in der Lage sein, zu bestimmen, ob die IP-Adresse außerhalb des lokalen Netzwerks ist auf diese Weise:

// Get the host name of local machine.
strHostName = Dns.GetHostName();
Console.WriteLine("Local Machine's Host Name: " + strHostName);

// Using the host name, get the IP address list.
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;

for (int i = 0; i < addr.Length; i++)
{
     Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top