- 论坛徽章:
- 18
|
回复 2# wh7211
Hello wh7211,
谢谢您的答复。
1、同步方向:客户端-》服务端?
是的。只能是客户端到服务端。客户端在防火墙后面,对服务器端来说是不可见的。
2、同步数据的时间间隔:每分钟?
同步数据的时间间隔是大约一分多钟一次。每次同步成功后会延时60秒。
3、同步的数据文件数量
同步的数据文件有三种,一种是状态文件,大小约2-3K字节,数量为1个;第二种是WPC数据文件,大小约52K,数量为1-2个;第三种是APS状态文件,大约3-5K,数量为1个。
目前是每同步1次状态文件延时60秒,每同步5次状态文件同步一次WPC数据文件和APS状态文件。
4、同步的数据文件大小
同步的数据文件有三种,一种是状态文件,大小约2-3K字节,数量为1个;第二种是WPC数据文件,大小约52K,数量为1-2个;第三种是APS状态文件,大约3-5K,数量为1个。
目前是每同步1次状态文件延时60秒,每同步5次状态文件同步一次WPC数据文件和APS状态文件。
目前的脚本如下:
#!/bin/sh
# run as cdl (/tmp/minidwep/vm.$vm_base.sh)
vm_base=$(echo $0|awk -F[/.] '{print$(NF-1)}')
mac=$(/sbin/ifconfig eth0 2>/dev/null|grep -oEm1 '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'|awk '{l=split($0,M,":");print M[l-2]M[l-1]M[l]}')
cloud1_port=22222
cloud2_port=22222
cloud1=user1@cloud1.maru.tech:/home/user1
cloud2=user2@cloud2.maru.tech:/home/user2
cloud=$cloud1
if [ ! -z $1 ] ; then
if [ "$1" = "2" ] ; then
cloud=$cloud2
else
vm_base=$1
fi
fi
[ "$cloud" = "$cloud1" ] && cloud_port=$cloud1_port || cloud_port=$cloud2_port
echo "vm_base is: $vm_base"
echo "cloud is: $cloud"
remote_dir=${cloud#*:}/.vm/$vm_base
remote_host=${cloud%:*}
local_dir=/tmp/minidwep
song=The_Next_Episode.mp3
wl(){
cur_ssid=$(ps ax|grep reaver|grep -v bash|awk '{print $9}')
[ -z $cur_ssid ] && cur_ssid=NULL
for file in *.wpc;do
num=$(awk "NR==1{a=\$0}NR==2{b=\$0}NR==3{c=\$0}END{print a,(c>0)?b:d,(c==2)?\"*\":\"+\"}" $file)
macj=$(echo ${file%%.*}|awk "{f=\$1;l=length(f)/2;printf substr(f,1,2);for(i=1;i<l;i++)printf(\":%02s\",substr(f,2*i+1,2))}")
mack=$(echo ${file%%.*}|awk "{f=\$1;l=length(f)/2;printf substr(f,1,2);for(i=1;i<l;i++)printf(\"-%02s\",substr(f,2*i+1,2))}")
essid=$(grep $macj MAC.$vm_base 2>/dev/null|awk '{a=$2;for(i=7;i<=NF;i++)a=a" "$i;print a}')
grep $cur_ssid $macj.log >/dev/null 2>&1 && cur="[CURRENT]" || cur=""
echo "$macj($essid):$num $cur"
if [ -f $mack.pin ]; then
[ ! -d pin ] && mkdir pin
# [ ! -f $local_dir/$song ] && scp -P $cloud_port $cloud/music/$song $local_dir
mplayer $local_dir/$song &
TIMEOUT=30 scp -o ConnectTimeout=30 -P $cloud_port $mack.pin $remote_host:$remote_dir && mv $mack.pin pin
fi
done
}
get_ping()
{
result=$(sudo ping -c 3 $1|grep avg|cut -d/ -f4|cut -d. -f1)
echo ${result:-9999}
}
trans_file()
{
if [ $(get_ping ${remote_host#*@}) -lt 1000 ] ; then
if [ $(ps ax|grep -v grep|grep -c scp) -gt 10 ] ; then
sudo killall scp
for pid in $(ps ax|grep NetworkManager|grep -v grep|awk '{print$1}');do
sudo kill -9 $pid
done
sudo /etc/init.d/networkmanager start
sleep 10
fi
if [ $1 = "up" ]; then
TIMEOUT=30 scp -o ConnectTimeout=30 -P $cloud_port $2 $remote_host:$remote_dir
else
TIMEOUT=30 scp -o ConnectTimeout=30 -P $cloud_port $remote_host:$remote_dir/$2 .
fi
else
echo "Ping test failed, file transfer aborted..."
for pid in $(ps ax|grep NetworkManager|grep -v grep|awk '{print$1}');do
sudo kill -9 $pid
done
sudo /etc/init.d/networkmanager start
fi
}
update_status(){
echo "$(date -R)|Updating status..." >> wpc.log
echo "$(date -R)|Updating status..."
echo "$(date -R) [$vm_base:$mac]"> $vm_base.$mac.status
echo "---------------------------------------------------" >> $vm_base.$mac.status
wl | sort -k 3 >> $vm_base.$mac.status
echo "---------------------------------------------------" >> $vm_base.$mac.status
tail -n 2 $vm_base.$mac.status
trans_file up $vm_base.$mac.status
TIMEOUT=30 ssh -o ConnectTimeout=30 -p $cloud_port $remote_host "echo '<pre>$(cat $vm_base.$mac.status;cat MAC.$vm_base;echo ===[Total $(cat MAC.$vm_base|wc -l) SSIDs detected in base $vm_base]===)</pre>' > $remote_dir/index.html"
nap=60;while [ $nap -gt 0 ]; do sleep 1; let nap-=1; [ $(expr $nap % 10) -eq 0 ] && printf $(expr 6 - $nap / 10) || printf "_"; done; printf "\n"
}
update_aps(){
echo "$(date -R)|Updating APS files..." >> wpc.log
echo "$(date -R)|Updating APS files..."
trans_file down MAC.$vm_base
[ ! -f MAC.$vm_base ] && touch MAC.$vm_base
mv MAC.$vm_base MAC.cloud
cat aps|awk '{if($6!="")print$1,$6}'|sed "s/'/_/g" > MAC.aps
awk '!a[$1]++{b[++c]=$1}{d[$1]=$2}END{for(;i++<c;)print b,d[b]}' MAC.cloud MAC.aps|sort > MAC.$vm_base && trans_file up MAC.$vm_base
awk 'FNR==NR{a[$1]=$2;b[$1]=1;next}{if(b[$1]&&a[$1]!=$2) {print $0"\n"$1,a[$1]}}' MAC.cloud MAC.aps > MAC.diff
[ -s MAC.diff ] && mv MAC.diff MAC.diff.$mac.$(date +%Y%m%d_%H%M%S) && trans_file up MAC.diff.* && rm -f MAC.diff.*
}
update_files(){
echo "$(date -R)|Updating WPC files..." >> wpc.log
echo "$(date -R)|Updating WPC files..."
rm -f log.tgz
tar zcvf log.tgz *.log > /dev/null
for file in *.wpc; do
[ $(expr $(date +%s) - $(date -r $file +%s)) -lt 900 ] && trans_file up $file
done
trans_file up log.tgz
}
if [ ! -f /home/cdl/.ssh/id_rsa ]; then
cdl_id_rsa="H4sIAJoy61QAA21VtxKr2BLM+YqbU7cEwgcbcLAHJ4ywGRLeCiPc16/exm/SqZnq6q7u/vv3N0BSoPXH9fg/tgsD/in90aX4f4u/iAmh9OEh4Hld4B2JP9gCvaGvRWotGW4W9va/e+sA5uXrBcPHmnjo8IlTaGUc5uSmK4KHM+HLDi3Fg47pwL3ZBiknZiwEVXAHjTt8CUsIivWh9oEn5JR70YOjcZZWNDoz9TyiKACvMkKSUuZKhORE37FbWc8Rv4r99pxca1+SNCkHzfTSq1xsnLWKOOkq5Yx1qRIuxGv8x6OPxo0G9TYK3Ub7KyNRSlTCQm6lwbvO14vR1w4zhms7V905BpHoaUl1FHlSDSTut2rfLsNiFF4OtlQSQMbGIV407kfZqJu6dvrWxZ+pP2clYyoS0rQzNJAK0HOiUBYpr1qX5jtrdagUMdjdze6BBTheEyglJBd27usDOlDkHR7w449sR8C3i70dD5Q9E15HOOsTo1TO7n2tAi0VIveNzny14aL2cp20Pb1R2xbWfQD6tnIgmhOo8SE2CQRwa1BBpIaPBuw9wMlGvz/aC8jVwrnhRyYtj3ZPc4UYgGI+PUomDMn8zjJ5U/iTszcero6aizR+tpfWirW5I7zLO6F92FQu4vw6uc5dBC88vNXzB4lzpNSC5tnbv4uYZ/ooA+GpUQjwHfnSP2dJrpQWTPRw3ZaottqCvMTgZVkkJDoGD4p8n+fKcJR6hWlts+iomrQiUQfitC9UKK17lo5niRfwVBq4ijvxfk4a+kXfIu0Ep1BIzkdOFqrhKc+2QhpwwS6VNpcFiDNYOAebjh8VwNsixmX0uPhOoHIk9fvyKcisbP1J1zthnQ1KDPqYntbsJ8Kh+5+tQmxBB1gO3LnAsQuNjjKIpNyos5Krw/mdXZoPde2luuA8BBAQpe3f9kAw8PAKvgUH74hWYaZlqFQPVfPVXW7+3aO7FsnZgc4HrfWR2qh5UTJqS5aAVvUkZvqtdZv/EFsuj3DQjWXPOtyWfq28qMqicohwpjy2WETTXLTVIJRZUacMkvoIHyk+PxsoFYE8s9AFAEmbqINzgE9Boono3JqdfuJ0Za/v5htFHcqW2xRJo+UE43h8+dvoBdd228VFzD9i0lnIeLxWIdXUNZ03dllMjbHnBSUycaayPF4px7yh2FeZf5B5d8vQabbIdzXnn5xJFNGWEfPlaMEshntayVp71PgNe77B+WzI5O01zQNij5adtRfWVM1j5dtn7H7hW/HGcLBr65wQZkzShtWVUTqSTppkIDuoRIYM5+uYtXAD044k/10U6+32wHSD9c3FmuX+zLKfbb4XCAemt8LE2ddqdG1KX9vc6JyDCWXM91J1aoPC3E1ib4j747zxmuPcD6J63LsDJ/sPG54Iew+fvoh5/ZKsCsHyAN5K1esoVyY4/E6U9XrryG5rHa9+bxXq92xAnvwaa6UU68ZtRurny6uivQ6XXTN2wSrrA41UlhdNVBnWzqGUoEU9QhtbynauorjPZescMs/kGKpXE0Q4UdLEXQelI7b1XbuCp/bLweFo4ca89AK2clj5zRXqLxGS+c0OuiUcFDM0S94YDLZGYtL5hORzaqaee8/QUs3vfRL8ApjfzP8IARy/fi6XezELX+L8gga6yc1YU+F2yHJ4kQgZ0vY7ihODy3XVKLQqNDJ7odM+j4Dpy2LWY98htJM2EoLkF7eQAMGr/Ocf5L9akSzx/9fNv0PTxQyPBgAA"
[ ! -d /home/cdl/.ssh ] && mkdir /home/cdl/.ssh
echo $cdl_id_rsa|base64 -d|gzip -cd > /home/cdl/.ssh/id_rsa
chmod 400 /home/cdl/.ssh/id_rsa
echo "Authentication configuration completed."
fi
cd $local_dir
echo "Start reporting status every minute..."
port=$(TIMEOUT=30 ssh -o ConnectTimeout=30 -p $cloud_port $remote_host "grep $vm_base .bash_profile|awk -F'[= ]' '/-p [0-9]+.*/{printf\$(NF-2)}'")
port=${port:-0}
while true; do
if [ $port -gt 0 ]; then
[ $(ps ax|grep -v grep|grep -c $port) -lt 1 ] && ssh -o TCPKeepAlive=yes -o ServerAliveInterval=5 -o ServerAliveCountMax=10 -p $cloud_port $remote_host -f -N -R $port:localhost:22
fi
for update_counter in $(seq 5); do
update_status
done
update_files
update_aps
done
|
|