Поиск IP-адресов в файле, кроме локальных IP-адресов

Попробуйте скачать gnome -твики и должна быть опция блокировки при закрытии крышки.

Для загрузки gnome -делаем твики :sudo apt install gnome-tweaks-tool

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

3
01.03.2021, 01:30
4 ответа

Кажется, вы хотите отфильтровать строки, содержащие адрес в блоке 192.168.0.0/16. Вы можете сделать это с помощьюgrepcidr:

$ grepcidr -v '192.168.0.0/16' file
2020-06-23T11:12:59.04698 auth.info: Jun 23 06:12:59 sshd[25036]: banner exchange: Connection from 194.61.24.4 port 1565: invalid format
2020-07-14T14:53:30.54107 auth.info: Jul 14 09:53:30 sshd[30149]: banner exchange: Connection from 31.207.47.114 port 1848: invalid format
2020-09-06T15:25:19.32385 auth.info: Sep 6 10:25:19 sshd[18826]: banner exchange: Connection from 193.142.146.216 port 30884: invalid format
2021-02-05T12:24:30.42762 auth.info: Feb 5 06:24:30 sshd[27489]: banner exchange: Connection from 94.232.47.170 port 107: invalid format

Или, если вы хотите использовать определенный диапазон, например «между 192.168.1.0 и 192.168.2.255»:

$ grepcidr -v '192.168.1.0-192.168.2.255' file
2020-06-23T11:12:59.04698 auth.info: Jun 23 06:12:59 sshd[25036]: banner exchange: Connection from 194.61.24.4 port 1565: invalid format
2020-07-14T14:53:30.54107 auth.info: Jul 14 09:53:30 sshd[30149]: banner exchange: Connection from 31.207.47.114 port 1848: invalid format
2020-09-06T15:25:19.32385 auth.info: Sep 6 10:25:19 sshd[18826]: banner exchange: Connection from 193.142.146.216 port 30884: invalid format
2021-02-05T12:24:30.42762 auth.info: Feb 5 06:24:30 sshd[27489]: banner exchange: Connection from 94.232.47.170 port 107: invalid format

Чтобы отфильтровать все частные блоки IPv4, используйте

grepcidr -v '10.0.0.0/8,172.16.0.0/12,192.168.0.0/16' file

grepcidrтакже должен понимать IPv6, но поскольку я этого не понимаю, я не буду приводить пример.

4
18.03.2021, 22:28

В GNU grepили любом другом grepсperl-поддержкой регулярного выражения, вы можете использовать отрицательный просмотр -опережающего оператора:

grep -P '\b(?!192\.168\.)(\d{1,3})(\.(?1)){3}\b'

Или напрямую сperl:

perl -ne 'print if /\b(?!192\.168\.)(\d{1,3})(\.(?1)){3}\b/'

Они сообщают о строках, содержащих четверное -десятичное представление IP-адреса, отличного от тех, которые начинаются с 192.168., даже если эти строки также содержат IP-адрес 192.168.x.y.

Для более строгого сопоставления IP-адресов можно использовать модуль Regexp::Common::net:

perl -MRegexp::Common=net -ne '
  print if m{
    \b$RE{net}{IPv4}{-keep}\b
    (?(?{$2 == 192 && $3 == 168}) (*FAIL))
  }x'
1
18.03.2021, 22:28

Я думаю, что grepи PCREлучший инструмент для таких работ:

grep -Po "(?<=from )(\d{1,3}\.){3}\d{1,3}(?= port)" file | grep -Ev "^192\.168\.1\.[[:digit:]]{1,3}$"

Предположим, что в вашей сети используется маска класса C по умолчанию /24.

Лучше пропустить ведение журнала для нужных хостов, таких как хосты локальной сети в вашем случае.

Кроме того, вывод вашего регистратора не идеален для синтаксического анализа. Лучший регистратор, например модуль ведения журнала. из iptablesбрандмауэра показать запись для разбора более сложным способом:

Feb 27 00:32:33 hostname kernel: [181663.827178] [HTTPS-ATTEMPT]IN=eno1 OUT= MAC=aa:bb:cc:dd:ee:ff:ff:ee:dd:cc:bb:aa:08:00 SRC=X.X.X.X DST=X.X.X.X LEN=40 TOS=0x00 PREC=0x00 TTL=242 ID=54321 PROTO=TCP SPT=42717 DPT=443 WINDOW=65535 RES=0x00 SYN URGP=0 

Если вы можете пропустить ведение журнала для локального узла локальной сети, то grepможет остановиться на первом без конвейера для второго раунда.

@Praveen Kumar BS заставил меня подумать о хорошем pythonмодуле для выполнения этой работы:ipaddrress

#!/usr/bin/python3
import ipaddress
import re

lan = ipaddress.IPv4Network("192.168.1.0/24")

with open("stack.log", 'r') as log:
    for line in log:
        curr_ip = re.search(r'(?<=from )(\d{1,3}\.){3}\d{1,3}\b', line)
        if curr_ip and not ipaddress.IPv4Address(curr_ip.group()) in lan:
            print(curr_ip.group())

с ipaddressвы можете создать адрес из захвата регулярного выражения и проверить, находится ли он в данной сети, lan, в моем примере.

2
18.03.2021, 22:28

команда:

awk '!/192.168.*.*/{for(i=1;i<=NF;i++){if($i ~ /^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$/){print $i}}}' filename

выход

194.61.24.4
31.207.47.114
193.142.146.216
94.232.47.170

Питон

#!/usr/bin/python
import re
k=re.compile(r'192.168.*.*')
c=re.compile(r'^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*')
m=open('p.txt','r')
for i in m:
    if not re.search(k,i):
        z=i.split(' ')
        for v in range(0,len(z),1):
            if re.search(c,z[v]):
                print z[v]
            

выход

194.61.24.4
31.207.47.114
193.142.146.216
94.232.47.170
0
18.03.2021, 22:28

Теги

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