File 如何识别文件的文件类型?
如何确定文件的确切文件类型?为了更好地理解,我将提供更多细节: 例如,如果我有一个名为“example.exe”的文件,那么我可以很容易地识别它是一个windows可执行文件(通过查看扩展名.exe)。但是如果我删除扩展名(.exe),那么通过查看,我无法识别文件的类型 那么现在我如何识别文件类型呢 (请使用c/c++、java、python或php(用于web上载)提供答案) 谢谢没有“精确的文件类型”这样的东西。二进制数据是二进制数据 如果在类似POSIX的系统上运行,可以使用File 如何识别文件的文件类型?,file,File,如何确定文件的确切文件类型?为了更好地理解,我将提供更多细节: 例如,如果我有一个名为“example.exe”的文件,那么我可以很容易地识别它是一个windows可执行文件(通过查看扩展名.exe)。但是如果我删除扩展名(.exe),那么通过查看,我无法识别文件的类型 那么现在我如何识别文件类型呢 (请使用c/c++、java、python或php(用于web上载)提供答案) 谢谢没有“精确的文件类型”这样的东西。二进制数据是二进制数据 如果在类似POSIX的系统上运行,可以使用file命令猜
file
命令猜测文件类型。我不认为这给了你一个哑剧类型
如果您的服务器运行Apache,那么您可以使用mod_mime_magic进行猜测
如果您使用的是PHP,您可以安装扩展名。没有“确切的文件类型”这样的东西。二进制数据是二进制数据
如果在类似POSIX的系统上运行,可以使用file
命令猜测文件类型。我不认为这给了你一个哑剧类型
如果您的服务器运行Apache,那么您可以使用mod_mime_magic进行猜测
如果您使用的是PHP,则可以安装扩展名。您需要知道要处理的每种文件类型的规范 使用此规范,您可以创建一个方法来检查给定文件是否属于特定类型 例如:
isExe(File)
isJpg(File)
您需要知道要处理的每个文件类型的规范 使用此规范,您可以创建一个方法来检查给定文件是否属于特定类型 例如:
isExe(File)
isJpg(File)
如果要查找文件扩展名,请尝试使用以下简单代码:
$ext = pathinfo($filename, PATHINFO_EXTENSION);
如果要查找文件扩展名,请尝试使用以下简单代码:
$ext = pathinfo($filename, PATHINFO_EXTENSION);
对于Python:Python魔术库提供
您需要的功能
您可以使用安装库
pip install python-magic
并按如下方式使用:
>>> import magic
>>> magic.from_file('sampleone.jpg')
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file('sampletwo.png')
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
对于Python:Python魔术库提供
您需要的功能
您可以使用安装库
pip install python-magic
并按如下方式使用:
>>> import magic
>>> magic.from_file('sampleone.jpg')
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file('sampletwo.png')
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
我们无法仅从扩展名识别文件类型。可以很容易地将文件的扩展名从.text更改为.exe,但这并不意味着该文件是有效的可执行文件 假设我们在windows平台上: 可移植可执行文件[PE]是本机Win32文件格式。除VXD和16位dll外,每个可执行文件都使用PE文件格式。32位dll、exe、COM文件、OCX控件、CPL文件、.NET可执行文件、, NT的内核模式驱动程序都是PE格式。 现在进一步移动PE格式有其预定义的结构,它由不同的头、节头、节数据等组成,其中包含有关地址、大小和可执行代码的信息 标头包含一些签名文件: e、 g可执行文件在DOS头中始终具有MZ(0x5A4D)值,在PE头中始终具有PE(0x4550)值 从上述值中,我们可以区分为可执行文件和非可执行文件 现在转向不可执行: 考虑.jpg文件:我们使用不同的工具来生成.jpg文件。在创建.jpg文件时,此工具在头文件中添加签名(类似于0xd8ff),并在数据部分中添加有关图像的二进制数据。 当打开.jpg文件时,软件读取头字段中的签名,若找到有效的签名,它将根据节中的二进制数据绘制图像 类似地,.pdf,.mp3,。。。文件将具有唯一的签名 .text文件将不具有任何签名。数据将从文本文件的第一个偏移量可用 标题信息可通过以下方式查看:
CreateFile(...)//ReadMode
CreateFileMapping(...)
MapViewOfFile(...)
一旦映射了文件视图,就可以使用winnt.h中定义的以下结构检索头信息
IMAGE_DOS_HEADER
IMAGE_NT_HEADER
签名应与图像\u DOS\u头的e\u幻方域匹配,如果是MZ(0x5A4D),则再次与图像\u NT\u头的签名域匹配。我们无法仅从扩展名识别文件类型。可以很容易地将文件的扩展名从.text更改为.exe,但这并不意味着该文件是有效的可执行文件 假设我们在windows平台上: 可移植可执行文件[PE]是本机Win32文件格式。除VXD和16位dll外,每个可执行文件都使用PE文件格式。32位dll、exe、COM文件、OCX控件、CPL文件、.NET可执行文件、, NT的内核模式驱动程序都是PE格式。 现在进一步移动PE格式有其预定义的结构,它由不同的头、节头、节数据等组成,其中包含有关地址、大小和可执行代码的信息 标头包含一些签名文件: e、 g可执行文件在DOS头中始终具有MZ(0x5A4D)值,在PE头中始终具有PE(0x4550)值 从上述值中,我们可以区分为可执行文件和非可执行文件 现在转向不可执行: 考虑.jpg文件:我们使用不同的工具来生成.jpg文件。在创建.jpg文件时,此工具在头文件中添加签名(类似于0xd8ff),并在数据部分中添加有关图像的二进制数据。 当打开.jpg文件时,软件读取头字段中的签名,若找到有效的签名,它将根据节中的二进制数据绘制图像 类似地,.pdf,.mp3,。。。文件将具有唯一的签名 .text文件将不具有任何签名。数据将从文本文件的第一个偏移量可用 标题信息可通过以下方式查看:
CreateFile(...)//ReadMode
CreateFileMapping(...)
MapViewOfFile(...)
一旦映射了文件视图,就可以使用winnt.h中定义的以下结构检索头信息
IMAGE_DOS_HEADER
IMAGE_NT_HEADER
签名应该与IMAGE_DOS_头的e_魔法域匹配,如果它是MZ(0x5A4D),那么再次与IMAGE_NT_头的签名域匹配。例如,如果我有一个名为“example.exe”的文件,那么我可以很容易地识别它是一个windows可执行文件(通过查看扩展名.exe),当我打开它时会怎么样