pySim-read.py: Added a common card detection function for both pySim-prog.py and pySim-read.py
This function is used to detect the card type and return Card class/Card subclasses object if its a know card or else None. Also, an initial step towards refactoring of code. Change-Id: I71f57c6403dc933bd9d54f90df3d3fe105b4f66f
This commit is contained in:
@@ -39,7 +39,7 @@ except ImportError:
|
|||||||
import simplejson as json
|
import simplejson as json
|
||||||
|
|
||||||
from pySim.commands import SimCardCommands
|
from pySim.commands import SimCardCommands
|
||||||
from pySim.cards import _cards_classes
|
from pySim.cards import _cards_classes, card_detect
|
||||||
from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid
|
from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid
|
||||||
from pySim.ts_51_011 import EF
|
from pySim.ts_51_011 import EF
|
||||||
from pySim.card_handler import *
|
from pySim.card_handler import *
|
||||||
@@ -609,36 +609,6 @@ def save_batch(opts):
|
|||||||
fh.close()
|
fh.close()
|
||||||
|
|
||||||
|
|
||||||
def card_detect(opts, scc):
|
|
||||||
|
|
||||||
# Detect type if needed
|
|
||||||
card = None
|
|
||||||
ctypes = dict([(kls.name, kls) for kls in _cards_classes])
|
|
||||||
|
|
||||||
if opts.type in ("auto", "auto_once"):
|
|
||||||
for kls in _cards_classes:
|
|
||||||
card = kls.autodetect(scc)
|
|
||||||
if card:
|
|
||||||
print("Autodetected card type: %s" % card.name)
|
|
||||||
card.reset()
|
|
||||||
break
|
|
||||||
|
|
||||||
if card is None:
|
|
||||||
print("Autodetection failed")
|
|
||||||
return
|
|
||||||
|
|
||||||
if opts.type == "auto_once":
|
|
||||||
opts.type = card.name
|
|
||||||
|
|
||||||
elif opts.type in ctypes:
|
|
||||||
card = ctypes[opts.type](scc)
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise ValueError("Unknown card type: %s" % opts.type)
|
|
||||||
|
|
||||||
return card
|
|
||||||
|
|
||||||
|
|
||||||
def process_card(opts, first, card_handler):
|
def process_card(opts, first, card_handler):
|
||||||
|
|
||||||
if opts.dry_run is False:
|
if opts.dry_run is False:
|
||||||
@@ -647,7 +617,7 @@ def process_card(opts, first, card_handler):
|
|||||||
|
|
||||||
if opts.dry_run is False:
|
if opts.dry_run is False:
|
||||||
# Get card
|
# Get card
|
||||||
card = card_detect(opts, scc)
|
card = card_detect(opts.type, scc)
|
||||||
if card is None:
|
if card is None:
|
||||||
print("No card detected!")
|
print("No card detected!")
|
||||||
return -1
|
return -1
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import sys
|
|||||||
from pySim.ts_51_011 import EF, DF
|
from pySim.ts_51_011 import EF, DF
|
||||||
|
|
||||||
from pySim.commands import SimCardCommands
|
from pySim.commands import SimCardCommands
|
||||||
|
from pySim.cards import card_detect, Card
|
||||||
from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, dec_msisdn, format_xplmn_w_act, dec_spn
|
from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, dec_msisdn, format_xplmn_w_act, dec_spn
|
||||||
|
|
||||||
|
|
||||||
@@ -94,6 +95,9 @@ if __name__ == '__main__':
|
|||||||
# Program the card
|
# Program the card
|
||||||
print("Reading ...")
|
print("Reading ...")
|
||||||
|
|
||||||
|
# Initialize Card object by auto detecting the card
|
||||||
|
card = card_detect("auto", scc) or Card(scc)
|
||||||
|
|
||||||
# EF.ICCID
|
# EF.ICCID
|
||||||
(res, sw) = scc.read_binary(EF['ICCID'])
|
(res, sw) = scc.read_binary(EF['ICCID'])
|
||||||
if sw == '9000':
|
if sw == '9000':
|
||||||
|
|||||||
@@ -1104,3 +1104,31 @@ def card_autodetect(scc):
|
|||||||
card.reset()
|
card.reset()
|
||||||
return card
|
return card
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def card_detect(ctype, scc):
|
||||||
|
# Detect type if needed
|
||||||
|
card = None
|
||||||
|
ctypes = dict([(kls.name, kls) for kls in _cards_classes])
|
||||||
|
|
||||||
|
if ctype in ("auto", "auto_once"):
|
||||||
|
for kls in _cards_classes:
|
||||||
|
card = kls.autodetect(scc)
|
||||||
|
if card:
|
||||||
|
print("Autodetected card type: %s" % card.name)
|
||||||
|
card.reset()
|
||||||
|
break
|
||||||
|
|
||||||
|
if card is None:
|
||||||
|
print("Autodetection failed")
|
||||||
|
return None
|
||||||
|
|
||||||
|
if ctype == "auto_once":
|
||||||
|
ctype = card.name
|
||||||
|
|
||||||
|
elif ctype in ctypes:
|
||||||
|
card = ctypes[ctype](scc)
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise ValueError("Unknown card type: %s" % ctype)
|
||||||
|
|
||||||
|
return card
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
Using PC/SC reader (dev=0) interface
|
Using PC/SC reader (dev=0) interface
|
||||||
Reading ...
|
Reading ...
|
||||||
|
Autodetected card type: Fairwaves-SIM
|
||||||
ICCID: 8988219000000117833
|
ICCID: 8988219000000117833
|
||||||
IMSI: 001010000000111
|
IMSI: 001010000000111
|
||||||
GID1: ffffffffffffffff
|
GID1: ffffffffffffffff
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
Using PC/SC reader (dev=4) interface
|
Using PC/SC reader (dev=3) interface
|
||||||
Reading ...
|
Reading ...
|
||||||
|
Autodetected card type: Wavemobile-SIM
|
||||||
ICCID: 89445310150011013678
|
ICCID: 89445310150011013678
|
||||||
IMSI: 001010000000102
|
IMSI: 001010000000102
|
||||||
GID1: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
GID1: Can't read file -- SW match failed! Expected 9000 and got 6a82.
|
||||||
GID2: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
GID2: Can't read file -- SW match failed! Expected 9000 and got 6a82.
|
||||||
SMSP: e1ffffffffffffffffffffffff0581005155f5ffffffffffff000000ffffffffffffffffffffffffffff
|
SMSP: e1ffffffffffffffffffffffff0581005155f5ffffffffffff000000ffffffffffffffffffffffffffff
|
||||||
SPN: wavemobile
|
SPN: wavemobile
|
||||||
Display HPLMN: False
|
Display HPLMN: False
|
||||||
@@ -45,7 +46,7 @@ OPLMNwAcT:
|
|||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
||||||
HPLMNAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
HPLMNAcT: Can't read file -- SW match failed! Expected 9000 and got 6a82.
|
||||||
ACC: abce
|
ACC: abce
|
||||||
MSISDN: Not available
|
MSISDN: Not available
|
||||||
AD: 00ffff02
|
AD: 00ffff02
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
Using PC/SC reader (dev=2) interface
|
Using PC/SC reader (dev=2) interface
|
||||||
Reading ...
|
Reading ...
|
||||||
|
Autodetected card type: fakemagicsim
|
||||||
ICCID: 1122334455667788990
|
ICCID: 1122334455667788990
|
||||||
IMSI: 001010000000102
|
IMSI: 001010000000102
|
||||||
GID1: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
GID1: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
Using PC/SC reader (dev=0) interface
|
Using PC/SC reader (dev=0) interface
|
||||||
Reading ...
|
Reading ...
|
||||||
|
Autodetected card type: sysmoISIM-SJA2
|
||||||
ICCID: 8988211900000000004
|
ICCID: 8988211900000000004
|
||||||
IMSI: 001010000000102
|
IMSI: 001010000000102
|
||||||
GID1: ffffffffffffffffffff
|
GID1: ffffffffffffffffffff
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
Using PC/SC reader (dev=1) interface
|
Using PC/SC reader (dev=1) interface
|
||||||
Reading ...
|
Reading ...
|
||||||
|
Autodetected card type: sysmoUSIM-SJS1
|
||||||
ICCID: 1122334455667788990
|
ICCID: 1122334455667788990
|
||||||
IMSI: 001010000000102
|
IMSI: 001010000000102
|
||||||
GID1: ffffffffffffffffffff
|
GID1: ffffffffffffffffffff
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
Using PC/SC reader (dev=3) interface
|
Using PC/SC reader (dev=3) interface
|
||||||
Reading ...
|
Reading ...
|
||||||
|
Autodetected card type: sysmosim-gr1
|
||||||
ICCID: 1122334455667788990
|
ICCID: 1122334455667788990
|
||||||
IMSI: 001010000000102
|
IMSI: 001010000000102
|
||||||
GID1: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
GID1: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
||||||
|
|||||||
Reference in New Issue
Block a user