Change in ...pysim[master]: Add an option to read the iccid and batch-program the new card data

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Wed Sep 4 18:50:42 UTC 2019


laforge has submitted this change and it was merged. ( https://gerrit.osmocom.org/c/pysim/+/15394 )

Change subject: Add an option to read the iccid and batch-program the new card data
......................................................................

Add an option to read the iccid and batch-program the new card data

This can be used to reprogram everything including IMSI on the card:

while true; do
 ./pySim-prog.py -p 0 -t sysmoUSIM-SJS1 --source=csv --read-csv=cards.csv --read-iccid &&
   paplay complete.oga
 sleep 2
done

Change-Id: Ib343a29141b5255f67a59ab76959b51e162b7916
---
M pySim-prog.py
1 file changed, 26 insertions(+), 9 deletions(-)

Approvals:
  Jenkins Builder: Verified
  dexter: Looks good to me, approved



diff --git a/pySim-prog.py b/pySim-prog.py
index 2ac4dad..8abce0a 100755
--- a/pySim-prog.py
+++ b/pySim-prog.py
@@ -39,7 +39,7 @@
 
 from pySim.commands import SimCardCommands
 from pySim.cards import _cards_classes
-from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn
+from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid
 from pySim.ts_51_011 import EF
 
 def parse_options():
@@ -131,6 +131,9 @@
 	parser.add_option("--read-imsi", dest="read_imsi", action="store_true",
 			help="Read the IMSI from the CARD", default=False
 		)
+	parser.add_option("--read-iccid", dest="read_iccid", action="store_true",
+			help="Read the ICCID from the CARD", default=False
+		)
 	parser.add_option("-z", "--secret", dest="secret", metavar="STR",
 			help="Secret used for ICCID/IMSI autogen",
 		)
@@ -171,8 +174,8 @@
                 return options
 
 	if options.source == 'csv':
-		if (options.imsi is None) and (options.batch_mode is False) and (options.read_imsi is False):
-			parser.error("CSV mode needs either an IMSI, --read-imsi or batch mode")
+		if (options.imsi is None) and (options.batch_mode is False) and (options.read_imsi is False) and (options.read_iccid is False):
+			parser.error("CSV mode needs either an IMSI, --read-imsi, --read-iccid or batch mode")
 		if options.read_csv is None:
 			parser.error("CSV mode requires a CSV input file")
 	elif options.source == 'cmdline':
@@ -444,7 +447,7 @@
 		cw.writerow([params[x] for x in row])
 		f.close()
 
-def _read_params_csv(opts, imsi):
+def _read_params_csv(opts, iccid=None, imsi=None):
 	import csv
 	f = open(opts.read_csv, 'r')
 	cr = csv.DictReader(f)
@@ -452,11 +455,15 @@
         if not 'iccid' in cr.fieldnames:
             raise Exception("CSV file in wrong format!")
 	for row in cr:
-		if opts.num is not None and opts.read_imsi is False:
+		if opts.num is not None and opts.read_iccid is False and opts.read_imsi is False:
 			if opts.num == i:
 				f.close()
 				return row;
 			i += 1
+		if row['iccid'] == iccid:
+			f.close()
+			return row;
+
 		if row['imsi'] == imsi:
 			f.close()
 			return row;
@@ -464,8 +471,8 @@
 	f.close()
 	return None
 
-def read_params_csv(opts, imsi):
-	row = _read_params_csv(opts, imsi)
+def read_params_csv(opts, imsi=None, iccid=None):
+	row = _read_params_csv(opts, iccid=iccid, imsi=imsi)
 	if row is not None:
 		row['mcc'] = int(row.get('mcc', row['imsi'][0:3]))
 		row['mnc'] = int(row.get('mnc', row['imsi'][3:5]))
@@ -655,7 +662,17 @@
 		if opts.source == 'cmdline':
 			cp = gen_parameters(opts)
 		elif opts.source == 'csv':
-			if opts.read_imsi:
+                        imsi = None
+                        iccid = None
+			if opts.read_iccid:
+				if opts.dry_run:
+					# Connect transport
+					print "Insert card now (or CTRL-C to cancel)"
+					sl.wait_for_card(newcardonly=not first)
+				(res,_) = scc.read_binary(['3f00', '2fe2'], length=10)
+				iccid = dec_iccid(res)
+                                print iccid
+                        elif opts.read_imsi:
 				if opts.dry_run:
 					# Connect transport
 					print "Insert card now (or CTRL-C to cancel)"
@@ -664,7 +681,7 @@
 				imsi = swap_nibbles(res)[3:]
 			else:
 				imsi = opts.imsi
-			cp = read_params_csv(opts, imsi)
+			cp = read_params_csv(opts, imsi=imsi, iccid=iccid)
 		if cp is None:
 			print "Error reading parameters\n"
 			sys.exit(2)

-- 
To view, visit https://gerrit.osmocom.org/c/pysim/+/15394
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Ib343a29141b5255f67a59ab76959b51e162b7916
Gerrit-Change-Number: 15394
Gerrit-PatchSet: 1
Gerrit-Owner: daniel <dwillmann at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann at sysmocom.de>
Gerrit-Reviewer: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at gnumonks.org>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190904/e9f1894b/attachment.htm>


More information about the gerrit-log mailing list