Esempio n. 1
0
def parseFile(filename):
  global input_file
  input_file = open(filename)
  #input_file = open(sys.argv[1])
  #text = input_file.readlines()
  text_head = input_file.readline()
  print text_head

  progress = True
  dun_data = None
  while True:
    if progress == True:
        dun_data = put_DUNtext()
        progress = False
    txt = "Print single Info           (1)\n"\
          "Print single Blob           (2)\n"\
          "Decode PDU message          (3)\n"\
          "Add record to opened base   (4)\n"\
          "Stop                      (ESC)\n"\
          "Next           (Enter or Space): "
    if dun_data.info == 'OK':
        print "Parse completed!\n"
        break
    sys.stdout.write(txt)
    c = fixes.getch()
    print ord(c)
    #c = raw_input('Press y to continue, or n to exit: ')
    if   c.upper() == '1':
        print "Entered 1"
    elif c.upper() == '2':
        print "Entered 2"
    elif c.upper() == '3':
        print "Entered 3"
        #print dun_data.info
        #print dun_data.data
        # Parses PDU packet
        dun_bin = dun_data.data.decode("hex")
        parsePDU(dun_bin)
    elif c.upper() == '4':
        print "Entered 4"
        global g_base_dbs
        g_base_dbs.insertSMS(pdu_bin=dun_bin)
    elif c == chr(27): break
    else:
        #print "Enter correct data"
        print "Entered any other key"
        progress = True
Esempio n. 2
0
def decodeTest(cmd_idx, data=None):
    import struct, binascii
    if   cmd_idx == '1':
      f_data  = None
      is_file = False
      if data:
          f_data = data
      else:
          f = open('1_MPA3_001.bkp', 'rb')  # SMS
          f_data = f.read()
          is_file = True
      f_len  = len(f_data)

      idx = 0
      pdu = True
      while True:
        #idx = 3 # 0, 1, 2, 3, ...
        pkt = f_data[ 0+(idx)*(186): 186+(idx)*(186)]
        pkt_one = pkt[  0:   1]
        i = pkt.index('\xff')
        t_test  = pkt[  0:  176]

        import re
        import datetime
        #from datetime import *
        #from dateutil import *
        #from dateutil.tz import *
        from dateutil import tz
        #object = re.compile( ur"(.)\1{1,}$" )
        #result = object.finditer( u"hellowffffff" )
        #object = re.compile( b"(.)\xFF{1,}$" )
        #result = object.finditer( b"\xAA\xBB\xCC\xDD\xDD\xEE\xAB\xFF\xFF" )
        object = re.compile( b"(.)\xFF{1,}$" )
        result = object.finditer( t_test )
        group_name_by_index = dict( [ (v, k) for k, v in object.groupindex.items() ] )
        print group_name_by_index
        for match in result :
          #vv1 = match.groups()
          #vvv = match.span( vv1[0] + 1 )
          #print "vvv[0]: " + vvv[0]
          for group_index, group in enumerate( match.groups() ) :
            if group :
              print "text: %s" % group
              print "position: %d, %d" % match.span( group_index + 1 )
              vv = match.span( group_index + 1 )
              print vv[0]+1
              i = vv[0]+1
              #print "group: %s" % group_name_by_index[ group_index + 1 ]
            else:
              i = 176

        t_data  = pkt[  1:  i]
        #j = pkt.rfind('\xff') + 1
        #pkt__ff = pkt[  i:  j]
        #pkt_two = pkt[  j:186]
        pkt__ff = pkt[  i:176]
        pkt_two = pkt[176:186]
        h_data = t_data.encode('hex')
        print " index " + str(idx)
        print "     pkt_one: " + pkt_one.encode('hex')
        print "      t_data: " + h_data
        print " len(t_data): " + str(len(t_data))
        print "     pkt__ff: " + pkt__ff.encode('hex')
        print "     pkt_two: " + pkt_two.encode('hex')
        pkt_two_datetime   = pkt_two[0:4]
        pkt_two_datetime_r = pkt_two_datetime[::-1]
        pkt_two_datetime_h = pkt_two_datetime_r.encode('hex')
        recoverstamp       = struct.unpack('<L', pkt_two_datetime)[0]
        recovernow         = datetime.datetime.fromtimestamp(recoverstamp)
        #recovernow         = datetime.fromtimestamp(recoverstamp)
        recovernow_str     = recovernow.strftime("%Y-%m-%d %H:%M:%S")
        # auto-detect zones:
        utc_zone   = tz.tzutc()
        local_zone = tz.tzlocal()
        recovernow = recovernow.replace(tzinfo=local_zone)
        recovernow_2     = recovernow.astimezone(utc_zone)
        recovernow_str_2 = recovernow_2.strftime("%Y-%m-%d %H:%M:%S")
        print "       - datetime: " + pkt_two_datetime_h \
                                    + ' (' + str(recoverstamp) + ') ' \
                                    + recovernow_str_2
        if pdu == True and len(t_data)>0 and (pkt_one=='\x01' or pkt_one=='\x05'):
          parsePDU(t_data)

        txt = "Print prev packet       (1)\n"\
              "Print next packet       (2)\n"\
              "Decode/No PDU message   (3)\n"\
              "Add to opened base      (4)\n"\
              "Stop                    (ESC)\n"
        sys.stdout.write(txt)
        c = fixes.getch()
        if   c.upper() == '1':
          if idx > 0:
            idx = idx - 1
        elif c.upper() == '2':
          if 186+(idx)*(186) < f_len:
            idx = idx + 1
        elif c.upper() == '3':
          pdu = not pdu
        elif c.upper() == '4':
          global g_base_dbs
          g_base_dbs.insertSMS(pdu_bin=t_data)
          print "Success added sms to opened base"
        elif c == chr(27): break
        else:
          #print "Enter correct data"
          print "Entered any other key"

      if is_file:
        f.close()
    elif cmd_idx == '2':
        f = open('MP0C_004.bkp', 'rb')  # ? Ext Phonebook
        f_data = f.read()
        f_len  = len(f_data)
        f.close()
    elif cmd_idx == '3':
        f = open('MPD1_001.bkp', 'rb')  # Phonebook
        f_data = f.read()
        f_len  = len(f_data)
        f.close()
    else:
        print "Enter actual command"