Como redigir todos os endereços IP de um arquivo de log no Debian?

1

Eu tenho um arquivo de log pure-ftpd que gostaria de anonimizar periodicamente. Como eu iria fazer isso? Eu gostaria de remover endereços IPv4 e IPv6. Eu tenho medo eu não sei sed / awk.

O arquivo de log é assim:

Oct  3 19:30:39 hostname pure-ftpd: ([email protected]) [INFO] New connection from 0.0.0.0

Gostaria de remover o 0.0.0.0 IP e substituí-lo por outra coisa. Eu sei que vou colocar o script no cron para rodar periodicamente.

Obrigado!

    
por BusinessGuy 03.10.2017 / 19:36

1 resposta

2

Tente isso para IPv4 :

sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/HELLO!/g' file

Substitua HELLO! pelo que você precisa.

Exemplo:

echo "Oct  3 19:30:39 hostname pure-ftpd: ([email protected]) [INFO] New connection from 0.0.0.0" | sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/HELLO!/g'

A saída será:

Oct  3 19:30:39 hostname pure-ftpd: (username@HELLO!) [INFO] New connection from HELLO!

Com o IPv6 tudo é mais complicado do que parece. Preciso de mais exemplos de seus arquivos de log para construir o padrão de expressão regular correto. Mas o padrão mais simples para o IPv6 sendo substituído em seus logs é:

sed 's/\([A-Za-z0-9]*:\)\{1,7\}[A-Za-z0-9]\{1,4\}/HELLO!/2g' file

Esse padrão substituirá a maior parte dos endereços IPv6, mas não todos! Para substituir toda a ocorrência, você precisa de uma solução mais complexa.

Exemplo:

echo "Oct  3 19:30:39 hostname pure-ftpd: (username@2001:db8:85a3:8d3:1319:8a2e:370:7348) [INFO] New connection from 2001:db8::1" | sed 's/\([A-Za-z0-9]*:\)\{1,7\}[A-Za-z0-9]\{1,4\}/HELLO!/2g'

A saída será:

Oct  3 19:30:39 hostname pure-ftpd: (username@HELLO!) [INFO] New connection from HELLO!

Veja tópicos semelhantes sobre o regex do IPv6:

Expressões regulares que correspondem a endereços IPv6 válidos

    
por 03.10.2017 / 20:13