URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 792
[ Назад ]

Исходное сообщение
"Как получить серийный номер винчестера с помощью С?"

Отправлено Defender , 12-Июн-02 01:08 
Вот надумал защитить свою софтину. И решил, что лучшим способом этого будет привязка конкретной копии к конкретному железу 8))
А вот как это сделать?
В принципе dmesg выдаёт в частности такое:
ad0: 39266MB <IBM-DTLA-305040> [79780/16/63] at ata0-master UDMA33
              ^^^^^^^^^^^^^^^
А вот как эго получить сугубо из под С.....
Заранее благодарен.    

Содержание

Сообщения в этом обсуждении
"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено uldus , 13-Июн-02 11:14 
>А вот как эго получить сугубо из под С.....

Можно через /proc или sysctl, в зависимости от системы.


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено Defender , 13-Июн-02 19:30 
>>А вот как эго получить сугубо из под С.....
>
>Можно через /proc или sysctl, в зависимости от системы.

Ну как это сделать через /proc я себе представляю...
А вот как черезе sysctl?
В его параметрах я такого не нашел....


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено uldus , 14-Июн-02 10:10 
> А вот как черезе sysctl?

sysctl тоже достаточно сильно к системе привязан, например, для FreeBSD тип CPU узнается через "sysctl hw.model", в Linux - "cat /proc/cpuinfo"

Из программы sysctl используется, почти как через команду sysctl:
man 3 sysctl

int sysctlbyname(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen);


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено pth , 16-Июн-02 22:49 
>А вот как это сделать?
В этой жизни ни в чем нельзя быть уверенным, особенно - что остальные идиоты.


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено Defender , 17-Июн-02 00:06 
>В этой жизни ни в чем нельзя быть уверенным, особенно - что
>остальные идиоты.


Ну так сказать довольно просто. Но честно говоря я не нашёл ещё ни одного решения этой проблемы....


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено pth , 17-Июн-02 00:12 
>Ну так сказать довольно просто. Но честно говоря я не нашёл ещё
>ни одного решения этой проблемы....

Ты меня зацепил --- найду способ 7 дня . иначе фа-диез+ буду.


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено pth , 17-Июн-02 00:30 
>Ты меня зацепил --- найду способ 7 дня . иначе фа-диез+ буду.
>
PS системку слей плз (если ответ для Linux Kernel 2.4.18 не полезт).

"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено pth , 18-Июн-02 21:15 
Прошу прощения за 3 пьяных вопля.
Смысл в чем --- сигнатура диска не имеет прямого отношения к функциональности системы, а значит можно пропатчить ядро так, что бы в ответ давался ЛЮБАЯ сигнатура. Хэширование ее, как пароля проблемы не решает.


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено Defender , 19-Июн-02 15:53 
>Прошу прощения за 3 пьяных вопля.
>Смысл в чем --- сигнатура диска не имеет прямого отношения к функциональности
>системы, а значит можно пропатчить ядро так, что бы в ответ
>давался ЛЮБАЯ сигнатура. Хэширование ее, как пароля проблемы не решает.


Чего то я не понимаю о чём речь....
Мне надо получить в переменную серийный номер устройства который, на сколько я понимаю, прошит в устройстве (на винте).
Так вот вопрос и состоит в том как это сделать....


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено Бизон , 19-Июн-02 16:05 
>Мне надо получить в переменную серийный номер устройства

Для Limux см. SerialNo=xxxxx в выводе "hdparm -i /dev/hdx", затем посмотри в исходники hdparm на предмет выдерания информции при использовании опции -i.


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено Defender , 19-Июн-02 16:14 
>>Мне надо получить в переменную серийный номер устройства
>
>Для Limux см. SerialNo=xxxxx в выводе "hdparm -i /dev/hdx", затем посмотри в
>исходники hdparm на предмет выдерания информции при использовании опции -i.


Но у меня FreBSD 4.4


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено uldus , 20-Июн-02 09:56 
>Но у меня FreBSD 4.4

Для IDE дисков поможет посиск по слову serial в файлах:
/sys/sys/ata.h
/sys/i386/isa/atapi.c
/sys/dev/ata/ata-all.h


"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено niger , 21-Июн-02 11:11 
для ATA винтов функция ECh - чтение идентификатора

"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено pth , 22-Июн-02 03:14 
>Чего то я не понимаю о чём речь....

Я тоже не понимаю как из непривилегированного (CPL=3 для IA32) кода, можно обращаться к железу (через порты или как) и быть при этом уверенным, что никто (из CPL=0) тебя не перехватил.



"RE: Как получить серийный номер винчестера с помощью С?"
Отправлено uncle Bob , 27-Июн-02 15:41 
#include <stdio.h>
#include <fcntl.h>
#include <linux/hdreg.h>

int main()
{
    struct hd_driveid hd;
    int ide;
    ide=open("/dev/hda",O_RDONLY);
    ioctl(ide,HDIO_GET_IDENTITY,&hd);
    printf("Serial number - %s",hd.serial_no);
    return 1;
}