Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

NetworkInformation σε C#

Îåêßíçóå áðü ôï ìÝëïò psid. Τελευταία δημοσίευση από το μέλος psid στις 10-03-2009, 13:20. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-03-2009, 14:15 48956

    NetworkInformation σε C#

    Ο παρακάτω κώδικας επιστρέφει την Φυσική διεύθυνση της πρώτης διασύνδεσης τοπικού δικτύου του τοπικού υπολογιστή: NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); label1.Text = nics[0].GetPhysicalAddress().ToString(); τώρα, υπάρχει τρόπος σε C# να πάρω την φυσική διεύθυνση ή και άλλες πληροφορίες απο έναν απομακρυσμένο υπολογιστή στο ίδιο τοπικό δίκτυο? Any help much appreciated.
  •  08-03-2009, 23:28 49023 σε απάντηση της 48956

    Απ: NetworkInformation σε C#

    Μπορείς να κάνεις resolve πληροφορίες για εναν υπολογιστή αν ξέρεις το computer name του ή κάποια ip του. Με την βοήθεια του System.Net. Έχει το Dns.GetHostByName("Computer Name") και το Dns.GetHostByAddress("xxx.xxx.xxx.xxx"). Αυτές οι 2 μέθοδοι είναι τύπου IPHostEntry όπου μπορείς να πάρεις πληροφορίες για τα IP του τα ονόματα dns που έχει και άλλα.

    http://msdn.microsoft.com/en-us/library/system.net.dns.aspx


    Iraklis Karagkiozoglou
  •  09-03-2009, 10:33 49031 σε απάντηση της 49023

    Απ: NetworkInformation σε C#

    Ευχαριστώ για την απάντηση. Πράγματι μπορώ να χρησιμοποιήσω την κλάση Dns του System.NET, παρόλα αυτά στην υλοποίηση μου τελικά βάζω μια μικρή client εφαρμογή στον απομακρυσμένο υπολογιστή και παίρνω με Socket τις πληροφορίες που θέλω.
  •  09-03-2009, 16:36 49046 σε απάντηση της 49031

    Απ: NetworkInformation σε C#

    Δεν υπάρχει λόγος να φτιάξει κανείς δική του εφαρμογή, καθώς τα Windows ήδη παρέχουν αυτή τη δυνατότητα μέσω του WMI και του System.Management namespace. Το WMI υπάρχει από καταβολής Windows 2000 και επιτρέπει σε administrators να διαβάζουν οποιαδήποτε σχεδόν τιμή θέλουν από τα διάφορα μηχανήματα του δικτύου τους με απλά σχετικά scripts. Στο MSDN περιγράφεται πως να κάνεις κάποια απλά tasks ενώ υπάρχει και το Technet ScriptCenter με έτοιμα scripts για πολλές διαφορετικές εργασίες. To WMI ξεκίνησε ως COM τεχνολογία, αλλά μπορεί να κληθεί και από το .NET μέσω του System.Management namespace.

    Το πρόβλημα λοιπόν γίνεται, πως θα διαβάσω το MAC address των καρτών ενός υπολογιστή μέσω WMI?

    Η αναζήτηση πληροφοριών από το WMI μοιάζει κάπως με την ανάγνωση δεδομένων από ένα πίνακα, με τη διαφορά ότι αντί για πίνακα υπάρχουν κλάσεις. Μπορεί κανείς να χρησιμοποιήσει ακόμα και SQL για να διαβάσει τις τιμές που θέλει. Η κλάση που επιστρέφει το MAC address είναι η Win32_NetworkAdapterConfiguration και περιέχει μία εγγραφή για κάθε κάρτα δικτύου. Το MAC address περιέχεται στο πεδίο MacAddress. Για να πάρω το MAC Address του υπολογιστή μου μπορώ να γράψω το εξής:

    ManagementClass adapters= new System.Management.ManagementClass("Win32_NetworkAdapterConfiguration");
    foreach (ManagementObject adapter in adapters.GetInstances())
    {
    string address = (string)adapter["MacAddress"];
    if (!String.IsNullOrEmpty(address))
    Console.WriteLine("MAC: {0}", address);
    adapter.Dispose();
    }

    Το dispose χρειάζεται επειδή τα ManagemntObject είναι COM αντικείμενα και δεν έχουν garbage collection.

    Για να διαβάσω τα MAC addresses ενός άλλου υπολογιστή, αντί για το όνομα της κλάσης θα προσθέσω και το όνομα του υπολογιστή με τη μορφή :

    ManagementClass adapters= new System.Management.ManagementClass(@"\\SomeComputer\root\cimv2:Win32_NetworkAdapterConfiguration");

    όπου αντί για SomeComputer θα βάλω το όνομα του υπολογιστή που θέλω να συνδεθώ.

    Όσον αφορά τη GetHostByName και το IPHostEntry, θα δώσει μόνο το IP address, όχι το MAC Address που ζητάει ο psid.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-03-2009, 13:20 49070 σε απάντηση της 49046

    Απ: NetworkInformation σε C#

    Παναγιώτη τρέχω τον κώδικα σου, ενώ λειτουργεί για τον τοπικό υπολογιστή σε απομακρυσμένο πετάει την πιο κάτω εξαίρεση: (υπάρχει λύση?) Εξαίρεση που δεν αντιμετωπίστηκε: System.Runtime.InteropServices.COMException (0 x800706BA): Ο διακομιστής RPC δεν είναι διαθέσιμος. (Εξαίρεση από HRESULT: 0x800 706BA) σε System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 e rrorCode, IntPtr errorInfo) σε System.Management.ManagementScope.InitializeGuts(Object o) σε System.Management.ManagementScope.Initialize() σε System.Management.ManagementObject.Initialize(Boolean getObject) σε System.Management.ManagementClass.GetInstances(EnumerationOptions options) σε System.Management.ManagementClass.GetInstances() σε WMIExample.Program.Main(String[] args) στο C:\Users\Πέτρος\Documents\Visua l Studio 2008\Projects\WMI\WMIExample\WMIExample\Program.cs:γραμμή 17 Πιέστε ένα πλήκτρο για συνέχεια. . .
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems