283
|
1
|
|
2 import argparse
|
|
3
|
|
4 """
|
|
5 ISO 9660 filesystem utility.
|
|
6 """
|
|
7
|
|
8 def read_vol_desc(f):
|
|
9 s = f.read(2048)
|
|
10 ty = s[0]
|
|
11 Id = s[1:6]
|
|
12 assert Id == 'CD001'.encode('ascii')
|
|
13 ver = s[6]
|
|
14 assert ver == 1
|
|
15 data = s[7:]
|
|
16 assert len(data) == 2041
|
|
17 return ty, Id, s
|
|
18
|
|
19 def parse_boot_record(sec):
|
|
20 boot_sys_id = sec[7:39]
|
|
21 boot_id = sec[39:71]
|
|
22 print(boot_sys_id)
|
|
23 print(boot_id)
|
|
24
|
|
25 def parse_primary_volume(sec):
|
|
26 sys_id = sec[8:40]
|
|
27 vol_id = sec[40:72]
|
|
28 print(sys_id)
|
|
29 print(vol_id)
|
|
30
|
|
31 def read_iso(f):
|
|
32 # System area
|
|
33 system = f.read(16 * 2048)
|
|
34 while True:
|
|
35 ty, Id, dat = read_vol_desc(f)
|
|
36 print(ty, Id)
|
|
37 if ty == 255:
|
|
38 break
|
|
39 elif ty == 0:
|
|
40 parse_boot_record(dat)
|
|
41 elif ty == 1:
|
|
42 parse_primary_volume(dat)
|
|
43
|
|
44
|
|
45 if __name__ == '__main__':
|
|
46 with open('mikeos.iso', 'rb') as f:
|
|
47 read_iso(f)
|
|
48
|
|
49
|