Я пытаюсь использовать 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
но это просто не будет работать. Предложения?
Если Вам нужно 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
Используя 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