Δεν υπάρχει λόγος να φτιάξει κανείς δική του εφαρμογή, καθώς τα 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