0

私は hid omnikey 5325 cl に取り組んでおり、ATR 値を取得しようとしています。Ubuntu で pcscd と pyscard ライブラリを使用しています。システムは T0 プロトコルを使用して ATR を自動的に取得しますが、RAW リターンが必要です。helloprox や omnikey の公式ソフトウェアを使用している Windows では必要なものを取得できますが、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)
4

2 に答える 2

0

完全な回答に追加されなくても、役立つ可能性のあるいくつかの考慮事項:

  • 非接触型カードまたはタグを使用している
  • これらのタグには ATR はありませんが、ATQB や ATS などのプロトコルに応じて、まったく異なる構造になっています。
  • PCSC は時代遅れのソフトウェア概念であり、厳密にATRを必要とします
  • そのため、非接触リーダーのメーカーは、カードから取得した情報に基づいて ATR を発明する必要があります。
  • あなたのソフトウェアが「ATR」として受け取るものは、この発明の結果です。
  • Omnikey は明らかに、Windows レジストリを使用して発明プロセスを制御していますが、これは明らかに移植性のないアプローチです。

したがって、私のアドバイスは、Omnikey サポートに連絡して、Linux から続行する方法です。私の経験によると、彼らは協力的です。

于 2016-06-28T20:14:50.783 に答える