Use grep
Você pode usar grep
para localizar todos os arquivos que contenham algo parecido com um endereço IP IPv4. Esteja ciente de que haverá falsos positivos. Por exemplo, o arquivo:
/usr/src/linux-headers-4.14.30-041430/include/linux/oid_registry.h
na linha 48 conterá:
OID_smimeAuthenticatedAttrs, /* 1.2.840.113549.1.9.16.2.11 */
Parece um endereço IP nos comentários, mas não é.
Comece inicialmente com uma contagem de todas as linhas que contêm um endereço IP no seu sistema:
$ sudo time grep -rnwI --exclude-dir={boot,dev,media,mnt,lib,proc,root,run,sys,/tmp,tmpfs,var} -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" / | wc
27.76user 13.17system 1:31.06elapsed 44%CPU (0avgtext+0avgdata 10416maxresident)k
12451744inputs+0outputs (2major+2098minor)pagefaults 0swaps
17164 122083 3138285
Vamos detalhar os comandos
-
sudo
evita erros de "Permissão negada" -
time
nos informa quanto tempo demora para executar, ou seja. 1 minuto 31 segundos -
grep
é o comando que procura por strings em arquivos -
-rnwI
são os argumentos (também conhecidos como parâmetros) passados paragrep
. Os subdiretórios de significância recursivar
são processados. O argumenton
imprime o número da linha que a cadeia de pesquisa ocorre no arquivo. O argumentoI
diz para ignorar arquivos binários. Se os arquivos binários fossem incluídos, o número de arquivos aumentaria de 17.164 para 22.253 no meu sistema. Você não pode abrir arquivos binários e fazer algum sentido deles embora. -
-exclude-dir=
são os diretórios a serem excluídos da pesquisa. Sem essa lista,grep
pode levar 53 horas para concluir: 'grep'ing todos os arquivos para uma string leva muito tempo -
-E
é o argumento paragrep
que indica que a sequência de pesquisa está prestes a ser seguida. -
"([0-9]{1,3}[\.]){3}[0-9]{1,3}"
é a string de pesquisa para olhar para frente. Explicado com mais detalhes abaixo. -
/
informagrep
para iniciar no diretório raiz. No entanto, os diretórios excluídos serão ignorados. -
|
é o comando pipe enviando todas as saídas para o comandowc
em vez da tela. -
wc
é o comando "contagem de palavras". Conta as linhas numéricas, o número de palavras e o número de caracteres passados. No nosso caso, são17164
lines,122,083
words e3,138,285
characters. Vírgulas adicionadas para maior clareza.
Quebrando "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
Como mostrado anteriormente, a string de pesquisa passada para grep
é "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
. Veja como funciona:
"([0-9]{1,3}[\.]){3}[0-9]{1,3}"
^ ^ ^ ^ ^ ^
| | | | | +---- count of digits must be 1 to 3
| | | | +--------- look for digits 0 through 9
| | | +------------- patterns 1 to 3 digits of 0-9 followed by . occurs 3 times
| | +------------------ count of 1 to 3 digits must be followed by .
| +---------------------- count of digits is 1 to 3
+--------------------------- look for digits 0 to 9
Ver a saída em vez da contagem de palavras
Para ver a saída real em vez de apenas a contagem de palavras, remova | wc
do final da linha de comando:
$ sudo time grep -rnwI --exclude-dir={boot,dev,media,mnt,lib,proc,root,run,sys,/tmp,tmpfs,var} -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /
(... SNIP ...)
/usr/bin/printer-profile:176: OUT="nc 192.168.1.12 9100 < xxx.prn"
/opt/google/chrome/default_apps/external_extensions.json:23: "external_version": "0.0.0.6"
/opt/google/chrome/product_logo_32.xpm:330:" [.}.}.|.1.2.3.4.5.6.7.8.9.0.a.b.8.c.d.e.f.g.h.h.i.j.k.l. ",
28.52user 12.54system 1:31.78elapsed 44%CPU (0avgtext+0avgdata 9516maxresident)k
12793352inputs+0outputs (3major+1884minor)pagefaults 0swaps
A listagem é longa demais para caber nessa resposta. Observe que o último arquivo encontrado é um falso positivo:
/opt/google/chrome/product_logo_32.xpm
porque não contém um endereço IP real:
[.}.}.|.1.2.3.4.5.6.7.8.9.0.a.b.8.c.d.e.f.g.h.h.i.j.k.l.
Restrinja sua pesquisa ao diretório /etc
no início
Para restringir a pesquisa a um uso de lista curta mais significativo:
$ sudo time grep -rnI -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /etc/etc/hosts:1:127.0.0.1 localhost
/etc/hosts:2:127.0.1.1 alien
/etc/cron.daily/google-earth:47:Version: GnuPG v1.4.2.2 (GNU/Linux)
(... SNIP ...)
/etc/cups/cups-browsed.conf:77:# BrowseDeny 192.168.1.13
/etc/cups/cups-browsed.conf:78:# BrowseDeny 192.168.3.0/24
/etc/cups/cups-browsed.conf:79:# BrowseDeny 192.168.3.0/255.255.255.0
0.04user 0.03system 0:00.19elapsed 40%CPU (0avgtext+0avgdata 2800maxresident)k
22384inputs+0outputs (1major+181minor)pagefaults 0swaps