Ich habe an Hid omnikey 5325 cl gearbeitet und versucht, den ATR-Wert zu erhalten. Ich benutze Pcscd und Pyscard-Bibliothek auf Ubuntu. Das System erhält automatisch die ATR mit T0 Protokoll, aber ich brauche RAW Return. Unter Windows mit der offiziellen Software von helloprox oder omnikey kann ich bekommen, was ich brauche, aber auf ubuntu, obwohl ich das Protokoll geändert habe, aber ATR ändert sich nicht.Pcscd Protokoll ändert, aber atr nicht
hier ist der Code ich benutze:
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)
Ich bin etwas unsicher, was Sie versuchen zu erreichen. Die Kommunikation zwischen Karte und Leser wird immer T = 0, T = 1 oder T = CL sein. Das gewählte Protokoll hängt von der ATR ab, was typischerweise bedeutet, dass eine Karte, die T = 0 und T = 1 unterstützt, unter Verwendung von T = 0 adressiert wird. (Ich habe noch nie gehört, dass eine Karte im Rohmodus kommuniziert.) Anders ausgedrückt: Sie müssen die ATR ändern, um ein anderes Verhalten zu erreichen, das leider völlig von der verwendeten Karte abhängt. – guidot
Sorry für die Verwirrung, lass mich mein Problem klären. Ich versuche, das ATR-Decodierungsformat zu ändern. In Fenstern benutze ich "Omnikey Workbench", erlaubt, das ATR-Decodierungsformat zu ändern. In Ubuntu ist der Standard H10301. Auch gibt es eine Option, "rohe Decodierung Format" zu verwenden, die in der Werkbank für mich einfacher sein wird, an zu arbeiten. H10301 ATR: 3B 06 01 00 18 02 87 04 Rohdecodierung ATR: 3B 05 00 02 24 E0 40Ich brauche die Kartennummer 1208352, die sich auf der Rückseite der Karte befindet. Es ist sehr einfach mit letzterer, aber ich konnte es nicht mit der ersten herausfinden. Danke für die Antwort @guidot –
Eigentlich was ich suche ist Linux-Version von [dies] (http://www.isecuretech.com/download/SmartCardReader/OMNIKEY/driver/OK5x21/OK5x25_Prox_ATRDecode.pdf). Da dieser Code ausgeführt wird auf mehreren Geräten, wenn möglich mit einem Python-Befehl ändern. @guidot –