simtrace2/usb_application/sniffer.py

40 lines
997 B
Python
Executable File

#!/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', [])