66 lines
2.5 KiB
Bash
Executable File
66 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
# Ocserv logout script for sending statistics into log
|
|
#
|
|
#################################################################################
|
|
# Автор: Сергей Калинин
|
|
# https://nuk-svk.ru
|
|
# svk@nuk-svk.ru
|
|
#################################################################################
|
|
# REASON, VHOST, USERNAME, GROUPNAME, DEVICE, IP_REAL (the real IP of the client),
|
|
# IP_REAL_LOCAL (the local interface IP the client connected), IP_LOCAL
|
|
# (the local IP in the P-t-P connection), IP_REMOTE (the VPN IP of the client),
|
|
# IPV6_LOCAL (the IPv6 local address if there are both IPv4 and IPv6
|
|
# assigned), IPV6_REMOTE (the IPv6 remote address), IPV6_PREFIX, and
|
|
# ID (a unique numeric ID); REASON may be "connect" or "disconnect".
|
|
# In addition the following variables OCSERV_ROUTES (the applied routes for this
|
|
# client), OCSERV_NO_ROUTES, OCSERV_DNS
|
|
# STATS_BYTES_IN,
|
|
# STATS_BYTES_OUT, STATS_DURATION
|
|
|
|
LOG_DIR="/var/log/ocserv"
|
|
LOG_FILE=${LOG_DIR}/sessions.log
|
|
# Format out string text, json
|
|
LOG_FORMAT="json"
|
|
|
|
if [ ! -d "$LOG_DIR" ]; then
|
|
mkdir -p ${LOG_DIR}
|
|
fi
|
|
|
|
DATE=`date +'%d.%m.%Y %T'`
|
|
|
|
# Преобразуем имена пользователей к нижнему регистру
|
|
USER_NAME=`echo ${USERNAME} | tr '[:upper:]' '[:lower:]'`
|
|
|
|
# Проверяем имя пользователя на имя домена,
|
|
# сперва в формате "user@domain" потом "domain\user" \\domain\user
|
|
# и выдергиваем только имя пользователя
|
|
|
|
TEMP_USER_NAME=`echo ${USER_NAME} | egrep -E "[[:alnum:]]+@" -o | tr -d "@"`
|
|
|
|
if [ -n "${TEMP_USER_NAME}" ]; then
|
|
SHORT_USER_NAME="${TEMP_USER_NAME}"
|
|
else
|
|
TEMP_USER_NAME=`echo $USER_NAME | awk -F '\\' '{print $2}'`
|
|
if [ -n "${TEMP_USER_NAME}" ]; then
|
|
SHORT_USER_NAME="${TEMP_USER_NAME}"
|
|
else
|
|
TEMP_USER_NAME=`echo $USER_NAME | awk -F '\\' '{print $4}'`
|
|
if [ -n "${TEMP_USER_NAME}" ]; then
|
|
SHORT_USER_NAME="${TEMP_USER_NAME}"
|
|
else
|
|
SHORT_USER_NAME="${USER_NAME}"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ ${LOG_FORMAT} == 'text' ]; then
|
|
OUT_STRING="${DATE} ${USERNAME} ${REASON} ${ID} ${STATS_BYTES_IN} ${STATS_BYTES_OUT} ${STATS_DURATION}"
|
|
fi
|
|
|
|
if [ ${LOG_FORMAT} == 'json' ]; then
|
|
OUT_STRING="{\"session-datetime\": \"${DATE}\", \"reason\": \"${REASON}\", \"remote-user\": \"${SHORT_USER_NAME}\", \
|
|
\"session-id\": \"${ID}\", \"duration\": ${STATS_DURATION}, \"in_bytes\": ${STATS_BYTES_IN}, \"out_bytes\": ${STATS_BYTES_OUT}}"
|
|
fi
|
|
|
|
echo "${OUT_STRING}" >> ${LOG_FILE}
|