Список всех IP-адресов в файлах на моем компьютере?

Вы можете использовать

sed 's/vm.swappiness=[0-9]*/vm.swappiness=1/g' /etc/sysctl.conf

, если не возражаете, сколько цифр у вас есть.

Если вы не хотите, чтобы вы не более трех цифр, вам нужно расширенное (современное) регулярное выражение, а не основные регулярные выражения (BRE). Затем вам необходимо указать параметр «-E»

sed -E 's/vm.swappiness=[0-9]{1,3}/vm.swappiness=1/g' /etc/sysctl.conf
1
задан 9 April 2018 в 05:22

2 ответа

Используйте grep

Вы можете использовать grep, чтобы найти все файлы, содержащие что-то похожее на IP-адрес IPv4. Имейте в виду, что будут ложные срабатывания. Например, файл:

/usr/src/linux-headers-4.14.30-041430/include/linux/oid_registry.h

в строке 48 будет содержать:

OID_smimeAuthenticatedAttrs, /* 1.2.840.113549.1.9.16.2.11 */

В комментариях он выглядит как IP-адрес, но это не так.

Сначала начните с подсчета всех строк, содержащих IP-адрес в вашей системе:

$ 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

Давайте разбейте команды

sudo, чтобы предотвратить «Разрешение отказано» «errors time говорит нам, сколько времени требуется для запуска, т.е. 1 минута 31 секунда grep - это команда, которая ищет строки в файлах -rnwI - это аргументы (ака параметры), переданные в grep. Режимы r означают, что подкаталоги рекурсивного значения обрабатываются. Аргумент n печатает номер строки, в которой находится строка поиска в файле. Аргумент I говорит ему игнорировать двоичные файлы. Если бы двоичные файлы были включены, количество файлов увеличилось бы с 17 164 до 22 253 в моей системе. Однако вы не можете открывать двоичные файлы и понимать их. -exclude-dir= - это каталоги для исключения из поиска. Без этого списка grep может занять 53 часа: `grep`ing всех файлов для строки занимает много времени -E - это аргумент grep, который сообщает, что строка поиска будет следовать. "([0-9]{1,3}[\.]){3}[0-9]{1,3}" является поисковой строкой, чтобы смотреть вперед. Более подробно поясняется ниже. / сообщает grep, чтобы начать с корневого каталога. Однако исключенные каталоги будут пропущены. | - команда pipe, отправляющая весь вывод в команду wc вместо экрана. wc - команда «count count». Он подсчитывает число строк, количество слов и количество переданных ему символов. В нашем случае это 17164 строки, 122,083 слова и 3,138,285 символы. Запятые добавлены для ясности.

Нарушение "([0-9]{1,3}[\.]){3}[0-9]{1,3}"

Как показано выше, строка поиска, переданная в grep, - "([0-9]{1,3}[\.]){3}[0-9]{1,3}". Вот как это работает:

"([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

Увидеть вывод вместо слова count

Чтобы увидеть фактический вывод вместо простого количества слов, удалите | wc с конца командной строки:

$ 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

Список слишком длинный, чтобы вписаться в этот ответ. Обратите внимание, что последний найденный файл является ложным:

/opt/google/chrome/product_logo_32.xpm

, поскольку он не содержит реального IP-адреса:

[.}.}.|.1.2.3.4.5.6.7.8.9.0.a.b.8.c.d.e.f.g.h.h.i.j.k.l.

Ограничьте поиск в каталоге /etc first

Чтобы сузить поиск до более значимого использования короткого списка:

$ 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
2
ответ дан 17 July 2018 в 17:13

Используйте grep

Вы можете использовать grep, чтобы найти все файлы, содержащие что-то похожее на IP-адрес IPv4. Имейте в виду, что будут ложные срабатывания. Например, файл:

/usr/src/linux-headers-4.14.30-041430/include/linux/oid_registry.h

в строке 48 будет содержать:

OID_smimeAuthenticatedAttrs, /* 1.2.840.113549.1.9.16.2.11 */

