2016-06-28 32 views
0

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) 
+0

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

+0

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 –

+1

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 –

Antwort

0

Nach der Kontaktaufnahme mit der Omnikey-Unterstützung ist das Problem gelöst. Wie in suchte ich nach der Konfigurationsdatei "/etc/cmrfid.ini", um das Prox-Format zu ändern. Der Dateiname wurde in "/etc/Omnikey.ini" geändert.

0

Einige Überlegungen, die hilfreich sein können, auch wenn sie zu einer vollständigen Antwort nicht hinzufügen:

  • Sie sind mit kontaktloser Karten arbeiten oder Tags
  • Diese Tags haben keine ATR, aber abhängig vom Protokoll etwas wie ATQB oder ATS, das ist komplett anders strukturiert.
  • PCSC ist ein datiertes Software-Konzept, dieerfordert streng ein ATR
  • So Kontaktlosleser Hersteller eine ATR erfinden, auf der Grundlage der Informationen, die sie von der Karte erhalten
  • Was als „ATR“ Ihre Software erhält ist das Ergebnis dieser Erfindung.
  • Omnikey verwendet offenbar die Windows-Registrierung, um den Erfindungsprozess zu kontrollieren, der offensichtlich ein nicht portabler Ansatz ist.

Also mein Rat wäre, den Omnikey Support zu kontaktieren, wie man von Linux ausgeht. Nach meiner Erfahrung sind sie kooperativ.