2019年12月13日

iptables に出てくる MAC って長すぎないですか

iptales の LOG モジュールで記録される MAC アドレスがやたら長い。これの解読法が案外明文化されてなかったので残しておく。

例えば DHCP のログなんか取ろうとすると、

iptables -A INPUT -p udp -m udp --dport 67 -j LOG

ログにこう出てくる。MAC アドレスは通常は6オクテットのはずが、14もある。

Dec 8 00:40:52 raspberrypi kernel: [2723124.351541] IN=wlan0 OUT= MAC=00:00:5e:00:53:8e:00:00:5e:00:53:2d:08:00 SRC=192.168.29.202 DST=192.168.29.1 LEN=328 TOS=0x00 PREC=0x00 TTL=64 ID=50652 PROTO=UDP SPT=68 DPT=67 LEN=308

実は MAC の項目は単純な送受信側どちらかのアドレスではなく、MAC ヘッダー。分解すると

  • 先頭6個: 宛先
  • 続く6個: 送信元
  • 最後2個: EtherType (0x0800は IPv4 を表す)

Wikipedia にちょうどいい図解があったので拝借。左側の「MAC Header (14 bytes)」がこれに該当する。(byte ≒ octet)

Ethernet IIフレームの図解
パブリック・ドメイン, リンク

この図に表された通信のログが残るとしたら、こうなる。わかりやすく真ん中(送信元)だけ太字にしてみた。

MAC=80:00:20:7a:3f:3e:80:00:20:20:3a:ae:08:00

パースしたい

sed でやろうかな?と思ったら LOG モジュールにオプションがあった。

iptables -A INPUT -p udp -m udp --dport 67 -j LOG --log-macdecode

MAC の項目が SRC DST PROTO に分けられる。便利便利。

IN=wlan0 OUT= MACSRC=00:00:5e:00:53:8e MACDST=00:00:5e:00:53:2d MACPROTO=08:00 …

もっと長くなっても

ブロードキャストだと記録されるオクテットは22個になる。これは UPnP 機器からの通信ログ。

MAC=ff:ff:ff:ff:ff:ff:00:00:5e:00:53:03:08:00:45:00:00:f1:00:00:40:00

--log-macdecode はきっちりデコードしてくれる。

MACSRC=00:00:5e:00:53:03 MACDST=ff:ff:ff:ff:ff:ff MACPROTO=0800

後半の8オクテットはなんだろう?デコードで捨てられてるし。

参考リンク

posted by かぷらす at 19:00| Comment(0) | 調査 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください