Linux的Magic文件解析问题

zw0283 2016-06-06 03:28:57
如题,情景是这样的:
我需要根据文件的Magic Number来判断文件的MIMEType。因为用后缀名判断不是很好的方案。经过查找资料之后,发现Linux的magic文件能做到这一点,我把我虚拟机的magic文件弄了出来(centos 6.8)。然后也查阅的相关的资料。了解了magic文件的格式中每个段表示的什么意思。


然后有了如下问题:
我需要解析magic文件(Java语言)。我举个例子:
我截取了一段magic文件的内容,内容如下:

>8 string/W M4P \b, MPEG v4 system, iTunes AES encrypted
>8 string/W M4B \b, MPEG v4 system, iTunes bookmarked
>8 string/W qt \b, Apple QuickTime movie
!:mime video/quicktime ------------------------------- 1

# MPEG sequences
# Scans for all common MPEG header start codes
0 belong 0x00000001
>4 byte&0x1F 0x07 JVT NAL sequence, H.264 video
>>5 byte 66 \b, baseline
>>5 byte 77 \b, main
>>5 byte 88 \b, extended
>>7 byte x \b @ L %u
0 belong&0xFFFFFF00 0x00000100
>3 byte 0xBA MPEG sequence
!:mime video/mpeg ------------------------------2
>>4 byte &0x40 \b, v2, program multiplex
>>4 byte ^0x40 \b, v1, system multiplex
>3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header)
>3 byte&0x1F 0x07 MPEG sequence, H.264 video
>>4 byte 66 \b, baseline
>>4 byte 77 \b, main
>>4 byte 88 \b, extended
>>6 byte x \b @ L %u
>3 byte 0xB0 MPEG sequence, v4
!:mime video/mpeg4-generic ------------------------------------3
>>5 belong 0x000001B5
>>>9 byte &0x80
>>>>10 byte&0xF0 16 \b, video
>>>>10 byte&0xF0 32 \b, still texture
>>>>10 byte&0xF0 48 \b, mesh
>>>>10 byte&0xF0 64 \b, face
>>>9 byte&0xF8 8 \b, video
>>>9 byte&0xF8 16 \b, still texture
>>>9 byte&0xF8 24 \b, mesh
>>>9 byte&0xF8 32 \b, face
>>4 byte 1 \b, simple @ L1
>>4 byte 2 \b, simple @ L2
>>4 byte 3 \b, simple @ L3

.....................................省略N行................................


>>7 byte&0x0F 6 \b, 50 fps
>>7 byte&0x0F 7 \b, 59.94 fps
>>7 byte&0x0F 8 \b, 60 fps
>>11 byte &0x04 \b, Constrained

# MPEG ADTS Audio (*.mpx/mxa/aac)
# from dreesen@math.fu-berlin.de
# modified to fully support MPEG ADTS

# MP3, M1A
# modified by Joerg Jenderek
# GRR the original test are too common for many DOS files
# so don't accept as MP3 until we've tested the rate
0 beshort&0xFFFE 0xFFFA
# rates
>2 byte&0xF0 0x10 MPEG ADTS, layer III, v1, 32 kbps
!:mime audio/mpeg ------------------------- 4


1、在上边这段代码里,第8-15行是用来判断video/mpeg这个MIME Type的。对么?
2、video/mpeg4-generic这个MIMEType该怎么解释?!:mime video/mpeg4-generic这句话,上边和下边都有关于它的配置。我该怎么区分它的边界呢?
简而言之,在上边代码中,1和2的边界我能看明白,因为他们的格式都是一堆匹配条件,最后给个结果,但是3的边界怎么判断呢?因为在3中,有一部分匹配条件在3上方,有一部分在下方。我怎么把3的下方的条件个4的上方的条件划分开呢?我能看注释明白边界的位置,但是程序不认识注释啊。怎么把3和4的条件区分开?

3、关于第一个>符号,这个是相对位置,还是绝对位置啊?
例如:


2 xx xx xx
>4 xx xx xx
!:mimetype xx

这个要判断第二行条件的话。是从第4位开始取,还是从第6位开始取?

希望知道的前辈能予以解答一下,感激不尽。
...全文
318 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zw0283 2016-07-06
  • 打赏
  • 举报
回复
这么久都没人回答。。。哎。。。。

18,771

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