答案1
使用grep
您可以使用它grep
来查找所有包含类似 IPv4 IP 地址的文件。请注意,可能会出现误报。例如文件:
/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
防止“权限被拒绝”错误time
告诉我们运行需要多长时间,即 1 分 31 秒grep
是在文件中搜索字符串的命令-rnwI
是传递给 的参数(又称参数)grep
。r
表示递归,即处理子目录。 参数n
打印文件中搜索字符串出现的行号。 参数I
告诉它忽略二进制文件。 如果包括二进制文件,则我的系统上的文件数量将从 17,164 个增加到 22,253 个。 但是您无法打开二进制文件并理解它们。-exclude-dir=
是要从搜索中排除的目录。没有此列表grep
则可能需要 53 小时才能完成:在所有文件中查找字符串需要很长时间-E
grep
是告诉它搜索字符串即将跟随的参数。"([0-9]{1,3}[\.]){3}[0-9]{1,3}"
是要查找的搜索字符串。下面将详细说明。/
指示grep
从根目录开始。但是将跳过排除的目录。|
管道命令是将所有输出发送到wc
命令而不是屏幕。wc
是“字数统计”命令。它统计传递给它的行数、字数和字符数。在我们的例子中,它是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
查看输出结果而不是字数统计
要查看实际输出而不仅仅是字数,请| 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
首先将搜索限制在目录内
要缩小搜索范围,找到更有意义的候选名单,请使用:
$ 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