Протокол pcscd изменяется, но atr не
Я работал над hid omnikey 5325 cl и пытался получить значение ATR. Я использую pcscd и библиотеку pyscard в Ubuntu. Система автоматически получает ATR, используя протокол T0, но мне нужно вернуть RAW. В Windows, использующей helloprox или официальное программное обеспечение omnikey, я могу получить то, что мне нужно, но в Ubuntu, хотя я меняю протокол, но ATR не меняется.
вот код, который я использую:
class PrintObserver(CardObserver):
"""A simple card observer that is notified
when cards are inserted/removed from the system and
prints the list of cards
"""
def update(self, observable, actions):
(addedcards, removedcards) = actions
for card in addedcards:
card.connection=card.createConnection()
card.connection.connect(protocol=CardConnection.RAW_protocol)
binary_atr=bin(int(toHexString(card.connection.getATR()).replace(" ",""), 16))
binary_atr=binary_atr[len(binary_atr)-24:len(binary_atr)-1]
print int(binary_atr,2)
for card in removedcards:
print "-Removed: ", toHexString(card.atr)
if __name__ == '__main__':
cardmonitor = CardMonitor()
cardobserver = PrintObserver()
cardmonitor.addObserver(cardobserver)
#Get Ports
config=ConfigParser.ConfigParser()
config.read('../config.ini')
Read_Port=int(config.get('CardReaderSocketPorts','Read',0))
Write_Port=int(config.get('CardReaderSocketPorts','Write',0))
# Initialise socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', Read_Port)
return_address = ('localhost', Write_Port)
sock.bind(server_address)
while 1:
message, address = sock.recvfrom(4096)
if message:
parsed_json=json.loads(message)
#Single Line
if parsed_json['set'].upper()=="Stop":
sock.sendto('{"success":"True"}',return_address)
break
# don't forget to remove observer, or the
# monitor will poll forever...
cardmonitor.deleteObserver(cardobserver)
2 ответа
После обращения в службу поддержки Omnikey проблема решена. Как и в руководстве разработчика, я искал файл конфигурации "/etc/cmrfid.ini" для изменения формата прокси. Имя файла было изменено на "/etc/Omnikey.ini"
Некоторые соображения, которые могут быть полезны, даже если они не добавляют к полному ответу:
- Вы работаете с бесконтактными картами или метками
- Эти теги не имеют ATR, но в зависимости от протокола что-то вроде ATQB или ATS, который имеет совершенно разную структуру.
- PCSC является устаревшей концепцией программного обеспечения, которая строго требует ATR
- Таким образом, производители бесконтактных считывателей должны изобрести ATR, основываясь на информации, которую они получают с карты.
- То, что ваше программное обеспечение получает как "ATR", является результатом этого изобретения.
- Omnikey, очевидно, использует реестр Windows для управления процессом изобретения, что, очевидно, является непереносимым подходом.
Поэтому мой совет - обратиться в службу поддержки Omnikey, как перейти с Linux. По моему опыту они сотрудничают.