Прокс считыватели, формат карт

FORUM_NAME: Прочие приборы
Модератор: Модераторы

Уважаемые пользователи! В связи с отсутствием возможности оплачивать хостинг сайта и отсутствием материальной помощи от пользователей, Форум вынужден будет прекратить работу с Марта месяца 2024 года!.


AlexRuden
AlexRuden
Возраст: 46
Репутация: 0
Сообщения: 1091
Зарегистрирован: 13.01.2012
С нами: 12 лет 2 месяца
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #41 AlexRuden » 04.10.2013, 15:14

piroxilin писал(а):Да - подношу карту, там 5 байт кода сами набигают и окно закрывается и код полный уже в окне пароля (как в п. 4.5)
А вы успеваете рассмотреть какие 5 байт (может видео записать и в стоп кадре глянуть)? Непонятно кто данные коверкает, считыватель или ОрионПро. Проверить не могу , пользуюсь другими дешевыми считывателями. А проверка копипастом кода работает правильно.
Гм.. Скорее всего драйвер считывателя в контрол поля ввода урезанные байты кидает, хотя не должно быть такого. Если в софте к считывателю настроек нет, то вам в ТП с очередным баго-поклоном.
Курите man'ы , господа.

piroxilin
piroxilin
Репутация: 0
Сообщения: 10
Зарегистрирован: 03.10.2013
С нами: 10 лет 5 месяцев
Профессия: монтажник, инженер

Непрочитанное сообщение #42 piroxilin » 04.10.2013, 16:02

у считывателя нет даже драйверов - он работает по ротоколу ЮСБ-клавиатуры т.е. в любой программе ждущей ввода с клавы можно прочитать текстовый код с считывателя - хоть в DOOM )).
Кино запишу - поржать чисто.

piroxilin
piroxilin
Репутация: 0
Сообщения: 10
Зарегистрирован: 03.10.2013
С нами: 10 лет 5 месяцев
Профессия: монтажник, инженер

Непрочитанное сообщение #43 piroxilin » 04.10.2013, 19:40


AlexRuden
AlexRuden
Возраст: 46
Репутация: 0
Сообщения: 1091
Зарегистрирован: 13.01.2012
С нами: 12 лет 2 месяца
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #44 AlexRuden » 05.10.2013, 07:20

Подождите, если с клавиатуры руками вбить код в поле ввода на скрине в п 4.4 и нажать ентер - тоже коверкает код? Не должно быть такого. Считыватель же просто передает ascii-символы и в конце символ ентера (13) . На видео видно, что считыватель правильный код передает.
Курите man'ы , господа.

piroxilin
piroxilin
Репутация: 0
Сообщения: 10
Зарегистрирован: 03.10.2013
С нами: 10 лет 5 месяцев
Профессия: монтажник, инженер

Непрочитанное сообщение #45 piroxilin » 05.10.2013, 14:57

Тут баг в конверторе 5 байт из ЮСБ-МА в 8 байт ТМ . Руками или считывателем вбивать в поле для настольного считывалеля - результат идин и тот-же = сжирается 5-й байт.

AlexRuden
AlexRuden
Возраст: 46
Репутация: 0
Сообщения: 1091
Зарегистрирован: 13.01.2012
С нами: 12 лет 2 месяца
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #46 AlexRuden » 05.10.2013, 15:52

piroxilin писал(а):Тут баг в конверторе 5 байт из ЮСБ-МА в 8 байт ТМ . Руками или считывателем вбивать в поле для настольного считывалеля - результат идин и тот-же = сжирается 5-й байт.
Дык нету бага - поставил ОрионПро с обновлением, версия АБД 1.12.3164. Проверил как конвертит - всё правильно, ничего не отжирает, 5-ый байт на месте.
Курите man'ы , господа.

piroxilin
piroxilin
Репутация: 0
Сообщения: 10
Зарегистрирован: 03.10.2013
С нами: 10 лет 5 месяцев
Профессия: монтажник, инженер

Непрочитанное сообщение #47 piroxilin » 05.10.2013, 19:49

Хм, у меня версия 1.0 (версия 12 , сборка 3111)
версия 1.12 (обновление 0)
У меня после установки сервис-пака вообще перестали считываться новые коды карточек - вернул всё на старую версию...

тогда тест - забей вручную код "67005693FF"

получится "770067005693FF01" (c2000-2) или "430000005693FF01" (proxy-usb-ma) ???

konstsch
konstsch
Репутация: 0
Сообщения: 4
Зарегистрирован: 18.06.2014
С нами: 9 лет 9 месяцев
Профессия: инженер

Непрочитанное сообщение #48 konstsch » 18.06.2014, 19:04

Такая же проблема подскажите как решить?

piroxilin
piroxilin
Репутация: 0
Сообщения: 10
Зарегистрирован: 03.10.2013
С нами: 10 лет 5 месяцев
Профессия: монтажник, инженер

Непрочитанное сообщение #49 piroxilin » 19.06.2014, 11:48

Обновились и заработало.
Только старую версию полностью снесли.

Причём когда раньше обновлялись, то была проблема по считыванию карт орионом по интерфейсу, с приборов. А после реинсталла - всё нормально заработало.

StDIABLO
StDIABLO
Репутация: 1
Сообщения: 1
Зарегистрирован: 09.12.2014
С нами: 9 лет 3 месяца
Профессия: программист

Непрочитанное сообщение #50 StDIABLO » 09.12.2014, 21:18

Специально зарегистрировался :) чтобы написать в темку

Проапгрейдил немного код написаный ранее.
"getline.c" гуглится впрямую

Спойлер

Код: Выделить всё

/* getline.c -- Replacement for GNU C library function getline

Copyright (C) 1993 Free Software Foundation, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */

/* Written by Jan Brittenson, bson@gnu.ai.mit.edu.  */

#include <sys/types.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR
   + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from
   malloc (or NULL), pointing to *N characters of space.  It is realloc'd
   as necessary.  Return the number of characters read (not including the
   null terminator), or -1 on error or EOF.  */

int getstr (char ** lineptr, size_t *n, FILE * stream, char terminator, int offset)
{
  int nchars_avail;             /* Allocated but unused chars in *LINEPTR.  */
  char *read_pos;               /* Where we're reading into *LINEPTR. */
  int ret;

  if (!lineptr || !n || !stream)
    return -1;

  if (!*lineptr)
    {
      *n = 64;
      *lineptr = (char *) malloc (*n);
      if (!*lineptr)
        return -1;
    }

  nchars_avail = *n - offset;
  read_pos = *lineptr + offset;

  for (;;)
    {
      register int c = getc (stream);

      /* We always want at least one char left in the buffer, since we
         always (unless we get an error while reading the first char)
         NUL-terminate the line buffer.  */

      assert(*n - nchars_avail == read_pos - *lineptr);
      if (nchars_avail < 1)
        {
          if (*n > 64)
            *n *= 2;
          else
            *n += 64;

          nchars_avail = *n + *lineptr - read_pos;
          *lineptr = (char *) realloc (*lineptr, *n);
          if (!*lineptr)
            return -1;
          read_pos = *n - nchars_avail + *lineptr;
          assert(*n - nchars_avail == read_pos - *lineptr);
        }

      if (c == EOF || ferror (stream))
        {
          /* Return partial line, if any.  */
          if (read_pos == *lineptr)
            return -1;
          else
            break;
        }

      *read_pos++ = c;
      nchars_avail--;

      if (c == terminator)
        /* Return the line.  */
        break;
    }

  /* Done - NUL terminate and return the number of chars read.  */
  *read_pos = '\0';

  ret = read_pos - (*lineptr + offset);
  return ret;
}

ssize_t getline(char **lineptr, size_t *n, FILE *stream)
{
  return getstr (lineptr, n, stream, '\n', 0);
}
Собственно код программы

Спойлер

Код: Выделить всё

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "getline.c"

void crc8bolid(unsigned char *decString, unsigned char *decBytes) {
   int i;
   int a;
   int b;
   unsigned int decValue = atoi(decString);
   printf("%#08x\n", decValue);
   a= decValue / 100000;
   b= decValue % 100000;
   unsigned char *myaBytes = (unsigned char*) &a;
   unsigned char *mybBytes = (unsigned char*) &b;
   
   decBytes[3] = myaBytes[0];
   decBytes[2] = mybBytes[1];
   decBytes[1] = mybBytes[0];
   decBytes[0] = 1;
   decBytes[4] = 0;
   decBytes[5] = 0;
   decBytes[6] = 0;
   decBytes[7] = 0;
   unsigned char CRCTABLE[] = { 0, 94, 188, 226, 97, 63, 221, 131, 194, 156,
         126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95,
         1, 227, 189, 62, 96, 130, 220, 35, 125, 159, 193, 66, 28, 254, 160,
         225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99,
         61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 164, 39, 121,
         155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57,
         186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217,
         135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166,
         68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140,
         210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
         17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236,
         14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12,
         82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18,
         145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180,
         234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149,
         203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, 106,
         43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, 169,
         247, 182, 232, 10, 84, 215, 137, 107, 53 };

   for (i = 0; i < 7; i++) {
      decBytes[7] = CRCTABLE[decBytes[7] ^ decBytes[i]];
   }
}
int main(int argc, char **argv)
{
   unsigned char decBytes[8];
   int i;
   FILE *f;
   f = fopen("out.txt", "w");
   FILE * fp;
   char * line = NULL;
   size_t len = 0;
   ssize_t read;

   fp = fopen("in.txt", "r");
   if (fp == NULL)
      return 2;

   while ((read = getline(&line, &len, fp)) != -1) {
      printf("%s", line);
      crc8bolid(line, decBytes);
      for (i = 7; i >= 0; i--) {
         fprintf(f, "%02x", decBytes[i]);
         printf("%02x", decBytes[i]);
      }
      fprintf(f, "\n");
      printf("\n");
   }

   if (line)
      free(line);
   fclose(f);
   return 0;
}
Программа выдает правильный код на код Виганд 011 55982 -> в код Dallas TouchMemory 05 00 00 00 0b da ae 01
Как в FAQ
Вложения
w-to-tm.zip
(28.88 КБ) 854 скачивания

megaaxel
megaaxel
Репутация: 0
Сообщения: 12
Зарегистрирован: 13.09.2016
С нами: 7 лет 6 месяцев
Профессия: инженер

Непрочитанное сообщение #51 megaaxel » 19.09.2019, 15:49

Потребовалось конвертировать коды со считывателей Bolid в формат Dallas (его выдаёт считыватель IronLogic Matrix-V), готового решения не нашёл.
Для примера, BC00360062818C01 -> 590000005B148801.
Но помогла информация данного форума, и вот готов результат, слепленный на коленке.

Для пакетной обработки можно использовать CMD-файлы в виде

Код: Выделить всё

bolid2dallas F8001C005B148801 >> out.txt
bolid2dallas 40001A00A6F93201 >> out.txt
bolid2dallas FE004200BEBBF001 >> out.txt

или переписать программу под себя.

Программа написана на PascalABC.NET.
Исходный код карты можно ввести в качестве параметра программы (для пакетной обработки), если не вводить - программа запросит в подсказке (в консоли). Регистр вводимых символов значения не имеет.
Обработка вводимых данных не производится, поэтому при неправильном формате ввода (длина ключа, символы, и т.п.) происходит либо неправильный вывод, либо вылет программы.

Спойлер

Код: Выделить всё

VAR
 CRCTable : array [0..255] of byte = (
      0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
      157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
      35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
      190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
      70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
      219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
      101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
      248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
      140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
      17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
      175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
      50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
      202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
      87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
      233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
      116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);
     
KeyCode: array[1..8] of byte = ($01,$00,$00,$00,$00,$00,$00,$00);
InputCode : string;

Function Hex2Byte(s: string): byte;
const c: string[16]='0123456789ABCDEF';
Begin
  s := s.ToUpper;
  if length(s) < 2
    then Result := pos(s, c) - 1
    else Result := (pos(s[1], c) - 1) * 16 + pos(s[2], c) - 1;
End;

Function Byte2Hex(b: byte): string;
const c: string[16]='0123456789ABCDEF';
Begin
  Result := c[b div 16 + 1] + c[b mod 16 + 1];
End;

BEGIN
  if ParamCount <> 0
    then InputCode := ParamStr(1)
    else
    begin
      Write('Введите код карты: ');
      Readln(InputCode)
    end;

  for j:byte :=1 to 3 do
    KeyCode[j+1] := Hex2Byte(InputCode.Substring(14 - j*2, 2));
  for j:byte := 1 to 7
    do KeyCode[8] := CRCTable[KeyCode[8] xor KeyCode[j]];
  for j:byte := 8 downto 1 do
     Write(Byte2Hex(KeyCode[j]));
   Writeln;
END.
Вложения
bolid2dallas.zip
(14.36 КБ) 146 скачиваний

AlexeyFatnev
AlexeyFatnev
Репутация: 0
Сообщения: 2
Зарегистрирован: 17.05.2023
С нами: 10 месяцев 10 дней
Профессия: Руководитель проектов

Непрочитанное сообщение #52 AlexeyFatnev » 17.05.2023, 15:26

Здравствуйте, все.

Не нашел среди форумов какой либо информации, касательно хранения в системе Орион про карт формата Mifare.

Задал вопрос в Болид, поддержка перенаправила вопрос разработчику.

Может кто-то сталкивался с конвертацией именно таких карт. В отличии от карт EMM даже те байты, которые должны быть одинаковыми в фомате Wiegand и TM для этого формата карт разные.


Система СКУД, построенная на картах Mifare, считывателях HID R10, контроллерах С2000-2, ПО Орион Про. Настройка прибора С2000-2 - Wiegand 16.

В системе карта сотрудника отображаются с кодом 5400001CD6F2B601. По серийному номеру карты, она имеет шестнадцатеричный код 6D E5 AD B9. На самой карте напечатан код 146,39170.

Сторонним USB считывателем, с помощью разных настроек, можно добиться считывания кода с карты и напечатанного на ней (6D E5 AD B9 и 146,39170).

Задача. Нам необходимо экспортировать карты из системы Орион про в иную систему, в которую можно загрузить исходный код карты или код, напечатанный на ней (6D E5 AD B9 или 146,39170). Подскажите, можно ли как-то конвертировать код карты из системы Болид в изначальный формат 4 или менее байт? Иными словами, можете ли подсказать, как изменяются данные с такого типа карт при считывании обычным считывателем, подключенным к контроллеру С2000-2.

AlexeyFatnev
AlexeyFatnev
Репутация: 0
Сообщения: 2
Зарегистрирован: 17.05.2023
С нами: 10 месяцев 10 дней
Профессия: Руководитель проектов

Непрочитанное сообщение #53 AlexeyFatnev » 15.06.2023, 12:27

Для пользователя Lis.

Не могу ответить лично (опция недоступна), поэтому пишу тут.
То что Вы описали не подходит. Коды совсем разные.
Пока переписываюсь с Болидом, если будет результат - отпишу тут.


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Прочие приборы»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 3 гостя

forum-bolid.ru : Отказ от ответственности