83 lines
1.8 KiB
Bash
83 lines
1.8 KiB
Bash
#!/bin/bash
|
|
|
|
LINES=${1:-100}
|
|
FORMAT=${2:-apache}
|
|
MODE=$3
|
|
|
|
METHODS=("GET" "POST" "PUT" "DELETE" "PATCH")
|
|
PATHS=("/" "/login" "/dashboard" "/api/data" "/settings" "/products" "/checkout")
|
|
CODES_OK=(200 201 204 301 302)
|
|
CODES_ERR=(400 401 403 404 500 503)
|
|
AGENTS=(
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
|
|
"curl/7.68.0"
|
|
"PostmanRuntime/7.29.0"
|
|
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X)"
|
|
)
|
|
|
|
mkdir -p logs
|
|
|
|
random_ip() {
|
|
echo "$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))"
|
|
}
|
|
|
|
random_date() {
|
|
date "+%d/%b/%Y:%H:%M:%S %z"
|
|
}
|
|
|
|
iso_date() {
|
|
date --iso-8601=seconds
|
|
}
|
|
|
|
generate_log() {
|
|
IP=$(random_ip)
|
|
DATE=$(random_date)
|
|
ISO_DATE=$(iso_date)
|
|
METHOD=${METHODS[$RANDOM % ${#METHODS[@]}]}
|
|
PATH=${PATHS[$RANDOM % ${#PATHS[@]}]}
|
|
AGENT=${AGENTS[$RANDOM % ${#AGENTS[@]}]}
|
|
SIZE=$((RANDOM % 5000 + 200))
|
|
|
|
if (( RANDOM % 10 < 2 )); then
|
|
CODE=${CODES_ERR[$RANDOM % ${#CODES_ERR[@]}]}
|
|
FILE="logs/error.log"
|
|
else
|
|
CODE=${CODES_OK[$RANDOM % ${#CODES_OK[@]}]}
|
|
FILE="logs/access.log"
|
|
fi
|
|
|
|
case "$FORMAT" in
|
|
apache)
|
|
LOG="$IP - - [$DATE] \"$METHOD $PATH HTTP/1.1\" $CODE $SIZE \"$AGENT\""
|
|
;;
|
|
json)
|
|
LOG="{\"ip\":\"$IP\",\"timestamp\":\"$ISO_DATE\",\"method\":\"$METHOD\",\"path\":\"$PATH\",\"code\":$CODE,\"size\":$SIZE,\"agent\":\"$AGENT\"}"
|
|
;;
|
|
ltsv)
|
|
LOG="host:$IP time:$ISO_DATE method:$METHOD path:$PATH status:$CODE size:$SIZE agent:$AGENT"
|
|
;;
|
|
custom)
|
|
LOG="[$ISO_DATE] $IP | $METHOD $PATH => $CODE ($SIZE bytes)"
|
|
;;
|
|
*)
|
|
echo "Format inconnu : $FORMAT" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "$LOG" >> "$FILE"
|
|
echo "$LOG"
|
|
}
|
|
|
|
if [[ "$MODE" == "--loop" ]]; then
|
|
while true; do
|
|
generate_log
|
|
sleep 0.5
|
|
done
|
|
else
|
|
for ((i=0; i<LINES; i++)); do
|
|
generate_log
|
|
done
|
|
fi
|