Как проверить, присутствует ли какой-либо IP-адрес в файле с помощью сценария оболочки?

Я бы посмотрел на места инициализации и посмотрел, установлена ​​ли там программа для запуска.

Честно говоря, если программа каким-то образом могла запускаться, но вы не знаете, запускалась она или нет, единственный шанс увидеть, запустилась ли она, - это проверить, есть ли у нее способ запуска (например, был зарегистрирован в каком-то local.rc или подобном), либо путем проверки результатов (например, программа всегда касается файла / home / someuser / a , и ничего другого не должно было касаться Это).

Выше предполагается, что у вас нет журналов.

13
18.07.2016, 16:14
8 ответов

начинаю свой ответ на основе этого ответа:

Да, у вас есть много вариантов / инструментов для использования. Я только что пробовал это, работает:

ifconfig | grep -oE "\ b ([0-9] {1,3}.) {3} [0-9] {1,3} \ b" a , чтобы вы могли использовать grep -oE "\ b ([0-9] {1,3}.) {3} [0-9] {1,3} \ b" для поиска IP-адресов из вашего вывода.

и преобразование ответа в полноразмерный IPv6 и т.д ...:

fgrep -oE "\b([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}\b" -- file

если вы хотите сохранить / nnn, если он есть:

fgrep -oE "\b([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}(/[0-9]{1,3}){0,1}\b" -- file

, а также есть сокращенная версия IPv6, которая включает '::'.

, чтобы узнать больше о IPv6, вы можете посмотреть здесь: https://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses

2
27.01.2020, 19:52

Да, у вас есть много возможностей / инструментов. Я только что попробовал, работает:

ifconfig | grep -oE "\ b ([0-9] {1,3} \.) {3} [0-9] {1,3} \ b"

, поэтому вы можете использовать grep -oE " \ b ([0-9] {1,3} \.) {3} [0-9] {1,3} \ b " для поиска IP-адресов из вашего вывода.

46
27.01.2020, 19:52

Перенаправить этот вывод в некоторый файл вывода

Просто grep это с шаблоном как,

grep -sE "159.143.23.12|134.12.178.131|124.143.12.132" <outputFile>
-1
27.01.2020, 19:52

Если ваш файл называется, например, ips , вы можете написать что-нибудь вроде:

while read -r ip
    do
        if [[ $ip == "$1" ]]; then
            shift
            printf '%s\n' 'action to take if match found'
        else
            printf '%s\n' 'action to take if match not found'
        fi
    done < ips

Затем вы можете передать параметры, как показано в сценарии

./myscript 159.143.23.12 134.12.178.131 124.143.12.132 124.143.12.132
3
27.01.2020, 19:52

Если у вас есть список IP в файле, по одному в строке, grep уже имеет удобную опцию -f:

$ man fgrep | grep file= -A1
       -f FILE, --file=FILE
              Obtain patterns from FILE, one per line.  The empty file contains zero patterns, and therefore matches nothing.  (-f is specified by POSIX.)

Это может вызвать несколько ложных срабатываний из-за строк, за которыми может следовать другое число, чтобы сделать его другим IP. С этим можно многое сделать, в зависимости от вашего случая вы можете беспокоиться или не беспокоиться.

0
27.01.2020, 19:52

Протестировано в SmartOS(варианте Solaris ), надеюсь, должно работать в других *средах nix:

egrep '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])'

Пример:

$ cat >file.txt
IP1: 192.168.1.1
IP2: 261.480.201.311
IP3: 1012.680.921.3411

$ egrep '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt
IP1: 192.168.1.1

Этот шаблон соответствует только действительному IPv4, т. е. x.x.x.x, где xнаходится в диапазоне от 0 -255. Если вам нужно извлечь только совпадающий IP-адрес, добавьте параметр -oв вышеуказанная команда. Вы можете встроить эту команду в сценарий bash и, предположительно, в другие сценарии оболочки. И, если egrepтерпит неудачу,try grep -E...

Использование в (сценарии оболочки bash ):

ip=$(egrep -o '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt) echo $ip

2
27.01.2020, 19:52

Я думаю, что мой ответ на другой пост лучше подходит здесь. Благодаря этому сообщению и другим подобным я придумал это, которое ищет правильный формат IP, а затем избавляется от всех строк, содержащих 256 или выше. Замените IP-адрес чем-то, что не является -допустимым, чтобы вместо этого не видеть вывод:

echo '255.154.12.231' | grep -E '(([0-9]{1,3})\.){3}([0-9]{1,3}){1}' | grep -vE '25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]'

Первый grep, вероятно, был найден в этом посте, и он проверяет любые числа от 0 -999 в формате X.X.X.X

Второй grep удаляет строки с номерами 256 -999, таким образом оставляя только действительные IP-адреса формата, поэтому я подумал

НО... Как указал G -Man, я ошибся, предполагая, что IP будет находиться на отдельной строке. Тем не менее, в большинстве случаев по обе стороны IP-адреса будет пробел или другой разделитель. Пробелы/разделители можно удалить с помощью sed или других средств после того, как IP-адрес будет найден. Я также добавил -o к первому grep:

echo ' 1234.5.5.4321 ' | grep -Eo ' (([0-9]{1,3})\.){3}([0-9]{1,3}){1} ' | grep -vE '25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]' | sed 's/ //'

echo ' 234.5.5.432 ' | grep -Eo ' (([0-9]{1,3})\.){3}([0-9]{1,3}){1} ' | grep -vE '25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]' | sed 's/ //'
echo ' 234.5.5.100 ' | grep -Eo ' (([0-9]{1,3})\.){3}([0-9]{1,3}){1} ' | grep -vE '25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]' | sed 's/ //'

Первое и второе не дадут вывода, а третье даст, и пробелы будут удалены.

0
27.01.2020, 19:52

Вот краткая форма

grep -oE "\b(\d{1,3}\.){3}\d{1,3}\b"

\d для цифр [0 -9]

0
10.04.2020, 20:34

Теги

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