Como posso cortar o endereço MAC do DHCPDUMP?

2

Estou tentando usar o dhcpdump para reconhecer as pessoas que fazem login em minha rede doméstica e dar a elas uma saudação personalizada usando um arquivo de credencial.

Não consigo obter o endereço MAC dos resultados de dhcpdump . A máquina que estou executando o script não é o servidor DHCP.

Resultados do 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

O comando que estou tentando é:

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

mas isso simplesmente não funciona. Sugestões?

    
por Brian Hunking 03.09.2015 / 05:12

2 respostas

0

Usando grep (graças à A.B. para a sugestão --line-buffered ):

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

O primeiro extrairá o primeiro endereço, o segundo extrairá o último endereço;

Parâmetros do

grep comando # 1:

  • * : corresponde a qualquer número de caracteres
  • IP: : corresponde a uma IP: string
  • .*? : corresponde qualquer número de qualquer caractere preguiçosamente
  • \( : corresponde a um caractere (
  • \K : descarta a correspondência anterior
  • [^)]* : corresponde a qualquer número de qualquer caractere que não seja ) preguiçoso

% de colapso do comandogrep # 2:

  • * : corresponde a qualquer número de caracteres
  • IP: : corresponde a uma IP: string
  • .* : corresponde qualquer número de qualquer caractere avidamente
  • \( : corresponde a um caractere (
  • \K : descarta a correspondência anterior
  • [^)]* : corresponde a qualquer número de qualquer caractere que não seja ) preguiçoso

Exemplo de saída:

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
    
por kos 03.09.2015 / 06:14
0

Se você precisar de grep , precisará usar a opção --line-buffered

Uma maneira mais fácil é mawk e -W interactive

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

Exemplo de saída (você tem que esperar alguns segundos)

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

Se você precisar de grep , precisará usar a opção --line-buffered

    
por A.B. 03.09.2015 / 08:35