java我怎样才能知道我使用的是什么版本的Log4J? 1 周,5 日 Questions & Answers 181017 标题说明了一切。我们都知道,至少有4或5个log4j jar最终位于类路径中。我如何知道我使用的是哪个版本
# 1 楼答案 这取决于类加载器,但是看看example,您可以在log4j的Layout类上调用方法getImplementationVersion: org.apache.log4j.Layout.class.getPackage().getImplementationVersion()
# 2 楼答案 我不认为这是首选方法,但这是我确定软件使用的Log4j版本的方式: 打开或提取Log4j的内容。使用一个罐子。zip存档实用程序(Windows资源管理器支持此功能)。导航到“META-INF”子目录&;在文本编辑器中打开文件“MANIFEST.MF”。找到以“实现版本”开头的行,这是Log4j版本 显然,这不是一个程序化的解决方案。但如果你只是想知道你使用的是什么版本;你有。jar存档,很有效 编辑:我注意到Package.getSpecificationVersion()&^如Loic M.'s answer中所述,为他人工作。jar库,但不是我的Log4j。我使用的版本可能不支持它 编辑:我下载了版本2.13.1来尝试上述方法&;发现他们确实在用它。所以我的版本(1.2.16)不支持它们&;返回null
# 4 楼答案 我已经编写了一个小的bash脚本来检查该服务器中每个log4jjar文件的版本。它从清单文件中读取版本信息,因为信任文件名有点风险 locs=( $(sudo find / -name 'log4j*'|grep jar) ) fcount=${#locs[@]} echo "Found $fcount jar files" echo " " for (( j=0; j<${fcount}; j++ )); do unzip ${locs[$j]} META-INF/MANIFEST.MF mv META-INF/MANIFEST.MF META-INF/MANIFEST$j.MF done echo " " for (( j=0; j<${fcount}; j++ )); do echo ${locs[$j]} tail -2 META-INF/MANIFEST$j.MF done
# 6 楼答案 我是在得知我的服务器可能容易受到新的log4j(CVE-2021-44228)攻击后来到这里的 所以我需要知道我是否安装了过时的版本2。这里的其他答案对此没有帮助,因为它们是为了让运行java代码的人知道它将使用哪个版本的log4j,而我需要知道任何java应用程序是否可能使用易受攻击的版本 以下是我所做的: sudo find / -name 'log4j*' 这列出了我(Linux)服务器上所有与log4j相关的文件。这给我看了几个1。x版本,不易受攻击,以及一个2.15.0文件,该文件已包含CVE的修复程序 如果你运行这个程序,发现文件名或文件夹名有2个。x、 与x<;15,那么你很可能容易受到攻击,需要弄清楚如何尽快更新你的文件 小心 有人警告我,对于我来说,这还不够,因为log4j文件可能隐藏在一个文件中。jar文件,find命令找不到该文件 更新 这是一个公共项目,它试图扫描所有内容。jar文件,以便在归档文件中查找log4j代码: https://github.com/mergebase/log4j-detector
# 1 楼答案
这取决于类加载器,但是看看example,您可以在log4j的
Layout
类上调用方法getImplementationVersion
:# 2 楼答案
我不认为这是首选方法,但这是我确定软件使用的Log4j版本的方式:
打开或提取Log4j的内容。使用一个罐子。zip存档实用程序(Windows资源管理器支持此功能)。导航到“META-INF”子目录&;在文本编辑器中打开文件“MANIFEST.MF”。找到以“实现版本”开头的行,这是Log4j版本
显然,这不是一个程序化的解决方案。但如果你只是想知道你使用的是什么版本;你有。jar存档,很有效
编辑:我注意到
Package.getSpecificationVersion()
&^如Loic M.'s answer中所述,为他人工作。jar库,但不是我的Log4j。我使用的版本可能不支持它编辑:我下载了版本2.13.1来尝试上述方法&;发现他们确实在用它。所以我的版本(1.2.16)不支持它们&;返回
null
# 3 楼答案
一个简单的方法:
# 4 楼答案
我已经编写了一个小的bash脚本来检查该服务器中每个log4jjar文件的版本。它从清单文件中读取版本信息,因为信任文件名有点风险
# 5 楼答案
删除所有你不需要的版本的JAR(一个就足够了),并找出剩下版本的JAR,查看文件名。 例如:
# 6 楼答案
我是在得知我的服务器可能容易受到新的log4j(CVE-2021-44228)攻击后来到这里的
所以我需要知道我是否安装了过时的版本2。这里的其他答案对此没有帮助,因为它们是为了让运行java代码的人知道它将使用哪个版本的log4j,而我需要知道任何java应用程序是否可能使用易受攻击的版本
以下是我所做的:
这列出了我(Linux)服务器上所有与log4j相关的文件。这给我看了几个1。x版本,不易受攻击,以及一个2.15.0文件,该文件已包含CVE的修复程序
如果你运行这个程序,发现文件名或文件夹名有2个。x、 与x<;15,那么你很可能容易受到攻击,需要弄清楚如何尽快更新你的文件
小心
有人警告我,对于我来说,这还不够,因为log4j文件可能隐藏在一个文件中。jar文件,
find
命令找不到该文件更新
这是一个公共项目,它试图扫描所有内容。jar文件,以便在归档文件中查找log4j代码:
https://github.com/mergebase/log4j-detector