मैं जावा का उपयोग कर एक विशिष्ट कंप्यूटर आईडी उत्पन्न करने की कोशिश कर रहा हूं। मैंने हार्ड ड्राइव सीरियल, या विंडोज सीरियल कीज, सीपीयू आईडी, या मैक पते जैसी चीज़ों के बारे में सोचा है, लेकिन अन्य कंप्यूटरों के पास समान हो सकता है .. उदाहरण के लिए, अगर कोई विंडोज 7 की प्रतिलिपि बनाता है तो वे एक ही धारावाहिक हो सकते हैं किसी के रूप में .. मैं सोच रहा था कि कोई मुझे कंप्यूटर विशिष्ट आईडी उत्पन्न करने का कोई तरीका दे सकता है जो कभी नहीं बदला जाता है और जावा का उपयोग करके पुनर्प्राप्त किया जा सकता है?कंप्यूटर विशिष्ट आईडी?
मैंने कुछ शोध किया और कुछ उपयोगी कार्यों को पाया। और, मैं ऐसा कुछ सोच रहा था। लेकिन अगर वे अपने हार्डवेयर को बदलते हैं, तो यह कंप्यूटर आईडी बदल देगा। किसी को भी कुछ पता है जिसका मैं उपयोग कर सकता हूँ?
public String getComputerID(){
InetAddress ip = InetAddress.getLocalHost();
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
String sn = getSerialNumber("C");
String cpuId = getMotherboardSN();
return MD5(mac + sn + cpuId);
}
public String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) {
}
return null;
}
public String getSerialNumber(String drive) {
String result = "";
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
StringBufferring vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n"
+"Set colDrives = objFSO.Drives\n"
+"Set objDrive = colDrives.item(\"" + drive + "\")\n"
+"Wscript.Echo objDrive.SerialNumber"; // see note
fw.write(vbs);
FileWriter.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return result.trim();
}
public String getMotherboardSN() {
String result = "";
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs =
"Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
+ "Set colItems = objWMIService.ExecQuery _ \n"
+ " (\"Select * from Win32_BaseBoard\") \n"
+ "For Each objItem in colItems \n"
+ " Wscript.Echo objItem.SerialNumber \n"
+ " exit for ' do the first cpu only! \n"
+ "Next \n";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return result.trim();
}
तो आप कंप्यूटर विशिष्टता कैसे परिभाषित करते हैं? मुझे लगता है कि अगर वे हार्डवेयर बदलते हैं तो वे अपनी आईडी बदलते हैं। –
बिल्कुल, और मैं एक कंप्यूटर आईडी उत्पन्न करने का एक तरीका खोजने का प्रयास कर रहा हूं जो उनके हार्डवेयर को बदलने पर नहीं बदलेगा .. –
यह कॉपीराइट मालिकों और हर जगह डीआरएम रचनाकारों द्वारा आयोजित एक फंतासी की समाप्ति होगी। समस्या जटिल है, असीमित, "गेटचास", और समझौता के साथ। सौभाग्य! –