Как получить серийный номер или метаданные USB-накопителя, используя код Java - PullRequest
3 голосов
/ 06 марта 2012

Я подготовил одно настольное приложение в Java.И я хочу защитить его с помощью Pendrive или любого другого USB-накопителя.Но я не знаю, как читать pendrive или usb-диск, используя java-код, чтобы я мог ограничить приложение.

Пожалуйста, помогите мне, как это сделать?Или любая другая идея по этому поводу?

Спасибо ..:)

Ответы [ 5 ]

3 голосов
/ 06 марта 2012

Как сказал человек выше меня, вы можете перечислить корни своего каталога USB. После того, как вы перечислите корни, вы можете найти USB-накопитель вручную, затем записать объект File с вашего USB-накопителя в файл с помощью FileOutputStreams, а затем просто сравнить этот объект File позже с вашим накопителем. Или вы можете сделать уникальное имя файла на вашем USB-накопителе и использовать

File[] roots = File.listRoots();for(int i = 0; i < roots.length; i++){
File[] filesInRoot = File.listRoots()[i].listFiles();
for(int j = 0; j < filesInRoot.length; j++){
    if(filesInRoot[j].getName().equals(yourUniqueFileName))
        executeYourCode();

    }
}

Задайте любые вопросы, если вам это нужно! Это очень интересная проблема, поэтому, если вам нужна помощь с кодом, напишите мне!

1 голос
/ 30 июля 2015

Вы можете использовать следующий код для возврата USB или диска.

public String HDD_SerialNo(){
    StringBuffer HDD_Serial=new StringBuffer();
    String HDD_Number;
    Runtime rt = Runtime.getRuntime();
    try {
        Process process=rt.exec(new String[]{"CMD", "/C", "WMIC diskdrive get serialnumber"});
        String s = null;
        //Reading sucessful output of the command
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        while ((s = reader.readLine()) != null) {
            HDD_Serial.append(s);
        }
        // Reading error if any
        reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
        while ((s = reader.readLine()) != null) {
         System.out.print(s);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
1 голос
/ 06 марта 2012

Вы можете попробовать Jinput .Если он недостаточно мощный, попробуйте libusb .

PS: Я хотел бы добавить, что этот вид защиты может быть легко взломан.Так почему же вы хотите наказать своих клиентов за то, что они не пиратят?

0 голосов
/ 31 июля 2013

Для этого вам нужно скачать jusb api.

package usb.main;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import usb.core.Bus;
import usb.core.Configuration;
import usb.core.Endpoint;
import usb.core.Host;
import usb.core.HostFactory;
import usb.core.Interface;
import usb.windows.DeviceImpl;



public class Test {
      public static void main(String[] args) {
    try {

        Host host = HostFactory.getHost();

        Bus[] bus = host.getBusses();

        SearchUSBDevices(bus);
    } catch (Exception e) {
    }

}

private static void SearchUSBDevices(Bus[] bus) {
    boolean FOUND_FLAG = false;
    try {
        DeviceImpl dev;
        for (int k = 0; k < bus.length; k++) {
            for (int i = 0; i < 5; i++) {
                dev = (DeviceImpl) bus[k].getDevice(i);
                if (dev != null) {
                    // System.out.println(dev.getString(1, 1));
                    if (dev.getAddress() >= 1) {
                        if (dev.getNumPorts() > 0)
                            ;
                        else {
                            // System.out.println("Device Name :"+dev.getFriendlyDeviceName());
                            if (dev.getFriendlyDeviceName()
                                    .equalsIgnoreCase(
                                            "USB Mass Storage Device")) {

                                FOUND_FLAG = true;

                                // // START
                                //
                                if (dev != null) {
                                    // Obtain the current Configuration of
                                    // the device and the number of
                                    // Interfaces available under the
                                    // current Configuration.
                                    Configuration config = dev
                                            .getConfiguration();
                                    int total_interface = config
                                            .getNumInterfaces();

                                    // Traverse through the Interfaces
                                    for (int k1 = 0; k1 < total_interface; k1++) {
                                        // Access the currently Interface
                                        // and obtain the number of
                                        // endpoints available on the
                                        // Interface.
                                        Interface itf = config
                                                .getInterface(k1, 0);
                                        int total_ep = itf
                                                .getNumEndpoints();
                                        System.out.println(total_ep);
                                        // Traverse through all the
                                        // endpoints.
                                        for (int l = 0; l < total_ep - 1; l++) {
                                            // Access the endpoint, and
                                            // obtain its I/O type.
                                            Endpoint ep = itf
                                                    .getEndpoint(l);
                                            String io_type = ep.getType();
                                            System.out.println(io_type);
                                            boolean input = ep.isInput();
                                            System.out.println(input);

                                            // If the endpoint is an input
                                            // endpoint, obtain its
                                            // InputStream and read in data.
                                            if (input) {
                                                InputStream in;
                                                in = ep.getInputStream();
                                                // Read in data here
                                                /*
                                                 * byte[] b = new byte[100];
                                                 * in.read(b);
                                                 */
                                                BufferedReader bReader = new BufferedReader(
                                                        new InputStreamReader(
                                                                in));
                                                String line;

                                                /*
                                                 * while ((line =
                                                 * bReader.read
                                                 * (cbuf))!=null){
                                                 * System.out
                                                 * .println(line); }
                                                 */
                                                in.close();
                                            }
                                            // If the Endpoint is and output
                                            // Endpoint, obtain its
                                            // OutputStream and write out
                                            // data.
                                            else {
                                                OutputStream out;
                                                out = ep.getOutputStream();
                                                // Write out data here.
                                                out.close();
                                            }
                                        }
                                    }
                                }
                                // END
                            }

                        }
                    }
                }
            }
        }
        if (FOUND_FLAG)
            System.out.println("Pendrive Found..");
        else
            System.out.println("Pendrive Not Found ...");
    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

0 голосов
/ 06 марта 2012

Я верю, что в Java SE вы можете ссылаться на диски в Windows, используя File.listRoots() метод , который будет просто возвращать список, такой как {"C:\", "D:\", "E:\"}, и, конечно, USB-накопитель может быть монтируется (по существу) на любую букву диска.

Если вы хотите ограничить запуск приложения, когда USB-накопитель не подключен, то, возможно, вы можете найти на нем известный файл (со специальным содержимым), выполнив поиск по каждому из корней файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...