トップ «前の日記(05/02/2012) 最新 次の日記(05/13/2012)» 編集

本 日 の h o g e

hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。

更新情報の取得には rdflirs を使ってもらえると嬉しいです.


05/10/2012 ふむ [長年日記]

tDiary 3486日目

[Linux] TAP を使ってみる

L2 な仮想デバイスを作れ,そのデバイスに対する入出力をファイルディスクリプタ経由で行うことのできる TAP を使ってみる.

Linux の Documentation/networking/tuntap.txt に色々書いてあるので,適当に読みつつ tapcap なるものを書いてみた.

$ gcc -o tapcap tapcap.c
$ sudo ./tapcap tapcap0

引数にデバイス名を渡して実行してやると,仮想デバイスが出来上がる.

$ ifconfig tapcap0
tapcap0   Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:0 (0.0 B)  TX bytes:328 (328.0 B)

一方,プロセス側ではこのデバイスがファイルディスクリプタとして見えている. tapcap は fd をひたすら read して hexdump するだけの小さなブツなので,ブリッジに繋ぐなど殴る蹴るの暴行を加えると,

$ sudo brctl addif br0 tapcap0
$ brctl show
bridge name     bridge id               STP enabled     interfaces
br0             xxxx.xxxxxxxxxxxx       no              eth0
                                                        tapcap0

L2 フレームがべろべろと流れ始める.ちなみにこいつは IPv4/ICMP/ブロードキャスト.

-- Thu May 10 23:41:49 2012

  0x0000: ffff ffff ffff 001c c039 0ceb 0800 4500
  0x0010: 0054 0000 4000 4001 155a ac10 e62e ac10
  0x0020: e6ff 0800 28eb 6108 0001 add3 ab4f 0000
  0x0030: 0000 5115 0500 0000 0000 1011 1213 1415
  0x0040: 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
  0x0050: 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
  0x0060: 3637 

ちなみにこのデバイスには tcpdump をかけることもできるのでプロセスによる hexdump はただのオマケ.

TAP 自体は write つまり送信もサポートしてるので色々遊べそう. 邪悪な意味も含めて.