th0x0472.log

アクセスカウンタ

zoom RSS pcapファイル中のMACアドレスのベンダ名を表示するワンライナー #pakeana

<<   作成日時 : 2012/09/29 20:42   >>

ブログ気持玉 0 / トラックバック 3 / コメント 0

9/28に 第12回「ネットワーク パケットを読む会(仮)」 に行ってきました。

Network Forensics Puzzle Contest"Puzzle #4: The Curious Mr. X" を解いたのですが、その中でちょっと気になった問題を自分なりに解いてみました、というお話です。

その問題は、

4. What was the MAC address of the Apple system he found?

です。

力技でいくなら、理屈としては、こんな感じでいいんじゃないかと。


  1. IEEEからoui.txtを取ってくる
  2. pcapファイル中に出現するMACアドレスを抜き出す
  3. grep "MACアドレスの前半" oui.txt
  4. ヒットした行からベンダ名を抜き出す
  5. MACアドレスとベンダ名を表示


そんなことを思い立って書き始めて、最終的に出来たワンライナーを実行した結果はこちら。まずまずだと思います。


00:16:cb:92:6e:dc, Apple Computer
00:23:8b:82:1f:4a, Quanta Computer Inc.
00:26:22:cb:1e:79, COMPAL INFORMATION (KUNSHAN) CO., LTD.
70:5a:b6:51:d7:b2, COMPAL INFORMATION (KUNSHAN) CO., LTD.



で、ワンライナーはこちら。ワンライナー・・・といってよいのかどうか、甚だ疑問ですが。一応1行なんですよ。


for MACADDR in $(tcpdump -en -r evidence04.pcap 2>/dev/null | awk '{printf("%s\n%s\n",$2,substr($4,1,17));}' | sort -u | grep -E '^[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}$' | grep -v 'ff:ff:ff:ff:ff:ff');do OUI=$(echo ${MACADDR} | cut -c 1-8 | tr 'a-f:' 'A-F-'); VENDOR=$(grep "^${OUI} " oui.txt | awk '{for(i=3;i<=NF;i++){printf("%s ",$i);}}'); echo ${MACADDR}, ${VENDOR}; done


ざっとスペース含めて400文字以上、パイプ7回、awk, grep 2回、tcpdump, cut, sort, tr, echo など1回。長い・・・。
tcpdumpが出力するMACアドレスはアルファベット小文字で : 区切り、対して oui.txt は大文字で - 区切りなので、それの変換をしてるのと、パターンマッチを割とがんばったせいですかね。いや、それがなくても十分長いかな・・・。


以下解説ですが、もの凄く暇かつ興味がある方だけ読んでください。


前置き的に、何が気になったかと言うと、一つのベンダが複数のOUIを持っていることもあり得ると思いました。CiscoとかIntelなんかスゴイ数になってそうです。

実際、Appleは


APPLE COMPUTER
APPLE COMPUTER INC.
APPLE COMPUTER, INC.
APPLE, INC
Apple
Apple Computer
Apple Computer Inc
Apple Computer Inc.
Apple Computer, Inc.
Apple Inc
Apple, Inc
Apple, Inc.



という、人間なら同じと解釈できるけど機械的には異なる12の名前で、000393 から FC253F まで174個、oui.txtに記載がありました。

一つのベンダが微妙に異なる名前でoui.txtに載っていることもあるんですね〜。
そうか、他にも社名が変わることもあるだろうし、合併したり買収されたり、とうさ・・・げふん。

確認した oui.txt は 2012/09/28 時点のモノです。

そうすると、特定のベンダのMACアドレスを探し出せ、という要求に対して (1) そのベンダのMACアドレスを1つ見つけて (2) 同じOUIを持つMACアドレスを探す というアプローチでは、同ベンダの他のOUIを見落としてしまう。

しかし、oui.txt を元に特定ベンダのOUIの一覧を作るのも相当手間がかかりそうです

そこで、逆に pcapファイル中に存在するすべてのMACアドレスのベンダを特定すればよいのでは?と思ったわけです。

で、その方針としては


  1. tcpdump -en -r <PCAPファイル> で、tcpdumpが出すパケットのサマリーを標準出力へ。
  2. パイプで受けて、awkで1行1MACアドレスで標準出力へ。
  3. sort -u と grep で、重複と非MACアドレスとブロードキャストアドレスを除外。


これが最初の $() の中身で、この出力をエサに、いちばん最初のfor文を回していて、その中では


  1. MACアドレスの前半3バイト抜き出し、oui.txt の形に合わせて変数OUIに代入。
  2. grep ${OUI} oui.txt | 3カラム目以降がベンダ名なので、awkで抜き出して変数VENDORに代入。
  3. MACアドレスと ${VENDOR} を echo


してます。
うーん、ここは思ったほど長くならなかった。
力技だからダラダラと長いだけですね。


いずれにしろ何事もほどほどが肝心です。ってことで、シェルスクリプトにしてみました。


 1: #!/bin/sh
 2: 
 3: if [ ! -r ./oui.txt ]
 4: then
 5:   echo "oui.txt not found."
 6:   exit 1
 7: fi
 8: 
 9: if [ $# -eq 0 ]
10: then
11:   PCAPFILE="./evidence04.pcap"
12: else
13:   PCAPFILE="${1}"
14: fi
15: 
16: if [ ! -r ${PCAPFILE} ]
17: then
18:   echo "${PCAPFILE} not found."
19:   exit 2
20: fi
21: 
22: for MACADDR in $( tcpdump -en -r ${PCAPFILE} 2>/dev/null | \
23:                   awk '{printf("%s\n%s\n",$2,substr($4,1,17));}' | sort -u | \
24:                   grep -E '^[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}$' | \
25:                   grep -v 'ff:ff:ff:ff:ff:ff' )
26: do
27: 
28:   OUI=$(echo ${MACADDR} | cut -c 1-8 | tr 'a-f:' 'A-F-')
29:   VENDOR=$(grep "^${OUI} " oui.txt | awk '{for(i=3;i<=NF;i++){printf("%s ",$i);}}')
30: 
31:   echo ${MACADDR}, ${VENDOR}
32: 
33: done


ちょっと改造すれば、IPアドレス、MACアドレス、ベンダ名の3項目を出力することも出来そうです。
それはまた気が向いたらやる・・・・かもしれません。

それよりも、Pythonでpcapファイル読めるらしいので、そっちの方に興味津々です。


sed & awkプログラミング 改訂版 (A nutshell handbook)
オライリー・ジャパン
Dale Dougherty

amazon.co.jpで買う
Amazonアソシエイト by sed & awkプログラミング 改訂版 (A nutshell handbook) の詳しい情報を見る / ウェブリブログ商品ポータル


テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(3件)

タイトル (本文) ブログ名/日時
レイバン サングラス
pcapファイル中のMACアドレスのベンダ名を表示するワンライナー #pakeana th0x0472.log/ウェブリブログ ...続きを見る
レイバン サングラス
2013/07/05 16:14
エアマックス 2013
pcapファイル中のMACアドレスのベンダ名を表示するワンライナー #pakeana th0x0472.log/ウェブリブログ ...続きを見る
エアマックス 2013
2013/07/09 16:32
VISVIM 通販
pcapファイル中のMACアドレスのベンダ名を表示するワンライナー #pakeana th0x0472.log/ウェブリブログ ...続きを見る
VISVIM 通販
2013/07/10 06:03

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
pcapファイル中のMACアドレスのベンダ名を表示するワンライナー #pakeana th0x0472.log/BIGLOBEウェブリブログ
文字サイズ:       閉じる