如何在局域网中查找“唯一” IP 地址

如何在局域网中查找“唯一” IP 地址
sudo arp-scan --interface=eth0 --localnet

我知道上述命令运行正常,但它会输出所有内容,例如 MAC 地址等。但我只需要查找 IP 地址。可能吗?

答案1

我只需使用以下命令即可grep

$ sudo arp-scan --interface=eth0 --localnet | grep -oP '^[\d.]+'
192.168.0.1 
192.168.0.2 
192.168.0.3 
192.168.0.10    
192.168.0.23    
192.168.0.72    
192.168.27.1    
192.168.27.14
192.168.27.30

解释:

指示使用 Perl 兼容正则表达式,其中匹配任何数字。-P表示“仅打印行的匹配部分”。我使用的正则表达式表示匹配位于行首( ) 的最长连续数字 ( ) 或点 ( ) 字符串(这就是 的意思)。grep\d-o+\d.^

答案2

我只是用了awktailhead实现你想要的:

sudo arp-scan --interface=eth0 --localnet| awk '{print $1}'|tail -n +3|head -n -2

输出结果如下

192.168.1.1
192.168.1.3

因为我的 Lan 中只有这两个。

这里awk '{print $1}'打印位于第一列的 IP 地址。 tailhead删除标题等不必要的内容,仅显示 IP 地址。

答案3

以下是使用 ifconfig 命令获取 IP 地址的一行代码:

~$ ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
192.168.1.10

这能满足您的要求吗?还是您需要 arp-scan 命令?

我重新阅读后发现我错过了问题的重点。arp-scan显示网络的本地 IP 地址,而我只显示了机器的 IP ifconfig。 下面是上述 terdon 解决方案的一个版本,只是没有使用 PCRE 库。 当我尝试使用 Ubuntu 时,它遇到了 pcre 和 grep 的问题。

$ sudo arp-scan --interface=eth0 --localnet | grep -o ^[0-9.]*

答案4

简化@Stormvirux 答案的另一种方法是使用- 安静的或者-q- 清楚的或者-X提供的参数arp 扫描而不是通过管道传输到尾巴命令最终的命令会更简单,因为它只会传送到awk

arp-scan -qx --localnet | awk '{print $1}'

以下是来自arp 扫描——帮助

--quiet or -q       Only display minimal output. No protocol decoding.
            If this option is specified, then only the IP address
            and MAC address are displayed for each responding host.
            No protocol decoding is performed and the OUI mapping
            files are not used.

--plain or -x       Display plain output showing only responding hosts.
            This option suppresses the printing of the header and
            footer text, and only displays one line for each
            responding host. Useful if the output will be
            parsed by a script.

相关内容