Как использовать вывод syslog for else (показать с whois-query)?

Чтобы добавить еще один способ сделать это:

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'
1
задан 22 June 2016 в 17:32

4 ответа

Вы можете использовать команду sed для извлечения всех IP-адресов из IP-адреса, а затем использовать xargs для запуска whois для каждого соответствия:

sed 's/^.*SRC=\([0-9.]*\).*$/\1/;t;d' < /var/log/syslog | xargs -n1 whois >> output.txt

Кнопка [ f6] заменяет строки, содержащие SRC = xxxx только с IP-адресом.

Команды 't; d' пропускают несогласованные строки (тем самым избегая отдельной команды grep).

Команда xargs вызывает whois один раз для каждого адреса, который выдает sed.

В качестве альтернативы вы можете сначала найти и записать соответствующие строки, а затем извлечь ip-адреса отдельно:

grep -eSRC=[0-9.]* /var/log/syslog | tee grep-output.txt | sed 's/^.*SRC=\([0-9.]*\).*$/\1/' | xargs -n1 whois >> whois-output.txt`
5
ответ дан 24 May 2018 в 21:10
  • 1
    Это выглядит хорошо, выше в первом решении / var / log / syslog «пристыкован». просто с '& lt;' ? – dschinn1001 9 July 2013 в 23:53
  • 2
    Это выглядит хорошо, выше в первом решении / var / log / syslog «пристыкован». просто с '& lt;' ? – dschinn1001 10 July 2013 в 00:09
  • 3
    [F1] отправляет содержимое файла / var / log / syslog в sed на stdin. – cscarney 10 July 2013 в 01:07
  • 4
    Я получаю эту ошибку: Usage: whois [OPTION]... OBJECT... – Radu Rădeanu 10 July 2013 в 01:10
  • 5
    В вашем файле syslog содержатся какие-либо IP-адреса? Добавьте флаг -r в xargs, если вам нужно обработать случай, когда список адресов пуст. – cscarney 10 July 2013 в 01:17

Возможно, следующий код является подходящей отправной точкой для вас. Это, вероятно, не оптимальное решение, но оно выполняет свою работу.

Он состоит из цикла for по всем строкам вывода команды в $ (). В каждой итерации цикла одна строка вывода сохраняется в переменной IP. Затем в цикле команда whois вызывается с $ IP - содержимым переменной IP - как аргументом.

Скобки $ () заключают две команды grep - первый ищет IP-адреса с SRC = написано перед ними, а второе берет вывод первого (через канал |) и просто берет IP-адрес. Флаг -o grep заставляет его выводить только согласованную часть строк вместо полных строк.

Регулярное выражение также не очень элегантно. Он ищет три группы, каждая из которых состоит из одной-трех цифр и точки, за которой следуют от одной до трех цифр. Чтобы прочитать сценарий, я решил использовать расширенные регулярные выражения -E. «Нормальная» команда grep потребует обратную косую черту перед каждым раундом и фигурной скобкой ...

for IP in \
 $(grep  -E "SRC=([0-9]{1,3}\.){3}[[0-9]{1,3}" -o  /var/log/syslog  | \
 grep -E "([0-9]{1,3}\.){3}[[0-9]{1,3}" -o);
    do whois $IP;
done
3
ответ дан 24 May 2018 в 21:10

Ваш скрипт должен выглядеть следующим образом:

#/bin/bash

grep 'SRC=' /var/log/syslog | awk 'BEGIN {FS="[ \t]+|\\|"} {print $13}' | uniq >> ~/topsecret001/pitbull001.txt

for ip in $(sed -e 's/SRC=//g' ~/topsecret001/pitbull001.txt)
do 
    whois $ip >> ~/topsecret001/pitbull002.txt
done
2
ответ дан 24 May 2018 в 21:10

Для добавления опции - в случае появления «INVALID STATE» - будет ли это работать? :

awk '{

    for (i = 1; i <= NF; i++)

      if ($i ~ /^SRC=/)

         print substr($i, 5)

   }' /var/log/syslog | sort -u | while read ip; 

do

   printf ' INVALID STATE ' && printf ' === %s ===\n' "$ip"

   whois "$ip"

 done
0
ответ дан 24 May 2018 в 21:10
  • 1
    Этот код энзотиба работает - после его проверки. Таким образом, это уже будет работать как новый демон. – dschinn1001 11 July 2013 в 03:35

Другие вопросы по тегам:

Похожие вопросы: