#!/usr/bin/env python3 import usb.core import usb.util import sys import array from apdu_split import Apdu_splitter, apdu_states from gsmtap import gsmtap_send_apdu from constants import PHONE_RD, ERR_TIMEOUT, ERR_NO_SUCH_DEV # main code def sniff(dev): ans = array.array('B', []) apdus = [] apdu = Apdu_splitter() while True: try: ans += dev.read(PHONE_RD, 64, 1000) except KeyboardInterrupt: print("Bye") sys.exit() except Exception as e: if e.errno != ERR_TIMEOUT and e.errno != ERR_NO_SUCH_DEV: raise print e if len(ans) >= 1: # print("".join("%02x " % b for b in ans)) for c in ans: apdu.split(c) if apdu.state == apdu_states.APDU_S_FIN: apdus.append(apdu) gsmtap_send_apdu(apdu.buf) apdu = Apdu_splitter() ans = array.array('B', [])