Распарсивание данных из Лог файла в базу данных

Сканирование сети получение Логина пользователя
на основе скриптов cmd и bash
Базы Данных Mysql и Веб интерфейса отображения
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 853
Стаж: 5 лет 7 месяцев
Откуда: Вологодская область
Поблагодарили: 37 раз
Контактная информация:

Распарсивание данных из Лог файла в базу данных

Сообщение Артём Мамзиков »

Пока особо сильно не дружу с php по этому будем распарсивать данные скриптом на bash
позже нужно будет сделать чтоб сразу переменными из скриптов данные летели в базу данных но это позже.

Скрипт запускается кроном каждые 30 минут забирает данные из лога и очищает его

Логин пароль к БД в примере будет scan scan
Данные виде строк в одну ячейку, mysql таблицы, столбца не получилось записать можно только строкой(

Скачать образец
post-v-dbscan-seti.zip
post-v-dbscan-seti.zip
(2.44 КБ) 56 скачиваний
Добавлено имя нет биос и рабочая группа, так же все мак через : Поэтому меняем немного условия сравнения
Данные для совпадения.jpg
Данные для совпадения.jpg
post-v-dbscan-seti.sh
Показать
#!/bin/bash

#Количество строк на момент проверки в файле
kolstr=`cat /usr/share/glpi/data_server/post.log |wc -l`

# Штамп текущего времени в переменную
SDATE=`date '+%y-%m-%d %H:%M:%S'`

#Построчная обработка файла post.log
while read -r obrlog
do

#Тест читать разом весь файл
#obrlog=`grep -i -a "LINUXSCANSETI" post.log`

# Получаем переменные для отправки в таблицу по столбцам

# Выбираем IP
IP=$(echo "${obrlog}" 2>/dev/null|sed 's/LINUXSCANSETI=IP://'|sed 's/ MAC:.*\| DNS:.*\| NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие DNS|вырезать начало до DNS:|обрезать все после параметр или
DNS=$(echo "${obrlog}" 2>/dev/null|grep -E "DNS:"|sed 's|.*DNS:||'|sed 's/DNS://'|sed 's/ MAC:.*\| NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие MAC|вырезать начало до MAC:|обрезать все после параметр или
MAC=$(echo "${obrlog}" 2>/dev/null|grep -E " MAC:"|sed 's|.* MAC:||'|sed 's/ MAC://'|sed 's/ NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие NAMEMAC:|вырезать начало до NAMEMAC:|обрезать все после параметр или
NAMEMAC=$(echo "${obrlog}" 2>/dev/null|grep -E "NAMEMAC:"|sed 's|.*NAMEMAC:||'|sed 's/NAMEMAC://'|sed 's/ SHARE:.*\| NOFILTR:.*//g')

# Отфильтруем данные SHARE|ищем строку с share|удаляем все до share|удаляем share:|удаляем все после NOFILTR:|разносим по строка через или найденные совпадения|так как призагрузке в mysql удаляются слеши добавим в 2 раза больше их.
SHARE=$(echo "${obrlog}" 2>/dev/null|grep -E " SHARE:"|sed 's|.* SHARE:||'|sed 's/ SHARE://'|sed 's/ NOFILTR:.*//g'|sed -e 's/\ Disk:/\nDisk:/g; s/\ IPC:/\nIPC:/g; s/\ Printer:/\nPrinter:/g'|sed 's/\\/\\\\/g')

# Выбираем диск и коментарий|поиск строки Disk|убираем слово Disk:|перенос коментария в новую строку
LDISK=$(echo "${SHARE}" 2>/dev/null|grep -E "Disk: "|sed 's/Disk: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки IPC|убираем слово IPC:|перенос коментария в новую строку
LIPC=$(echo "${SHARE}" 2>/dev/null|grep -E "IPC: "|sed 's/IPC: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки Printer|убираем слово Printer:|перенос коментария в новую строку
LPRINT=$(echo "${SHARE}" 2>/dev/null|grep -E "Printer: "|sed 's/Printer: //'|sed 's/\ comm:/\ncomm:/g')

# Вывести остатки что не попало под филтр| поиск строки NOFILTR |Удалить всё что до NOFILTR
LNOFILTR=$(echo "${obrlog}" 2>/dev/null|grep -E " NOFILTR:"|sed 's|.* NOFILTR:||')

echo "${IP}" "${DNS}" "${MAC}" "${NAMEMAC}" "${LDISK}" "${LIPC}" "${LPRINT}" "${LNOFILTR}"

# INET_ATON() — для преобразования IP адреса в десятичное число, удобства выборок и сортировок
#IPN=$(echo "${IP}"|awk '{s = s*256 + $1} END{print s}' RS=.)
# Работает не навсех ОС обработаем при записи в mysql VALUES ('другие переменные',INET_ATON('$IP'));

# Подключение к базе scan_seti
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO LINUXSCANSETI(IP,DNS,MAC,NAMEMAC,LDISK,LIPC,LPRINT,LNOFILTR) VALUES('$IP','$DNS','$MAC','$NAMEMAC','$LDISK','$LIPC','$LPRINT','$LNOFILTR')"

# Добавить новые и Обновить существующие данные, сравнение с IP и MAC
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO LINUXSCANSETI(DATE,IP,DNS,MAC,NAMEMAC,LDISK,LIPC,LPRINT,LNOFILTR) VALUES('$SDATE','$IP','$DNS','$MAC','$NAMEMAC','$LDISK','$LIPC','$LPRINT','$LNOFILTR') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IP=VALUES(IP), DNS=VALUES(DNS), MAC=VALUES(MAC), NAMEMAC=VALUES(NAMEMAC), LDISK=VALUES(LDISK), LIPC=VALUES(LIPC), LPRINT=VALUES(LPRINT), LNOFILTR=VALUES(LNOFILTR);"

mysql -u scan -pscan -D scan_seti -e "INSERT INTO scansetibd(DATE,IPN,IP,HOSTNAMEDNS,MAC,NAMEMAC,DISK,IPC,PRINT,NOFILTR) VALUES('$SDATE',INET_ATON('$IP'),'$IP','$DNS','$MAC','$NAMEMAC','$LDISK','$LIPC','$LPRINT','$LNOFILTR') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IPN=VALUES(IPN), IP=VALUES(IP), HOSTNAMEDNS=VALUES(HOSTNAMEDNS), MAC=VALUES(MAC), NAMEMAC=VALUES(NAMEMAC), DISK=VALUES(DISK), IPC=VALUES(IPC), PRINT=VALUES(PRINT), NOFILTR=VALUES(NOFILTR);"

#Читаем лог post.log выбираем только соотвествующие строки, -i регистро независимые, в режиме теста -a (чтоб не считал бринарником)
done< <(grep -i -a "LINUXSCANSETI" /usr/share/glpi/data_server/post.log)


#Построчная обработка файла post.log
while read -r obrspark
do

# Получаем переменные для отправки в таблицу по столбцам

# Выбрать строки содержащие LOGIN|вырезать начало до LOGIN=|обрезать все после параметр или
LOGIN=$(echo "${obrspark}" 2>/dev/null|grep -E "LOGIN"|sed 's|.*LOGIN=||'|sed 's/LOGIN=//'|sed 's/ HOSTNAME.*\| IP.*//g')

# Выбрать строки содержащие MAC|вырезать начало до MAC:|обрезать все после параметр или
HOSTNAME=$(echo "${obrspark}" 2>/dev/null|grep -E "HOSTNAME"|sed 's|.*HOSTNAME=||'|sed 's/HOSTNAME=//'|sed 's/ IP.*//g')

# Выбираем IP
IP=$(echo "${obrspark}" 2>/dev/null|grep -E "IP"|sed 's|.*IP=||'|sed 's/IP=//')

echo "${LOGIN}" "${HOSTNAME}" "${IP}"

# Добавить новые и Обновить существующие данные, сравнение с LOGIN и IP
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO SPARKLOGIN(DATE,LOGIN,HOSTNAME,IP) VALUES('$SDATE','$LOGIN','$HOSTNAME','$IP') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), LOGIN=VALUES(LOGIN), HOSTNAME=VALUES(HOSTNAME), IP=VALUES(IP);"
mysql -u scan -pscan -D scan_seti -e "INSERT INTO scansetibd(DATE,LOGIN,HOSTNAMEDNS,IPN,IP) VALUES('$SDATE','$LOGIN','$HOSTNAME',INET_ATON('$IP'),'$IP') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), LOGIN=VALUES(LOGIN), HOSTNAMEDNS=VALUES(HOSTNAMEDNS), IPN=VALUES(IPN), IP=VALUES(IP);"

#Читаем лог post.log выбираем только соотвествующие строки, -i регистро независимые, в режиме теста -a (чтоб не считал бринарником)
done< <(grep -i -a "SPARK" /usr/share/glpi/data_server/post.log)

#Построчная обработка файла post.log
while read -r obrwlog
do

# Получаем переменные для отправки в таблицу по столбцам

# Выбираем IP
IPW=$(echo "${obrwlog}" 2>/dev/null|sed 's/WINSCANSETI=IP://'|sed 's/ MAC:.*\| NAME:.*\| SHARE:.*\|NOFILTR:.*//g')

# Выбрать строки содержащие MAC|вырезать начало до MAC:|обрезать все после параметр или
MACW=$(echo "${obrwlog}" 2>/dev/null|grep -E " MAC:"|sed 's|.* MAC:||'|sed 's/ MAC://'|sed 's/ NAME:.*\| SHARE:.*\|NOFILTR:.*//g')

# Выбрать строки содержащие NAME:|вырезать начало до NAME:|обрезать все после параметр или
NAMEW=$(echo "${obrwlog}" 2>/dev/null|grep -E "NAME:"|sed 's|.*NAME:||'|sed 's/NAME://'|sed 's/ SHARE:.*\|NOFILTR:.*//g')

# Отфильтруем данные SHARE|ищем строку с share|удаляем все до share|удаляем share:|обрезать все после|разносим по строка через или найденные совпадения переводим с русского на англ.|при загрузке в mysql удаляет слеши добавим в 2 раза больше
SHAREW=$(echo "${obrwlog}" 2>/dev/null|grep -E " SHARE:"|sed 's|.* SHARE:||'|sed 's/ SHARE://'|sed 's/ NOFILTR:.*//g'|sed -e 's/\ Disk:/\nDisk:/g; s/\ Диск:/\nDisk:/g; s/\Диск:/\Disk:/g; s/\ IPC:/\nIPC:/g; s/\ Print:/\nPrinter:/g; s/\Print:/\Printer:/g; s/\ Печать:/\nPrinter:/g; s/\Печать:/\Printer:/g'|sed 's/\\/\\\\/g')

# Выбираем диск и коментарий|поиск строки Disk|убираем слово Disk:|перенос коментария в новую строку
WDISK=$(echo "${SHAREW}" 2>/dev/null|grep -E "Disk: "|sed 's/Disk: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки IPC|убираем слово IPC:|перенос коментария в новую строку
WIPC=$(echo "${SHAREW}" 2>/dev/null|grep -E "IPC: "|sed 's/IPC: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки Printer|убираем слово Printer:|перенос коментария в новую строку
WPRINT=$(echo "${SHAREW}" 2>/dev/null|grep -E "Printer: "|sed 's/Printer: //'|sed 's/\ comm:/\ncomm:/g')

# Вывести Рабочую группу| поиск строки NOFILTR |Удалить всё что до NOFILTR
WNOFILTR=$(echo "${obrwlog}" 2>/dev/null|grep -E " NOFILTR:"|sed 's|.* NOFILTR:||')

# Пустая перменная для различия с Linux
NAMEMACW=

echo "${IPW}" "${MACW}" "${NAMEW}" "${WDISK}" "${WIPC}" "${WPRINT}" "${WNOFILTR}"
# Подключение к базе scan_seti
# Добавить новые и Обновить существующие данные, сравнение с IP и MAC
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO WINSCANSETI(DATE,IP,MAC,NAME,WDISK,WIPC,WPRINT,NOFILTR) VALUES('$SDATE','$IPW','$MACW','$NAMEW','$WDISK','$WIPC','$WPRINT','$WNOFILTR') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IP=VALUES(IP), MAC=VALUES(MAC), NAME=VALUES(NAME), WDISK=VALUES(WDISK), WIPC=VALUES(WIPC), WPRINT=VALUES(WPRINT), NOFILTR=VALUES(NOFILTR);"
mysql -u scan -pscan -D scan_seti -e "INSERT INTO scansetibd(DATE,IPN,IP,MAC,HOSTNAMEDNS,NAMEMAC,DISK,IPC,PRINT,NOFILTR) VALUES('$SDATE',INET_ATON('$IPW'),'$IPW','$MACW','$NAMEW','$NAMEMACW','$WDISK','$WIPC','$WPRINT','$WNOFILTR') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IPN=VALUES(IPN), IP=VALUES(IP), MAC=VALUES(MAC), HOSTNAMEDNS=VALUES(HOSTNAMEDNS), NAMEMAC=VALUES(NAMEMAC), DISK=VALUES(DISK), IPC=VALUES(IPC), PRINT=VALUES(PRINT), NOFILTR=VALUES(NOFILTR);"

#Читаем лог post.log выбираем только соотвествующие строки, -i регистро независимые, в режиме теста -a (чтоб не считал бринарником)
done< <(grep -i -a "WINSCANSETI" /usr/share/glpi/data_server/post.log)

# Удалить строки которые мы получили
sed -i -e 1,"${kolstr}"d /usr/share/glpi/data_server/post.log
Предыдущая версия
post-v-dbscan-seti.sh
post-v-dbscan-seti.sh
Показать
#!/bin/bash

#Количество строк на момент проверки в файле
kolstr=`cat /usr/share/glpi/data_server/post.log |wc -l`

# Штамп текущего времени в переменную
SDATE=`date '+%y-%m-%d %H:%M:%S'`

#Построчная обработка файла post.log
while read -r obrlog
do

#Тест читать разом весь файл
#obrlog=`grep -i -a "LINUXSCANSETI" post.log`

# Получаем переменные для отправки в таблицу по столбцам

# Выбираем IP
IP=$(echo "${obrlog}" 2>/dev/null|sed 's/LINUXSCANSETI=IP://'|sed 's/ MAC:.*\| DNS:.*\| NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие DNS|вырезать начало до DNS:|обрезать все после параметр или
DNS=$(echo "${obrlog}" 2>/dev/null|grep -E "DNS:"|sed 's|.*DNS:||'|sed 's/DNS://'|sed 's/ MAC:.*\| NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие MAC|вырезать начало до MAC:|обрезать все после параметр или
MAC=$(echo "${obrlog}" 2>/dev/null|grep -E " MAC:"|sed 's|.* MAC:||'|sed 's/ MAC://'|sed 's/ NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие NAMEMAC:|вырезать начало до NAMEMAC:|обрезать все после параметр или
NAMEMAC=$(echo "${obrlog}" 2>/dev/null|grep -E "NAMEMAC:"|sed 's|.*NAMEMAC:||'|sed 's/NAMEMAC://'|sed 's/ SHARE:.*\| NOFILTR:.*//g')

# Отфильтруем данные SHARE|ищем строку с share|удаляем все до share|удаляем share:|удаляем все после NOFILTR:|разносим по строка через или найденные совпадения
SHARE=$(echo "${obrlog}" 2>/dev/null|grep -E " SHARE:"|sed 's|.* SHARE:||'|sed 's/ SHARE://'|sed 's/ NOFILTR:.*//g'|sed -e 's/\ Disk:/\nDisk:/g; s/\ IPC:/\nIPC:/g; s/\ Printer:/\nPrinter:/g')

# Выбираем диск и коментарий|поиск строки Disk|убираем слово Disk:|перенос коментария в новую строку
LDISK=$(echo "${SHARE}" 2>/dev/null|grep -E "Disk: "|sed 's/Disk: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки IPC|убираем слово IPC:|перенос коментария в новую строку
LIPC=$(echo "${SHARE}" 2>/dev/null|grep -E "IPC: "|sed 's/IPC: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки Printer|убираем слово Printer:|перенос коментария в новую строку
LPRINT=$(echo "${SHARE}" 2>/dev/null|grep -E "Printer: "|sed 's/Printer: //'|sed 's/\ comm:/\ncomm:/g')

# Вывести остатки что не попало под филтр| поиск строки NOFILTR |Удалить всё что до NOFILTR
LNOFILTR=$(echo "${obrlog}" 2>/dev/null|grep -E " NOFILTR:"|sed 's|.* NOFILTR:||')

echo "${IP}" "${DNS}" "${MAC}" "${NAMEMAC}" "${LDISK}" "${LIPC}" "${LPRINT}" "${LNOFILTR}"

# INET_ATON() — для преобразования IP адреса в десятичное число, удобства выборок и сортировок
#IPN=$(echo "${IP}"|awk '{s = s*256 + $1} END{print s}' RS=.)
# Работает не навсех ОС обработаем при записи в mysql VALUES ('другие переменные',INET_ATON('$IP'));

# Подключение к базе scan_seti
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO LINUXSCANSETI(IP,DNS,MAC,NAMEMAC,LDISK,LIPC,LPRINT,LNOFILTR) VALUES('$IP','$DNS','$MAC','$NAMEMAC','$LDISK','$LIPC','$LPRINT','$LNOFILTR')"

# Добавить новые и Обновить существующие данные, сравнение с IP и MAC
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO LINUXSCANSETI(DATE,IP,DNS,MAC,NAMEMAC,LDISK,LIPC,LPRINT,LNOFILTR) VALUES('$SDATE','$IP','$DNS','$MAC','$NAMEMAC','$LDISK','$LIPC','$LPRINT','$LNOFILTR') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IP=VALUES(IP), DNS=VALUES(DNS), MAC=VALUES(MAC), NAMEMAC=VALUES(NAMEMAC), LDISK=VALUES(LDISK), LIPC=VALUES(LIPC), LPRINT=VALUES(LPRINT), LNOFILTR=VALUES(LNOFILTR);"

mysql -u scan -pscan -D scan_seti -e "INSERT INTO scansetibd(DATE,IPN,IP,HOSTNAMEDNS,MAC,NAMEMAC,DISK,IPC,PRINT,NOFILTR) VALUES('$SDATE',INET_ATON('$IP'),'$IP','$DNS','$MAC','$NAMEMAC','$LDISK','$LIPC','$LPRINT','$LNOFILTR') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IPN=VALUES(IPN), IP=VALUES(IP), HOSTNAMEDNS=VALUES(HOSTNAMEDNS), MAC=VALUES(MAC), NAMEMAC=VALUES(NAMEMAC), DISK=VALUES(DISK), IPC=VALUES(IPC), PRINT=VALUES(PRINT), NOFILTR=VALUES(NOFILTR);"

#Читаем лог post.log выбираем только соотвествующие строки, -i регистро независимые, в режиме теста -a (чтоб не считал бринарником)
done< <(grep -i -a "LINUXSCANSETI" /usr/share/glpi/data_server/post.log)


#Построчная обработка файла post.log
while read -r obrspark
do

# Получаем переменные для отправки в таблицу по столбцам

# Выбрать строки содержащие LOGIN|вырезать начало до LOGIN=|обрезать все после параметр или
LOGIN=$(echo "${obrspark}" 2>/dev/null|grep -E "LOGIN"|sed 's|.*LOGIN=||'|sed 's/LOGIN=//'|sed 's/ HOSTNAME.*\| IP.*//g')

# Выбрать строки содержащие MAC|вырезать начало до MAC:|обрезать все после параметр или
HOSTNAME=$(echo "${obrspark}" 2>/dev/null|grep -E "HOSTNAME"|sed 's|.*HOSTNAME=||'|sed 's/HOSTNAME=//'|sed 's/ IP.*//g')

# Выбираем IP
IP=$(echo "${obrspark}" 2>/dev/null|grep -E "IP"|sed 's|.*IP=||'|sed 's/IP=//')

echo "${LOGIN}" "${HOSTNAME}" "${IP}"

# Добавить новые и Обновить существующие данные, сравнение с LOGIN и IP
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO SPARKLOGIN(DATE,LOGIN,HOSTNAME,IP) VALUES('$SDATE','$LOGIN','$HOSTNAME','$IP') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), LOGIN=VALUES(LOGIN), HOSTNAME=VALUES(HOSTNAME), IP=VALUES(IP);"
mysql -u scan -pscan -D scan_seti -e "INSERT INTO scansetibd(DATE,LOGIN,HOSTNAMEDNS,IPN,IP) VALUES('$SDATE','$LOGIN','$HOSTNAME',INET_ATON('$IP'),'$IP') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), LOGIN=VALUES(LOGIN), HOSTNAMEDNS=VALUES(HOSTNAMEDNS), IPN=VALUES(IPN), IP=VALUES(IP);"

#Читаем лог post.log выбираем только соотвествующие строки, -i регистро независимые, в режиме теста -a (чтоб не считал бринарником)
done< <(grep -i -a "SPARK" /usr/share/glpi/data_server/post.log)

#Построчная обработка файла post.log
while read -r obrwlog
do

# Получаем переменные для отправки в таблицу по столбцам

# Выбираем IP
IPW=$(echo "${obrwlog}" 2>/dev/null|sed 's/WINSCANSETI=IP://'|sed 's/ MAC:.*\| NAME:.*\| SHARE:.*//g')

# Выбрать строки содержащие MAC|вырезать начало до MAC:|обрезать все после параметр или
MACW=$(echo "${obrwlog}" 2>/dev/null|grep -E " MAC:"|sed 's|.* MAC:||'|sed 's/ MAC://'|sed 's/ NAME:.*\| SHARE:.*//g')

# Выбрать строки содержащие NAME:|вырезать начало до NAME:|обрезать все после параметр или
NAMEW=$(echo "${obrwlog}" 2>/dev/null|grep -E "NAME:"|sed 's|.*NAME:||'|sed 's/NAME://'|sed 's/ SHARE:.*//g')

# Отфильтруем данные SHARE|ищем строку с share|удаляем все до share|удаляем share:|разносим по строка через или найденные совпадения переводим с русского на англ.
SHAREW=$(echo "${obrwlog}" 2>/dev/null|grep -E " SHARE:"|sed 's|.* SHARE:||'|sed 's/ SHARE://'|sed -e 's/\ Disk:/\nDisk:/g; s/\ Диск:/\nDisk:/g; s/\Диск:/\Disk:/g; s/\ IPC:/\nIPC:/g; s/\ Print:/\nPrinter:/g; s/\Print:/\Printer:/g; s/\ Печать:/\nPrinter:/g; s/\Печать:/\Printer:/g')

# Выбираем диск и коментарий|поиск строки Disk|убираем слово Disk:|перенос коментария в новую строку
WDISK=$(echo "${SHAREW}" 2>/dev/null|grep -E "Disk: "|sed 's/Disk: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки IPC|убираем слово IPC:|перенос коментария в новую строку
WIPC=$(echo "${SHAREW}" 2>/dev/null|grep -E "IPC: "|sed 's/IPC: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки Printer|убираем слово Printer:|перенос коментария в новую строку
WPRINT=$(echo "${SHAREW}" 2>/dev/null|grep -E "Printer: "|sed 's/Printer: //'|sed 's/\ comm:/\ncomm:/g')

echo "${IPW}" "${MACW}" "${NAMEW}" "${WDISK}" "${WIPC}" "${WPRINT}"
# Подключение к базе scan_seti
# Добавить новые и Обновить существующие данные, сравнение с IP и MAC
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO WINSCANSETI(DATE,IP,MAC,NAME,WDISK,WIPC,WPRINT) VALUES('$SDATE','$IPW','$MACW','$NAMEW','$WDISK','$WIPC','$WPRINT') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IP=VALUES(IP), MAC=VALUES(MAC), NAME=VALUES(NAME), WDISK=VALUES(WDISK), WIPC=VALUES(WIPC), WPRINT=VALUES(WPRINT);"
mysql -u scan -pscan -D scan_seti -e "INSERT INTO scansetibd(DATE,IPN,IP,MAC,HOSTNAMEDNS,DISK,IPC,PRINT) VALUES('$SDATE',INET_ATON('$IPW'),'$IPW','$MACW','$NAMEW','$WDISK','$WIPC','$WPRINT') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IPN=VALUES(IPN), IP=VALUES(IP), MAC=VALUES(MAC), HOSTNAMEDNS=VALUES(HOSTNAMEDNS), DISK=VALUES(DISK), IPC=VALUES(IPC), PRINT=VALUES(PRINT);"

#Читаем лог post.log выбираем только соотвествующие строки, -i регистро независимые, в режиме теста -a (чтоб не считал бринарником)
done< <(grep -i -a "WINSCANSETI" /usr/share/glpi/data_server/post.log)

# Удалить строки которые мы получили
sed -i -e 1,"${kolstr}"d /usr/share/glpi/data_server/post.log

Предыдущая версия
post-v-dbscan-seti.sh
Показать
#!/bin/bash

#Количество строк на момент проверки в файле
kolstr=`cat /usr/share/glpi/data_server/post.log |wc -l`

# Штамп текущего времени в переменную
SDATE=`date '+%y-%m-%d %H:%M:%S'`

#Построчная обработка файла post.log
while read -r obrlog
do

#Тест читать разом весь файл
#obrlog=`grep -i -a "LINUXSCANSETI" post.log`

# Получаем переменные для отправки в таблицу по столбцам

# Выбираем IP
IP=$(echo "${obrlog}" 2>/dev/null|sed 's/LINUXSCANSETI=IP://'|sed 's/ MAC:.*\| DNS:.*\| NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие DNS|вырезать начало до DNS:|обрезать все после параметр или
DNS=$(echo "${obrlog}" 2>/dev/null|grep -E "DNS:"|sed 's|.*DNS:||'|sed 's/DNS://'|sed 's/ MAC:.*\| NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие MAC|вырезать начало до MAC:|обрезать все после параметр или
MAC=$(echo "${obrlog}" 2>/dev/null|grep -E " MAC:"|sed 's|.* MAC:||'|sed 's/ MAC://'|sed 's/ NAMEMAC:.*\| SHARE:.*\| NOFILTR:.*//g')

# Выбрать строки содержащие NAMEMAC:|вырезать начало до NAMEMAC:|обрезать все после параметр или
NAMEMAC=$(echo "${obrlog}" 2>/dev/null|grep -E "NAMEMAC:"|sed 's|.*NAMEMAC:||'|sed 's/NAMEMAC://'|sed 's/ SHARE:.*\| NOFILTR:.*//g')

# Отфильтруем данные SHARE|ищем строку с share|удаляем все до share|удаляем share:|удаляем все после NOFILTR:|разносим по строка через или найденные совпадения
SHARE=$(echo "${obrlog}" 2>/dev/null|grep -E " SHARE:"|sed 's|.* SHARE:||'|sed 's/ SHARE://'|sed 's/ NOFILTR:.*//g'|sed -e 's/\ Disk:/\nDisk:/g; s/\ IPC:/\nIPC:/g; s/\ Printer:/\nPrinter:/g')

# Выбираем диск и коментарий|поиск строки Disk|убираем слово Disk:|перенос коментария в новую строку
LDISK=$(echo "${SHARE}" 2>/dev/null|grep -E "Disk: "|sed 's/Disk: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки IPC|убираем слово IPC:|перенос коментария в новую строку
LIPC=$(echo "${SHARE}" 2>/dev/null|grep -E "IPC: "|sed 's/IPC: //'|sed 's/\ comm:/\ncomm:/g')

# Выбираем диск и коментарий|поиск строки Printer|убираем слово Printer:|перенос коментария в новую строку
LPRINT=$(echo "${SHARE}" 2>/dev/null|grep -E "Printer: "|sed 's/Printer: //'|sed 's/\ comm:/\ncomm:/g')

# Вывести остатки что не попало под филтр| поиск строки NOFILTR |Удалить всё что до NOFILTR
LNOFILTR=$(echo "${obrlog}" 2>/dev/null|grep -E " NOFILTR:"|sed 's|.* NOFILTR:||')

echo "${IP}" "${DNS}" "${MAC}" "${NAMEMAC}" "${LDISK}" "${LIPC}" "${LPRINT}" "${LNOFILTR}"
# Подключение к базе scan_seti
#mysql -u scan -pscan -D scan_seti -e "INSERT INTO LINUXSCANSETI(IP,DNS,MAC,NAMEMAC,LDISK,LIPC,LPRINT,LNOFILTR) VALUES('$IP','$DNS','$MAC','$NAMEMAC','$LDISK','$LIPC','$LPRINT','$LNOFILTR')"

# Добавить новые и Обновить существующие данные, сравнение с IP и MAC
mysql -u scan -pscan -D scan_seti -e "INSERT INTO LINUXSCANSETI(DATE,IP,DNS,MAC,NAMEMAC,LDISK,LIPC,LPRINT,LNOFILTR) VALUES('$SDATE','$IP','$DNS','$MAC','$NAMEMAC','$LDISK','$LIPC','$LPRINT','$LNOFILTR') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), IP=VALUES(IP), DNS=VALUES(DNS), MAC=VALUES(MAC), NAMEMAC=VALUES(NAMEMAC), LDISK=VALUES(LDISK), LIPC=VALUES(LIPC), LPRINT=VALUES(LPRINT), LNOFILTR=VALUES(LNOFILTR);"

#Читаем лог post.log выбираем только соотвествующие строки, -i регистро независимые, в режиме теста -a (чтоб не считал бринарником)
done< <(grep -i -a "LINUXSCANSETI" /usr/share/glpi/data_server/post.log)


#Построчная обработка файла post.log
while read -r obrspark
do

# Получаем переменные для отправки в таблицу по столбцам

# Выбрать строки содержащие LOGIN|вырезать начало до LOGIN=|обрезать все после параметр или
LOGIN=$(echo "${obrspark}" 2>/dev/null|grep -E "LOGIN"|sed 's|.*LOGIN=||'|sed 's/LOGIN=//'|sed 's/ HOSTNAME.*\| IP.*//g')

# Выбрать строки содержащие MAC|вырезать начало до MAC:|обрезать все после параметр или
HOSTNAME=$(echo "${obrspark}" 2>/dev/null|grep -E "HOSTNAME"|sed 's|.*HOSTNAME=||'|sed 's/HOSTNAME=//'|sed 's/ IP.*//g')

# Выбираем IP
IP=$(echo "${obrspark}" 2>/dev/null|grep -E "IP"|sed 's|.*IP=||'|sed 's/IP=//')

echo "${LOGIN}" "${HOSTNAME}" "${IP}"

# Добавить новые и Обновить существующие данные, сравнение с LOGIN и IP
mysql -u scan -pscan -D scan_seti -e "INSERT INTO SPARKLOGIN(DATE,LOGIN,HOSTNAME,IP) VALUES('$SDATE','$LOGIN','$HOSTNAME','$IP') ON DUPLICATE KEY UPDATE DATE=VALUES(DATE), LOGIN=VALUES(LOGIN), HOSTNAME=VALUES(HOSTNAME), IP=VALUES(IP);"

#Читаем лог post.log выбираем только соотвествующие строки, -i регистро независимые, в режиме теста -a (чтоб не считал бринарником)
done< <(grep -i -a "SPARK" /usr/share/glpi/data_server/post.log)

# Удалить строки которые мы получили
sed -i -e 1,"${kolstr}"d /usr/share/glpi/data_server/post.log
Скрипт добавления в КРОН
inst-cron.sh
Показать
# Добавим настройки в Крон
cat /dev/null > /etc/cron.d/post-v-dbscan-seti

{
echo 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
echo '*/30 * * * * root /usr/share/glpi/data_server/post-v-dbscan-seti.sh 2>/dev/null'
echo '@reboot root /usr/share/glpi/data_server/post-v-dbscan-seti.sh 2>/dev/null'
} > "/etc/cron.d/post-v-dbscan-seti"

# Перезапуск службы крон
service cron restart
Команды как загрузить данные в Mysql
Показать

По умолчанию команда загрузки файла данных использует TAB в качестве поля по умолчанию как разделитель

Входим в MySql выбираем БД
USE Имя Базы данных;

Загрузка данных из файла в таблицу
LOAD DATA INFILE 'файл.txt'
INTO TABLE Имя таблицы;
путь к файлу
LOAD DATA INFILE '/data/файл.txt' INTO TABLE Имя таблицы;

Просмотр что загрузилось
select * from Имя таблицы;


Загрузка с параметром разделителя таблицу разделитель , или :
LOAD DATA INFILE 'файл.txt'
INTO TABLE Имя таблицы
FIELDS TERMINATED BY ',';
или
FIELDS TERMINATED BY ':';


опция “Enclosed by”
заключенные в двойные кавычки, т.е. name и department имеют двойные кавычки вокруг них.
LOAD DATA INFILE 'файл.txt'
INTO TABLE Имя таблицы
FIELDS TERMINATED BY ',' ENCLOSED BY '"';

“FIELDS” два раза нельзя использовать

косую черту (\)или ^ перед запятой экранирование запятой

с помощью опции “Lines terminated by
LOAD DATA INFILE 'файл.txt'
INTO TABLE Имя таблицы
FIELDS TERMINATED BY ','
LINES TERMINATED BY '|';

LOAD DATA INFILE 'файл.txt'
INTO TABLE Имя таблицы
FIELDS TERMINATED BY ','
LINES STARTING BY 'Data:';

игнорировать 1-й строку заголовка из файла
LOAD DATA INFILE 'файл.txt'
INTO TABLE Имя таблицы
FIELDS TERMINATED BY ','
IGNORE 1 LINES;

Загрузить только определенные столбцы (и игнорировать другие) при загрузки из файла
укажите имена столбцов во время загрузки данных INFILE В последней строке в следующей команде есть имена столбцов, которые должны использоваться для загрузки записей из входного текстового файла

LOAD DATA INFILE 'файл.txt'
INTO TABLE Имя таблицы
FIELDS TERMINATED BY ','
(id, name, salary);

Переменные Set увиличиваем последний столбец на 500
LOAD DATA INFILE 'файл.txt'
INTO TABLE Имя таблицы
FIELDS TERMINATED BY ','
(id, name, dept, @salary)
SET salary = @salary+500;

Запись Shell
без входа в базу
mysql -e "LOAD DATA INFILE 'файл.txt' INTO TABLE Имя таблицы FIELDS TERMINATED BY ','" \
-u root -pMySQLPassword Имя Базы данных

mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -D БАЗА_ДАННЫХ -e "SQL_ЗАПРОС"


добавит новую запись в таблицу
INSERT INTO Имя таблицы VALUES(100, 'Thomas', 'Sales', 5000);

Вставка данных только для определенных столбцов id и name
INSERT INTO Имя таблицы(id, name) VALUES(200, 'Jason');

Вместо ключевого слова values вы можете использовать слово SET для установки значения нужному полю.
INSERT INTO Имя таблицы SET id=300, name='Mayla';

Обновления строки при повторении
INSERT INTO employee VALUES(100,'Thomas','Sales',5000) on DUPLICATE KEY UPDATE salary=salary+500;


cd /usr/share/glpi/data_server/
post.log

mysql -u scan -pscan -D scan_seti -e "INSERT INTO LINUXSCANSETI(IP,DNS,MAC,NAMEMAC) VALUES("${IP}","${DNS}","${MAC}","${NAMEMAC}")"


ALTER TABLE `LINUXSCANSETI` DROP PRIMARY KEY;
ALTER TABLE `LINUXSCANSETI` ADD PRIMARY KEY( `IP`, `MAC`);

Требует меньше памяти (4 байта INT против 15 байт CHAR).
Удобно производить выборки по диапазонам адресов и маскам, а также делать сортировку (получается обычная сортировка по числам)
Функции преобразования ip-адреса в mysql:
INET_ATON() — для преобразования IP адреса в число,
INET_NTOA() — для обратного преобразования числа в IP адрес.
Для простоты запоминания нужно знать расшифровку аббревиатуры:
ATON — Address TO Number (адрес в число),
NTOA — Number TO Address (число в адрес).

СОЗДАТЬ ТАБЛИЦУ
ALTER TABLE `scansetibd` ADD `IPN` INT(10) UNSIGNED NOT NULL AFTER `DATE`;

на bash работает не везде что то вроде округления делает на некоторых(
IP=192.168.175.8
IPN=`echo $IP|awk '{s = s*256 + $1} END{print s}' RS=.`
echo $IPN
количество слов: 2774

Вернуться в «Сканирование сети получение Логина пользователя»