mscdex/mmmagic

GitHub: mscdex/mmmagic

为Node.js提供异步的libmagic绑定,通过检查文件魔数和内容特征来精准识别文件类型与MIME信息。

Stars: 627 | Forks: 53

# 描述 一个用于 [node.js](http://nodejs.org/) 的异步 libmagic 绑定,用于通过数据检查来检测内容类型。 [![构建状态](https://travis-ci.org/mscdex/mmmagic.svg?branch=master)](https://travis-ci.org/mscdex/mmmagic) [![构建状态](https://ci.appveyor.com/api/projects/status/mva462lka1ap5a3t)](https://ci.appveyor.com/project/mscdex/mmmagic) # 环境要求 * [node.js](http://nodejs.org/) -- v4.0.0 或更新版本 # 安装 ``` npm install mmmagic ``` # 示例 * 获取文件的一般描述: ``` var Magic = require('mmmagic').Magic; var magic = new Magic(); magic.detectFile('node_modules/mmmagic/build/Release/magic.node', function(err, result) { if (err) throw err; console.log(result); // output on Windows with 32-bit node: // PE32 executable (DLL) (GUI) Intel 80386, for MS Windows }); ``` * 获取文件的 MIME 类型: ``` var mmm = require('mmmagic'), Magic = mmm.Magic; var magic = new Magic(mmm.MAGIC_MIME_TYPE); magic.detectFile('node_modules/mmmagic/build/Release/magic.node', function(err, result) { if (err) throw err; console.log(result); // output on Windows with 32-bit node: // application/x-dosexec }); ``` * 获取文件的 MIME 类型和 MIME 编码: ``` var mmm = require('mmmagic'), Magic = mmm.Magic; var magic = new Magic(mmm.MAGIC_MIME_TYPE | mmm.MAGIC_MIME_ENCODING); // the above flags can also be shortened down to just: mmm.MAGIC_MIME magic.detectFile('node_modules/mmmagic/build/Release/magic.node', function(err, result) { if (err) throw err; console.log(result); // output on Windows with 32-bit node: // application/x-dosexec; charset=binary }); ``` * 获取 Buffer 内容的一般描述: ``` var Magic = require('mmmagic').Magic; var magic = new Magic(), buf = new Buffer('import Options\nfrom os import unlink, symlink'); magic.detect(buf, function(err, result) { if (err) throw err; console.log(result); // output: Python script, ASCII text executable }); ``` # API ## Magic 方法 * **(constructor)**([< _mixed_ >magicSource][, < _Integer_ >flags]) - 创建并返回一个新的 Magic 实例。`magicSource`(如果指定)可以是指向要使用的(兼容的)magic 文件的路径字符串,*或者*是包含(兼容的)magic 文件内容的 _Buffer_。如果 `magicSource` 不是字符串且不是 `false`,则将使用捆绑的 magic 文件。如果 `magicSource` 是 `false`,mmmagic 将默认搜索要使用的 magic 文件(magic 文件搜索顺序:`MAGIC` 环境变量 -> 各种文件系统路径(参见 `man file`))。flags 是一个位掩码,具有以下有效值(作为 `require('mmmagic')` 上的常量可用): * **MAGIC\_NONE** - 未设置标志 * **MAGIC\_DEBUG** - 开启调试 * **MAGIC\_SYMLINK** - 跟随符号链接 **(非 Windows 系统的默认值)** * **MAGIC\_DEVICES** - 查看设备内容 * **MAGIC\_MIME_TYPE** - 返回 MIME 类型 * **MAGIC\_CONTINUE** - 返回所有匹配项(以字符串数组形式返回) * **MAGIC\_CHECK** - 打印警告到 stderr * **MAGIC\_PRESERVE\_ATIME** - 退出时恢复访问时间 * **MAGIC\_RAW** - 不转换不可打印字符 * **MAGIC\_MIME\_ENCODING** - 返回 MIME 编码 * **MAGIC\_MIME** - (**MAGIC\_MIME\_TYPE** | **MAGIC\_MIME\_ENCODING**) * **MAGIC\_APPLE** - 返回 Apple 创建者和类型 * **MAGIC\_NO\_CHECK\_TAR** - 不检查 tar 文件 * **MAGIC\_NO\_CHECK\_SOFT** - 不检查 magic 条目 * **MAGIC\_NO\_CHECK\_APPTYPE** - 不检查应用程序类型 * **MAGIC\_NO\_CHECK\_ELF** - 不检查 elf 详情 * **MAGIC\_NO\_CHECK\_TEXT** - 不检查文本文件 * **MAGIC\_NO\_CHECK\_CDF** - 不检查 cdf 文件 * **MAGIC\_NO\_CHECK\_TOKENS** - 不检查令牌 * **MAGIC\_NO\_CHECK\_ENCODING** - 不检查文本编码 * **detectFile**(< _String_ >path, < _Function_ >callback) - _(void)_ - 检查 path 所指向的文件。callback 接收两个参数:出错时的 < _Error_ > 对象(否则为 null),以及包含检查结果的 < _String_ >。 * **detect**(< _Buffer_ >data, < _Function_ >callback) - _(void)_ - 检查 data 的内容。callback 接收两个参数:出错时的 < _Error_ > 对象(否则为 null),以及包含检查结果的 < _String_ >。
标签:C++绑定, DNS 解析, GNU通用公共许可证, libmagic, magic numbers, MIME类型, MITM代理, mmmagic, Node.js, npm包, 二进制分析, 云安全运维, 内容检测, 字符编码检测, 异步库, 数据检查, 文件格式识别, 文件类型检测