blob: ea6d5efe5fb4b5af41565ce134126437943bd75a [file] [log] [blame]
Christina Quast9547e9f2015-04-14 22:18:30 +02001#!/usr/bin/env python3
Christina Quast98369332015-03-02 16:08:40 +01002
3import usb.core
4import usb.util
5import sys
Christina Quast2b8a18b2015-04-12 09:31:36 +02006import array
Christina Quast98369332015-03-02 16:08:40 +01007
Christina Quast9547e9f2015-04-14 22:18:30 +02008from apdu_split import Apdu_splitter, apdu_states
Christina Quast425717d2015-05-14 17:20:55 +02009from gsmtap import gsmtap_send_apdu
Christina Quast9547e9f2015-04-14 22:18:30 +020010
11from constants import PHONE_RD, ERR_TIMEOUT, ERR_NO_SUCH_DEV
Christina Quast98369332015-03-02 16:08:40 +010012
Christina Quast98369332015-03-02 16:08:40 +010013# main code
Christina Quast5cf676d2015-05-14 17:21:34 +020014def sniff(dev):
Christina Quast2b8a18b2015-04-12 09:31:36 +020015 ans = array.array('B', [])
Christina Quast98369332015-03-02 16:08:40 +010016
Christina Quast9547e9f2015-04-14 22:18:30 +020017 apdus = []
18 apdu = Apdu_splitter()
19
Christina Quast98369332015-03-02 16:08:40 +010020 while True:
Christina Quast98369332015-03-02 16:08:40 +010021 try:
Christina Quast2b8a18b2015-04-12 09:31:36 +020022 ans += dev.read(PHONE_RD, 64, 1000)
Christina Quast98369332015-03-02 16:08:40 +010023 except KeyboardInterrupt:
24 print("Bye")
25 sys.exit()
Christina Quast2b8a18b2015-04-12 09:31:36 +020026 except Exception as e:
Christina Quast9547e9f2015-04-14 22:18:30 +020027 if e.errno != ERR_TIMEOUT and e.errno != ERR_NO_SUCH_DEV:
28 raise
Christina Quast2b8a18b2015-04-12 09:31:36 +020029 print e
30
Christina Quast25714582015-04-13 22:40:40 +020031 if len(ans) >= 1:
Christina Quast9547e9f2015-04-14 22:18:30 +020032# print("".join("%02x " % b for b in ans))
33 for c in ans:
34 apdu.split(c)
35 if apdu.state == apdu_states.APDU_S_FIN:
36 apdus.append(apdu)
Christina Quast425717d2015-05-14 17:20:55 +020037 gsmtap_send_apdu(apdu.buf)
Christina Quast9547e9f2015-04-14 22:18:30 +020038 apdu = Apdu_splitter()
Christina Quast2b8a18b2015-04-12 09:31:36 +020039 ans = array.array('B', [])