适用于从服务器的应用目录扫描含有ip信息文件,目录可以通过参数指定,也可以不指定,若不指定则自行根据容器类型扫描对应目录下的文件,示例如下:
示例1.PNG 示例2.PNG 示例3.PNG 示例4.PNG代码如下:
#!/bin/sh
#定义数组
declare -a filename
declare -a contentinfo
#获取本机ip
host=`hostname -i`
#获取进程信息,界定容器类型
ins_tomcat=`ps -ef|grep -v 'grep'|grep "\-Dcatalina.base"|wc -l`
ins_was=`ps -ef|grep -v 'grep'|grep "nodeagent"|wc -l`
ins_weblogic=`ps -ef|grep -v 'grep'|grep "Dweblogic.Name"|wc -l`
ins_nginx=`ps -ef|grep "nginx"|grep -v 'grep'|grep "master process"|wc -l`
IFS='
'
#确定应用目录
if [ $# -gt 0 ];then
thepath=$1
else
if [ $ins_tomcat -gt 0 ];then
thepath=`ps -ef|grep "\-Dcatalina.base"|grep -v 'grep'|awk -F "-Dcatalina.base=" '{print $2}'|grep -v 'print'|awk '{print $1}'`
elif [ $ins_was -gt 0 ];then
thepath=`ps -ef|grep "nodeagent"|grep -v 'grep'|awk -F 'Dwas.install.root=' '{print $2}'|awk '{print $1}'`
elif [ $ins_weblogic -gt 0 ];then
thepath=`cat /wls/serveradmin/conf/env/*.env|grep "APP_HOME"|head -1|awk -F '=' '{print $2}'`
elif [ $ins_nginx -gt 0 ];then
thepid=`ps -ef|grep "nginx"|grep "master process"|grep -v 'grep'|awk '{print $2}'`
thepath=`lsof|grep $thepid|grep 'txt'|awk '{print $9}'|awk -F '/sbin' '{print $1}'`
else
echo '[ERROR] 获取路径失败,请检查!'
fi
fi
#获取待扫描目标文件列表
files=`find $thepath -type f ! -name "*.log" -a ! -name "*.jar" -a ! -name "*.bak" -a ! -name "*.bak*" -a ! -name "*.gz" -a ! -name "*.log*" -a ! -name "*.out" -a ! -name "*.class" -print 2>/dev/null`
#扫描ip地址
for file in $files
do
elfcheck=`readelf -h $file 2>/dev/null`
filetypecheck=`file -b $file|awk '{print $1}'`
if [ -z "$elfcheck" -o "$filetypecheck" != "ELF" ];then
findinfo=`grep -n -o '[1-9][0-9]\{0,2\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' $file 2>/dev/null|uniq`
if [ -n "${findinfo}" ];then
filename=(${filename[*]} $file)
contentinfo=$contentinfo"文件"$file"\n第"$findinfo"\n"
((number++))
fi
else
echo "[INFO] "$file"是编译后的ELF文件,跳过扫描."
fi
done
wait
#结果展示
filecount=${#filename[@]}
echo "*********************************************************************"
if [ $filecount -gt 0 ];then
echo "[INFO] 主机$host共有如下$filecount个文件存在符合条件的ip:"
for ii in ${filename[@]}
do
echo " ${ii}"
done
echo "[INFO] ip分布情况如下:"
echo "-----------------------------------------------------"
for theinfo in $contentinfo;do
echo -e "第"${theinfo//:/行存在ip:}
done
echo "-----------------------------------------------------"
else
echo "[INFO] 主机$host没有文件存在符合条件的ip"
fi
echo "*********************************************************************"
网友评论