-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgen
More file actions
executable file
·102 lines (84 loc) · 2.82 KB
/
gen
File metadata and controls
executable file
·102 lines (84 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
# 送信メッセージ数
count=1000
# 送信元 IP の頭の 3オクテット
src_IP_prefix=192.168.0
# syslog サーバの IP と ポート (udpのみ)
# syslog_srv=127.0.0.1
# syslog_port=514
# syslog_srv が設定していなければ、見つけたインターフェースの一つ目のアドレスを指定
function physical_if_list(){
for DEV in $(find /sys/devices -name net | grep -v virtual);
do
ls $DEV/
done
}
if [ "" == "$syslog_srv" ]; then
if=$(physical_if_list | head -1)
syslog_srv=$(ip -4 -o addr show $if | sed -re 's/.*net (.[^/]*).*/\1/g')
fi
syslog_port=${syslog_port:=514}
# if : 見つかった一つ目のインターフェース
# syslog_srv : syslog のメッセージを送る先のアドレス
# ダミーアプリケーション名
APP_0=init
APP_1=inetd
APP_2=nfsd
APP_3=ypbind
APP_4=ypserv
APP_5=rpcinfo
APP_6=rsh
APP_7=rlogin
APP_8=syslogd
APP_9=nscd
APP_10=syseventd
APP_11=svc.startd
APP_12=svc.configd
APP_13=svc.periodicd
APP_14=automountd
APP_15=ttymon
APP_16=mgetty
printf '+--- ---- ---- ---- ---- ---- ---- ----+\n'
printf "| message send to %s:%d\n" "$syslog_srv" "$syslog_port"
printf '+--- ---- ---- ---- ---- ---- ---- ----+\n'
printf '|--- ---- START %s ----|\n' "$(date +"%F %T")"
echo "===== メッセージ生成時刻 送信完了時刻 ======"
START_TIME=$(date +%s.%N)
for ((i=1; i<=$count; i++)); do
fac=$((RANDOM % 12)) # Facility
sev=$((RANDOM % 8)) # Severity
pri=$(($fac * 8 + $sev)) # priority
n=$((RANDOM % 255)) # 送信元 IP の 4オクテット目
host=host_$n # hostname
app=$(eval echo \$APP_$((RANDOM % 17))) # application name
pid=$! # pid
messageid=ID$((RANDOM)) # message id
date=$(LANG=C date +"%F %X %z")
log_file=$( mktemp syslog-gen_XXXXXXXX )
eval echo -n "\<$pri\> 1 $date $host $app $pid $messageid The quick brown fox jumps over the lazy dog to ${syslog_srv}:${syslog_port}" > $log_file
len=$(ls -l $log_file | awk '{print $5}')
( (hping3 -q -2 -i u10 -c 1 -p $syslog_port -d $len -E $log_file -a ${src_IP_prefix}.$n $syslog_srv ; rm $log_file) 2>&- >&- ;\
printf "===== $date = %s %4d/%d\r" "$(LANG=C date +%X)" $i $count )&
# ログメッセージを生成した時間と送信した時間を比較する
# 同時実行数の制限
while : ; do
if [ $(pgrep -c hping) -gt 10 ] ; then
sleep 0.3
else
break
fi
done
done
# 終了待ち
while : ; do
if [ $(pgrep -c hping) -gt 0 ] ; then
sleep 0.1
else
break
fi
done
END_TIME=$(date +%s.%N)
echo
printf '+--- ---- ---- ---- ---- ---- ---- ----+\n'
printf '| done -- END %s ----|\n' "$(date +"%F %T" -d @$END_TIME)"
printf '| elapsed %7s sec -- %6s mess/sec|\n' $(echo "scale=3 ; a = $END_TIME - $START_TIME ; a/1.0 ; $count/a" | bc -l)