Как я могу сократить MAC-адрес из DHCPDUMP?

Я пытаюсь использовать 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

но это просто не будет работать. Предложения?

2
задан 3 September 2015 в 16:32

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

0
ответ дан 3 December 2019 в 00:02

Используя grep (благодаря A.B. для --line-buffered предложение):

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

Первый извлечет первый адрес, второй извлечет последний адрес;

grep разбивка команда № 1:

  • *: соответствия любое количество персонажи
  • IP:: соответствия IP: строка
  • .*?: соответствия любое количество любого символа лениво
  • \(: соответствия a ( символ
  • \K: отбрасывает предыдущее соответствие
  • [^)]*: соответствия любое количество любого символа нет ) лениво

grep разбивка команда № 2:

  • *: соответствия любое количество персонажи
  • IP:: соответствия IP: строка
  • .*: соответствия любое количество любого символа жадно
  • \(: соответствия a ( символ
  • \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
0
ответ дан 3 December 2019 в 00:02

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

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