Pythonはネットフレームなどのバイトファイルを処理する——CRC 8検査
6500 ワード
#!/usr/bin/python
# -*- coding: utf-8 -*-
def crc8(line_):
# 010101 , 'f' 6 0x0 , '0b'
line_ = bin(int('f' + line_, 16))[6:]
# print line_
reg = 0
for bit in line_:
if reg & 0x80 != 0:
reg <<= 1
# reg 8bit
reg &= 0xff
if bit == '1':
reg += 1
reg &= 0xff
reg ^= 0x07
else:
reg <<= 1
reg &= 0xff
if bit == '1':
reg += 1
reg &= 0xff
# print reg
# break
return reg & 0xff
# , "aaaaaaaaaaab00000463adc"
filename = "ch03_mac_frame_data"
content = ""
with open(filename, "rb") as f:
while True:
# ( !!), 16
c = f.read(1)
if not c:
break
byte = hex(ord(c))
# 0x8 0x08
if len(byte) == 3:
# print 'original byte:', byte
byte = '0x0' + byte[2]
# print byte
# 0x
content += byte[2:4]
# print type(hex(ord(c)))
# print content
# ,aaaaaaaaaaaaaaab
result = content.split("aaaaaaaaaaaaaaab")[1:5]
# print len(result)
for line in result:
# ( , , care)
print
# print line
# crc-8
print " crc-8 :"
if crc8(line) != 0:
print " !"
else:
print " !"
print " MAC :", line[0:12]
print " MAC :", line[12:24]
print " :", line[24:28]
# "aaaa" ,ascii
text = line[28:len(line) - 4]
real_text = ""
for i in range(0, len(text), 2):
# text 16 , "aaad16b6", , "aa", , chr() ascii
cc = int(text[i:i + 2], 16)
character = chr(cc)
real_text += character
print " :", real_text
print "FCS:", line[len(line) - 4:len(line)]
主に注意が必要なのは
bin()
・chr()
・ord()
・hex()
これらの関数の使用です.