В комментариях он выглядит как IP-адрес, но это не так.

Сначала начните с подсчета всех строк, содержащих IP-адрес в вашей системе:

$ 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

Давайте разбейте команды

sudo, чтобы предотвратить «Разрешение отказано» «errors time говорит нам, сколько времени требуется для запуска, т.е. 1 минута 31 секунда grep - это команда, которая ищет строки в файлах -rnwI - это аргументы (ака параметры), переданные в grep. Режимы r означают, что подкаталоги рекурсивного значения обрабатываются. Аргумент n печатает номер строки, в которой находится строка поиска в файле. Аргумент I говорит ему игнорировать двоичные файлы. Если бы двоичные файлы были включены, количество файлов увеличилось бы с 17 164 до 22 253 в моей системе. Однако вы не можете открывать двоичные файлы и понимать их. -exclude-dir= - это каталоги для исключения из поиска. Без этого списка grep может занять 53 часа: `grep`ing всех файлов для строки занимает много времени -E - это аргумент grep, который сообщает, что строка поиска будет следовать. "([0-9]{1,3}[\.]){3}[0-9]{1,3}" является поисковой строкой, чтобы смотреть вперед. Более подробно поясняется ниже. / сообщает grep, чтобы начать с корневого каталога. Однако исключенные каталоги будут пропущены. | - команда pipe, отправляющая весь вывод в команду wc вместо экрана. wc - команда «count count». Он подсчитывает число строк, количество слов и количество переданных ему символов. В нашем случае это 17164 строки, 122,083 слова и 3,138,285 символы. Запятые добавлены для ясности.

Нарушение "([0-9]{1,3}[\.]){3}[0-9]{1,3}"

Как показано выше, строка поиска, переданная в grep, - "([0-9]{1,3}[\.]){3}[0-9]{1,3}". Вот как это работает:

"([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

Увидеть вывод вместо слова count

Чтобы увидеть фактический вывод вместо простого количества слов, удалите | wc с конца командной строки:

$ 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

Список слишком длинный, чтобы вписаться в этот ответ. Обратите внимание, что последний найденный файл является ложным:

/opt/google/chrome/product_logo_32.xpm

, поскольку он не содержит реального IP-адреса:

[.}.}.|.1.2.3.4.5.6.7.8.9.0.a.b.8.c.d.e.f.g.h.h.i.j.k.l.

Ограничьте поиск в каталоге /etc first

Чтобы сузить поиск до более значимого использования короткого списка:

$ 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
2
ответ дан 23 July 2018 в 18:04
  • 1
    Это неудобно, поскольку не удается найти адреса IPv6. Также: 0xc0.0xa8.0x01.0x6e, 0xC0A8016E и 3232235886 - все допустимые способы записи адреса IPv4, обычно записываемого как 192.168.1.110. Так что нелегко найти действительно все IP-адреса. – Sebastian Stark 9 April 2018 в 07:04
  • 2
    @SebastianStark. Я нашел несколько ответов в Stack Exchange о том, как grep на адресах IPv6, но пока не понял. Вы можете опубликовать ответ, если знаете, как иначе, иначе я обновлю свой ответ после того, как выясню его. – WinEunuuchs2Unix 9 April 2018 в 07:07
  • 3
    Записная восьмеричная нотация для IPv4: 0300.0250.0001.0156 – Sebastian Stark 9 April 2018 в 07:09
  • 4
    Не совсем понятно, что вы пытаетесь сделать, за исключением того, что задаете немного эзотерический вопрос обработки текста. – Sebastian Stark 9 April 2018 в 07:14
  • 5
    Значительное количество IP-адресов на вашем компьютере будет только в ОЗУ, например, в таблице маршрутизации или кеше ARP. Большинство из них вы, вероятно, сможете получить из файловой системы / proc или со специальными инструментами (arp (8), ip (8)). – Sebastian Stark 9 April 2018 в 07:28

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

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