我怎样才能从 DHCPDUMP 中删除 MAC 地址?

我怎样才能从 DHCPDUMP 中删除 MAC 地址?

我正在尝试dhcpdump识别登录我家庭网络的人员,并使用凭证文件向他们提供量身定制的问候。

我无法从结果中获取 mac 地址dhcpdump。我运行脚本的机器不是 DHCP 服务器。

dhcpdump 结果:

  TIME: 2015-09-02 22:42:48.909
    IP: 0.0.0.0 (xx:xx:xx:xx:xx:xx) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6

我正在尝试的命令是:

dhcpdump -i eth0 | grep IP: | cut -d"(" -f2 | cut -d")" -f1

但就是不起作用。有什么建议吗?

答案1

使用grep(感谢 AB 的建议--line-buffered):

dhcpdump -i eth0 | grep --line-buffered -Po ' *IP: .*?\(\K[^)]*'
dhcpdump -i eth0 | grep --line-buffered -Po ' *IP: .*\(\K[^)]*' 

第一个将提取第一个地址,第二个将提取最后一个地址;

grep命令 #1 分解:

  • *: 匹配任意数量的字符
  • IP::匹配IP:字符串
  • .*?: 惰性匹配任意数量的任意字符
  • \(: 匹配一个(字符
  • \K:丢弃前一个匹配项
  • [^)]*: 匹配任意数量的任意字符,不是)懒惰的

grep命令 #2 分解:

  • *: 匹配任意数量的字符
  • IP::匹配IP:字符串
  • .*: 贪婪匹配任意数量的任意字符
  • \(: 匹配一个(字符
  • \K:丢弃前一个匹配项
  • [^)]*: 匹配任意数量的任意字符,不是)懒惰的

示例输出:

user@debian ~ % echo "IP: 0.0.0.0 (xx:xx:xx:xx:xx:xx) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)" | grep -Po ' *IP: .*?\(\K[^)]*' 
xx:xx:xx:xx:xx:xx
user@debian ~ % echo "IP: 0.0.0.0 (xx:xx:xx:xx:xx:xx) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)" | grep -Po ' *IP: .*\(\K[^)]*'
ff:ff:ff:ff:ff:ff

答案2

如果需要,grep你必须使用开关--line-buffered

更简单的方法mawk-W interactive

sudo dhcpdump -i eth0 | mawk -W interactive '/IP: / {gsub(/\(|\)/,"", $3); print $3}'

示例输出(您必须等待几秒钟)

64:31:50:30:ca:1e
40:61:86:7:ce:34
0:24:21:b1:6f:32
54:27:1e:19:7c:3b
0:23:7d:5f:4a:e8

如果需要,grep你必须使用开关--line-buffered

相关内容