- Timestamp:
- 04/08/15 16:53:00 (10 years ago)
- Location:
- stable
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 12236,12273
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Clients.Hive.Slave/3.3/Manager/ConfigManager.cs
r12009 r12297 25 25 using System.Linq; 26 26 using System.Management; 27 using System.Net.NetworkInformation; 27 28 using HeuristicLab.Clients.Hive.SlaveCore.Properties; 28 29 … … 34 35 public class ConfigManager { 35 36 private static ConfigManager instance = null; 37 private const string vmwareNameString = "VMware"; 38 private const string virtualboxNameString = "VirtualBox"; 39 private const int macLength = 6; 40 private const int macLongLength = 8; 41 36 42 public static ConfigManager Instance { 37 43 get { return instance; } … … 179 185 /// </summary> 180 186 private static Guid GetUniqueMachineIdFromMac() { 181 ManagementClass mgtClass = new ManagementClass("Win32_NetworkAdapterConfiguration"); 182 ManagementObjectCollection mgtCol = mgtClass.GetInstances(); 183 184 foreach (ManagementObject mgtObj in mgtCol) { 185 foreach (var prop in mgtObj.Properties) { 186 if (prop.Value != null && prop.Name == "MACAddress") { 187 try { 188 //simply take the first nic 189 string mac = prop.Value.ToString(); 190 byte[] b = new byte[8]; 191 string[] macParts = mac.Split(':'); 192 if (macParts.Length == 6) { 193 for (int i = 0; i < macParts.Length; i++) { 194 b[i + 2] = (byte)((ParseNybble(macParts[i][0]) << 4) | ParseNybble(macParts[i][1])); 195 } 196 197 // also get machine name and save it to the first 4 bytes 198 Guid guid = new Guid(Environment.MachineName.GetHashCode(), 0, 0, b); 199 return guid; 200 } else 201 throw new Exception("Error getting mac addresse"); 202 } 203 catch { 204 throw new Exception("Error getting mac addresse"); 205 } 206 } 207 } 208 } 209 throw new Exception("Error getting mac addresse"); 210 } 211 212 /// <summary> 213 /// return numeric value of a single hex-char 214 /// (see: http://stackoverflow.com/questions/854012/how-to-convert-hex-to-a-byte-array) 215 /// </summary> 216 static int ParseNybble(char c) { 217 if (c >= '0' && c <= '9') { 218 return c - '0'; 219 } 220 if (c >= 'A' && c <= 'F') { 221 return c - 'A' + 10; 222 } 223 if (c >= 'a' && c <= 'f') { 224 return c - 'a' + 10; 225 } 226 throw new ArgumentException("Invalid hex digit: " + c); 187 //try to get a real network interface, not a virtual one 188 NetworkInterface validNic = NetworkInterface.GetAllNetworkInterfaces() 189 .FirstOrDefault(x => 190 !x.Name.Contains(vmwareNameString) && 191 !x.Name.Contains(virtualboxNameString) && 192 (x.NetworkInterfaceType == NetworkInterfaceType.Ethernet || 193 x.NetworkInterfaceType == NetworkInterfaceType.GigabitEthernet)); 194 195 if (validNic == default(NetworkInterface)) { 196 validNic = NetworkInterface.GetAllNetworkInterfaces().First(); 197 } 198 199 byte[] addr = validNic.GetPhysicalAddress().GetAddressBytes(); 200 if (addr.Length < macLength || addr.Length > macLongLength) { 201 throw new ArgumentException(string.Format("Error generating slave UID: MAC address has to have a length between {0} and {1} bytes. Actual MAC address is: {2}", 202 macLength, macLongLength, addr)); 203 } 204 205 if (addr.Length < macLongLength) { 206 byte[] b = new byte[8]; 207 Array.Copy(addr, 0, b, 2, addr.Length); 208 addr = b; 209 } 210 211 // also get machine name and save it to the first 4 bytes 212 Guid guid = new Guid(Environment.MachineName.GetHashCode(), 0, 0, addr); 213 return guid; 227 214 } 228 215
Note: See TracChangeset
for help on using the changeset viewer.