Bash 如何通过CURL将TCPDUMP输出发送到远程脚本
我这里有一个脚本,它接受TCPDUMP输出。我们试图通过web($SERVER)向PHP脚本发送(2)个变量。将创建文件名标题,其中包含文件名$FILETOSEND和文件数据。filedata变量的实际数据来自一个名为1的文件(数据的格式如您所知)。我对调用“发送普通10秒转储”的部分有问题 我正在尝试对文件1进行卷曲,并使用CURL--data“$(cat 1)”$服务器进行卷曲 该脚本根本没有发送文件1,主要是发送文件名,没有文件数据。我发送文件的方式有问题吗?有没有更好的格式化方法Bash 如何通过CURL将TCPDUMP输出发送到远程脚本,bash,tcpdump,Bash,Tcpdump,我这里有一个脚本,它接受TCPDUMP输出。我们试图通过web($SERVER)向PHP脚本发送(2)个变量。将创建文件名标题,其中包含文件名$FILETOSEND和文件数据。filedata变量的实际数据来自一个名为1的文件(数据的格式如您所知)。我对调用“发送普通10秒转储”的部分有问题 我正在尝试对文件1进行卷曲,并使用CURL--data“$(cat 1)”$服务器进行卷曲 该脚本根本没有发送文件1,主要是发送文件名,没有文件数据。我发送文件的方式有问题吗?有没有更好的格式化方法 whi
while true; do
sleep $DATASENDFREQ;
killall -9 tcpdump &> /dev/null
if [ -e $DUMP ]; then
mv $DUMP $DUMP_READY
fi
create_dump
DATE=`date +"%Y-%m-%d_%H-%M-%S"`
FILETOSEND=$MAC-$DATE-$VERSION
# we write fileheader to the file. 2 vars : filename, filedata.
FILEHEADER="filename=$FILETOSEND&filedata="
echo $FILEHEADER > 2
# change all colons to underscores for avoiding Windows filenames issues
sed -i 's/:/_/g' 2
# delete all newlines \n in the file
tr -d '\n' < 2 > 1
# parsing $DUMP_READY to awk.txt (no header in awk.txt)
awk '{ if (NF > 18 && $10 == "signal") {print "{\"mac\": \""$16"\",\"sig\": \""$9"\",\"ver\": \""$8"\",\"ts\": \""$1"\",\"ssid\": \""$19"\"}" }}' $DUMP_READY > awk.txt
sed -i 's/SA://g' awk.txt
sed -i 's/&/%26/g' awk.txt
cat awk.txt >> 1
sync
# send $OFFLINE
if [ -e $OFFLINE ]; then
curl -d $OFFLINE $SERVER
if [ $? -eq "0" ]; then
echo "status:dump sent;msg:offline dump sent"
rm $OFFLINE
else
echo "status:dump not sent;msg:offline dump not sent"
fi
fi
# send common 10 secs dump
curl --data "$(cat 1)" $SERVER
if [ $? -eq "0" ]; then
echo "status:dump sent"
else
cat 1 >> $OFFLINE
echo "status:dump not sent"
fi
if [ -e $DUMP_READY ]; then
rm -f $DUMP_READY 1 2 upload_file*
fi
为true时;做
睡眠$DATASENDFREQ;
killall-9 tcpdump&>/dev/null
如果[-e$DUMP];然后
mv$DUMP$DUMP_就绪
fi
创建转储文件
日期=`DATE+%Y-%m-%d\uh-%m-%S“`
FILETOSEND=$MAC-$DATE-$VERSION
#我们将fileheader写入文件。2个变量:文件名、文件数据。
FILEHEADER=“filename=$FILETOSEND&filedata=”
echo$FILEHEADER>2
#将所有冒号更改为下划线,以避免Windows文件名问题
sed-i's/:/g/g'2
#删除文件中的所有换行符\n
tr-d'\n'<2>1
#正在解析$DUMP_READY to awk.txt(awk.txt中没有标题)
awk'{if(NF>18&&$10==“信号”){print“{”mac\“:\”16“,\”sig\:\”9“,”ver\“:\”8“,”ts\“:\”1“,”ssid\“:”19“\”}}}DUMP\u READY>awk.txt
sed-i's/SA://g'awk.txt
sed-i's/&/%26/g'awk.txt
cat awk.txt>>1
同步
#脱机发送$
如果[-e$离线];然后
curl-d$OFFLINE$SERVER
如果[$?-eq“0”];然后
echo“状态:转储已发送;消息:脱机转储已发送”
rm$离线
其他的
echo“状态:转储未发送;消息:脱机转储未发送”
fi
fi
#发送公共10秒转储
curl--数据“$(第1类)”$服务器
如果[$?-eq“0”];然后
回显“状态:转储已发送”
其他的
第1类>>$OFFLINE
回显“状态:转储未发送”
fi
如果[-e$DUMP_READY];然后
rm-f$DUMP_READY 1 2上传_文件*
fi
您缺少awk
命令的一部分,其余的代码高亮显示都被弄乱了。请引用变量:curl-d“$OFFLINE”
。另外,不要使用大写的变量名,它们是用于环境变量和内置变量的。您在哪里设置$OFFLINE
?要发送文件内容,您需要使用@filename
。