使用grep

使用grep

经过几年的考虑,我决定将一台旧笔记本电脑设置为家庭网络和整个世界的服务器,我想了解更多有关 IP 地址的知识。

我如何才能找到现在我的电脑上存储了哪些 IP 地址?这样我现在就可以查看有趣的文件。我以后可能会用它们来设置 IP 地址以配置程序。

虽然标签出现在这个问题下,GUI 解决方案完全可以代替.grep不必用来满足标签,如果二进制文件可以被解释,那么也很好。

答案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是传递给 的参数(又称参数)grepr表示递归,即处理子目录。 参数n打印文件中搜索字符串出现的行号。 参数I告诉它忽略二进制文件。 如果包括二进制文件,则我的系统上的文件数量将从 17,164 个增加到 22,253 个。 但是您无法打开二进制文件并理解它们。
  • -exclude-dir=是要从搜索中排除的目录。没有此列表grep则可能需要 53 小时才能完成:在所有文件中查找字符串需要很长时间
  • -Egrep是告诉它搜索字符串即将跟随的参数。
  • "([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

相关内容