File 如何识别文件的文件类型?

File 如何识别文件的文件类型?,file,File,如何确定文件的确切文件类型?为了更好地理解,我将提供更多细节: 例如,如果我有一个名为“example.exe”的文件,那么我可以很容易地识别它是一个windows可执行文件(通过查看扩展名.exe)。但是如果我删除扩展名(.exe),那么通过查看,我无法识别文件的类型 那么现在我如何识别文件类型呢 (请使用c/c++、java、python或php(用于web上载)提供答案) 谢谢没有“精确的文件类型”这样的东西。二进制数据是二进制数据 如果在类似POSIX的系统上运行,可以使用file命令猜

如何确定文件的确切文件类型?为了更好地理解,我将提供更多细节:

例如,如果我有一个名为“example.exe”的文件,那么我可以很容易地识别它是一个windows可执行文件(通过查看扩展名.exe)。但是如果我删除扩展名(.exe),那么通过查看,我无法识别文件的类型

那么现在我如何识别文件类型呢

(请使用c/c++、java、python或php(用于web上载)提供答案)

谢谢

没有“精确的文件类型”这样的东西。二进制数据是二进制数据

如果在类似POSIX的系统上运行,可以使用
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),当我打开它时会怎么样