Christina Quast | 9547e9f | 2015-04-14 22:18:30 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Christina Quast | 9836933 | 2015-03-02 16:08:40 +0100 | [diff] [blame] | 2 | |
3 | import usb.core | ||||
4 | import usb.util | ||||
5 | import sys | ||||
Christina Quast | 2b8a18b | 2015-04-12 09:31:36 +0200 | [diff] [blame] | 6 | import array |
Christina Quast | 9836933 | 2015-03-02 16:08:40 +0100 | [diff] [blame] | 7 | |
Christina Quast | 9547e9f | 2015-04-14 22:18:30 +0200 | [diff] [blame] | 8 | from apdu_split import Apdu_splitter, apdu_states |
Christina Quast | 425717d | 2015-05-14 17:20:55 +0200 | [diff] [blame] | 9 | from gsmtap import gsmtap_send_apdu |
Christina Quast | 9547e9f | 2015-04-14 22:18:30 +0200 | [diff] [blame] | 10 | |
11 | from constants import PHONE_RD, ERR_TIMEOUT, ERR_NO_SUCH_DEV | ||||
Christina Quast | 9836933 | 2015-03-02 16:08:40 +0100 | [diff] [blame] | 12 | |
Christina Quast | 9836933 | 2015-03-02 16:08:40 +0100 | [diff] [blame] | 13 | # main code |
Christina Quast | 5cf676d | 2015-05-14 17:21:34 +0200 | [diff] [blame] | 14 | def sniff(dev): |
Christina Quast | 2b8a18b | 2015-04-12 09:31:36 +0200 | [diff] [blame] | 15 | ans = array.array('B', []) |
Christina Quast | 9836933 | 2015-03-02 16:08:40 +0100 | [diff] [blame] | 16 | |
Christina Quast | 9547e9f | 2015-04-14 22:18:30 +0200 | [diff] [blame] | 17 | apdus = [] |
18 | apdu = Apdu_splitter() | ||||
19 | |||||
Christina Quast | 9836933 | 2015-03-02 16:08:40 +0100 | [diff] [blame] | 20 | while True: |
Christina Quast | 9836933 | 2015-03-02 16:08:40 +0100 | [diff] [blame] | 21 | try: |
Christina Quast | 2b8a18b | 2015-04-12 09:31:36 +0200 | [diff] [blame] | 22 | ans += dev.read(PHONE_RD, 64, 1000) |
Christina Quast | 9836933 | 2015-03-02 16:08:40 +0100 | [diff] [blame] | 23 | except KeyboardInterrupt: |
24 | print("Bye") | ||||
25 | sys.exit() | ||||
Christina Quast | 2b8a18b | 2015-04-12 09:31:36 +0200 | [diff] [blame] | 26 | except Exception as e: |
Christina Quast | 9547e9f | 2015-04-14 22:18:30 +0200 | [diff] [blame] | 27 | if e.errno != ERR_TIMEOUT and e.errno != ERR_NO_SUCH_DEV: |
28 | raise | ||||
Christina Quast | 2b8a18b | 2015-04-12 09:31:36 +0200 | [diff] [blame] | 29 | print e |
30 | |||||
Christina Quast | 2571458 | 2015-04-13 22:40:40 +0200 | [diff] [blame] | 31 | if len(ans) >= 1: |
Christina Quast | 9547e9f | 2015-04-14 22:18:30 +0200 | [diff] [blame] | 32 | # 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 Quast | 425717d | 2015-05-14 17:20:55 +0200 | [diff] [blame] | 37 | gsmtap_send_apdu(apdu.buf) |
Christina Quast | 9547e9f | 2015-04-14 22:18:30 +0200 | [diff] [blame] | 38 | apdu = Apdu_splitter() |
Christina Quast | 2b8a18b | 2015-04-12 09:31:36 +0200 | [diff] [blame] | 39 | ans = array.array('B', []) |