如何在.jar文件中检查Log4j的版本号?

yvfmudvl  于 2022-11-06  发布在  其他
关注(0)|答案(6)|浏览(544)

我有一个.jar项目,它可能正在使用Log4j。我如何检查该Log4j的版本号?
这是一个可执行的JAR文件。我没有源代码,无法反编译它。

whlutmcx

whlutmcx1#

解压缩JAR文件并查找清单文件(META-INF\MANIFEST.MF)

unzip -p file.jar META-INF/MANIFEST.MF
axkjgtzd

axkjgtzd2#

有两种方法可以做到这一点

方式1:

jar -tfv my.jar | grep -i log4

  23590 Tue Aug 10 10:51:24 IST 2021 log4j-slf4j-impl-2.13.3.jar
  32722 Tue Aug 10 10:51:24 IST 2021 log4j-web-2.13.3.jar
1714164 Tue Aug 10 10:51:24 IST 2021 log4j-core-2.13.3.jar
  23702 Tue Aug 10 10:51:24 IST 2021 log4j-over-slf4j-1.7.30.jar
 292301 Tue Aug 10 10:51:24 IST 2021 log4j-api-2.13.3.jar
  11259 Tue Aug 10 10:50:10 IST 2021 log4j2.xml

方式二:

unzip -l my.jar | grep -i log4

    23590  08-10-2021 10:51   log4j-slf4j-impl-2.13.3.jar
    32722  08-10-2021 10:51   log4j-web-2.13.3.jar
  1714164  08-10-2021 10:51   log4j-core-2.13.3.jar
    23702  08-10-2021 10:51   log4j-over-slf4j-1.7.30.jar
   292301  08-10-2021 10:51   log4j-api-2.13.3.jar
    11259  08-10-2021 10:50   log4j2.xml
ac1kyiln

ac1kyiln3#

org.apache.log4j.Layout.class.getPackage().getImplementationVersion()
dw1jzc5e

dw1jzc5e4#

如果您拥有对服务器或主机的sudo shell访问权限,则可以使用以下命令或类似命令快速获得令人不快的答案:
sudo find / -name "*log4j*" -print -exec unzip -p {} META-INF/MANIFEST.MF \;
正如在其他回答中提到的,这并不适用于所有JAR文件,但似乎对我来说是这样。

68bkxrlz

68bkxrlz5#

解压缩应用程序的JAR文件,并检查目录“META-INF\maven\org.apache.logging.log4j\log4j-core”中存在的 pom.xml/属性文件中的版本

vpfxa7rd

vpfxa7rd6#

如果你在Linux上,这会有帮助。它会寻找Log4j JAR文件,提取它们的清单文件,并打印Implementation-Version:行,这将显示Log4j的版本。

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

相关问题