際際滷

際際滷Share a Scribd company logo
Rubyで
パケットのパ`サと
ジェネレ`タを恬ろう
互m 芦畔
Trema チ`ム
玉く
iみやすく
個夛しやすい
トポロジ冥沫
サンプルコ`ド
パ`サジェネレ`タ
コントロ`ラ
LLDP
PacketOut
LLDP
PacketIn
PacketFuhttps://github.com/todb/packetfu
お,おう...
Rackethttp://spoofed.org/?les/racket/
おしい...
LLDPの伏撹
LLDPのパ`ス
尖
BinDatahttps://github.com/dmendel/bindata
LLDPクラス
傚冱議
DSL
パ`サジェネレ`タ
Lldp#readLldp.new
BinDataで
gHに恬ってみよう
晦晦禽永フレ`ムフォ`マット
class Lldp < BinData::Record
mac_address :destination_mac
mac_address :source_mac
uint16 :ether_type, ...
chassis_id_tlv :chassis_id
port_id_tlv :port_id
ttl_tlv :ttl, ...
array :optional_tlv, ...
# ロ`ド
require ^lldp ̄
# LLDPのパ`ス
Lldp.read(packet_in.data).dpid #=> 12345
# 伏撹
lldp = Lldp.new(:destination_mac => ...,
:source_mac => ...)
# 僕佚
send_packet_out(dpid,
:data => lldp.to_binary,
...)
class Lldp < BinData::Record
mac_address :destination_mac
mac_address :source_mac
uint16 :ether_type, ...
chassis_id_tlv :chassis_id
port_id_tlv :port_id
ttl_tlv :ttl, ...
array :optional_tlv, ...
end
侏 :フィ`ルド兆
プリミティブ侏
? string, stringz
? int8, uint16, int32be,...
? bit1, bit2, bit4_le,...
? ?oat_le, double_be,...
ユ`ザ協x侏
? mac_address
? chassis_id_tlv
? port_id_tlv
? ttl_tlv
? optional_tlv
ボトムアップに侏を協吶
class FooBarTlv < BinData::Primitive
...
bit7 :tlv_type, :value => xxx
??bit9 :tlv_info_length
??string :foobar,
:read_length => :tlv_info_length
だいたいパ`スできた!
Optional TLV
BinDataでどう燕す?
0゛N
Optional TLVのN
? Port Description (4)
? System Name (5)
? System Description (6)
? System Capabilities (7)
? Management Address (8)
☆カッコ坪は TLV type の
よく聞う
Optional TLV
1゛N
? Optional TLV (type = 4゛8, 0) の Array
? Array のK極は End of LLDPDU
BinDataで
OptionalTLVをQうには?
CODE
class Lldp < BinData::Record
...
array :optional_tlv,
:type => :optional_tlv,
:read_until =>
lambda { element.end_of_lldpdu? }
Optional TLV
End of LLDPDU でKわる Optional TLV 塘双
class OptionalTlv < BinData::Record
...
bit7 :tlv_type
...
def end_of_lldpdu?
tlv_type == 0
end
K極のチェック
Ruby でハ?ケットハ?`サを恬ろう
class OptionalTlv < BinData::Record
bit7 :tlv_type
??bit9 :tlv_info_length
??choice :tlv_value, ...
:selection => :chooser do
end_of_lldpdu_value 0
????port_description_value 4
????system_name_value 5
????system_description_value 6
????system_capabilities_value 7
????management_address_value 8
????string ^unknown ̄
end
慌宥
どれかが
秘る
??choice :tlv_value, ...
:selection => :chooser do
end_of_lldpdu_value 0
????port_description_value 4
...
string ^unknown ̄
...
def chooser
????if tlv_type == 0 or
(4 <= tlv_type and tlv_type <= 8)
??????tlv_type
????else
??????"unknown"
????end
??end
class SystemNameValue < BinData::Record
stringz :system_name
end
すべてパ`スできた!
ちょっとひと返gで
このうまさ
Lldp.new(:destination_mac
=> [0x11, 0x22, ...], ...)
# vs.
Lldp.new(:destination_mac
=> "11:22:33:44:55:66", ...)
どちらが聞いやすい?
class MacAddress < BinData::Primitive
array :octets, :type => :uint8, :initial_length => 6
def set value
self.octets = value.split(/:/).collect do | each |
each.hex
end
end
猟忖双★屁方塘双
ちゃんと
咾?
describe OptionalTlv do
subject { OptionalTlv.read( data ) }
context "when parsing End Of LLDPDU TLV" do
let( :data ) { [ 0x00, 0x00 ].pack( "C*" ) }
its( :tlv_type ) { should eq 0 }
its( :tlv_info_length ) { should eq 0 }
its( :tlv_value ) { should eq "tlv_info_string" => "" }
end
...
RSpec でテスト
ここまでやれば匯瞳
撹惚麗
APC 除儲箆篠
https://github.com/yasuhito/ruby_topology
? 仝$$パケットをI尖するには々
? BinData を聞えばきれいにける
? lか匯wにやりませんか!!
Tremaレシピ鹿
? pcap を鹿める繁
? コ`ディングする繁
? gh廠でテストする繁
慌揖_k
Trema TremaEdge
paper-house
Trema::Packet
gemの恬宀に
なろう
Ad

Recommended

Trema day#4 Pio腹り ~Tremaのパケットパ`サ~
Trema day#4 Pio腹り ~Tremaのパケットパ`サ~
エイシュン コンドウ
?
暴と鰻酷遺(s雰園)
暴と鰻酷遺(s雰園)
Hirokuma Ueno
?
.鰻掘意狼蝕k宀から需た干温厩温
.鰻掘意狼蝕k宀から需た干温厩温
bleis tift
?
Rpn and forth 階秘T
Rpn and forth 階秘T
Yoshitaka Seo
?
稚の冱囂酷看姻岳鞄が稚なのでg廾した
稚の冱囂酷看姻岳鞄が稚なのでg廾した
t-sin
?
埖侵NDEF 2013定8埖催
埖侵NDEF 2013定8埖催
Hirokuma Ueno
?
埖侵NDEF 2013定3埖催(怱I催)
埖侵NDEF 2013定3埖催(怱I催)
Hirokuma Ueno
?
Better C#の用抜を朕峺して
Better C#の用抜を朕峺して
bleis tift
?
F#によるFunctional Programming秘T
F#によるFunctional Programming秘T
bleis tift
?
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
ryos36
?
Buffer overflow
Buffer overflow
ionis111
?
Polyphony のK双晒
Polyphony のK双晒
ryos36
?
Yaminabe fortran
Yaminabe fortran
堰永遺システムズ幄塀氏芙
?
Stager
Stager
sounakano
?
About FeliCa Lite(晩云Z)
About FeliCa Lite(晩云Z)
Hirokuma Ueno
?
沿霞岳鞄看稼ワンライナ`のすfめ
沿霞岳鞄看稼ワンライナ`のすfめ
cocu_628496
?
Raspberry pi on java 20130510
Raspberry pi on java 20130510
Masafumi Ohta
?
ここがすごい! なぞと永堰永5.3
ここがすごい! なぞと永堰永5.3
Takuya Sato
?
Hachiojipm41
Hachiojipm41
Hiroaki KOBAYASHI
?
Polyphony IO まとめ
Polyphony IO まとめ
ryos36
?
埖侵NDEF 2013定2埖催(Rr催)
埖侵NDEF 2013定2埖催(Rr催)
Hirokuma Ueno
?
ネタプログラミング冱Zクリエイタ`Youma (Gunma.web #8 2012/03/03)
ネタプログラミング冱Zクリエイタ`Youma (Gunma.web #8 2012/03/03)
parrotstudio
?
がんばれ PHP Fiber
がんばれ PHP Fiber
infinite_loop
?
PYNQ疾りLT todotani
PYNQ疾りLT todotani
Kenshi Kamiya
?
Lt7 TensorFlow
Lt7 TensorFlow
GIG inc.
?
Pynqでカメラ鮫颪鬟螢▲襯織ぅfastx コ`ナ`奮
Pynqでカメラ鮫颪鬟螢▲襯織ぅfastx コ`ナ`奮
marsee101
?
Rust-DPDK
Rust-DPDK
Masaru Oki
?
RubyでるOpenFlowネットワ`ク - LLまつり
RubyでるOpenFlowネットワ`ク - LLまつり
Yuya Rin
?

More Related Content

What's hot (20)

Better C#の用抜を朕峺して
Better C#の用抜を朕峺して
bleis tift
?
F#によるFunctional Programming秘T
F#によるFunctional Programming秘T
bleis tift
?
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
ryos36
?
Buffer overflow
Buffer overflow
ionis111
?
Polyphony のK双晒
Polyphony のK双晒
ryos36
?
Yaminabe fortran
Yaminabe fortran
堰永遺システムズ幄塀氏芙
?
Stager
Stager
sounakano
?
About FeliCa Lite(晩云Z)
About FeliCa Lite(晩云Z)
Hirokuma Ueno
?
沿霞岳鞄看稼ワンライナ`のすfめ
沿霞岳鞄看稼ワンライナ`のすfめ
cocu_628496
?
Raspberry pi on java 20130510
Raspberry pi on java 20130510
Masafumi Ohta
?
ここがすごい! なぞと永堰永5.3
ここがすごい! なぞと永堰永5.3
Takuya Sato
?
Hachiojipm41
Hachiojipm41
Hiroaki KOBAYASHI
?
Polyphony IO まとめ
Polyphony IO まとめ
ryos36
?
埖侵NDEF 2013定2埖催(Rr催)
埖侵NDEF 2013定2埖催(Rr催)
Hirokuma Ueno
?
ネタプログラミング冱Zクリエイタ`Youma (Gunma.web #8 2012/03/03)
ネタプログラミング冱Zクリエイタ`Youma (Gunma.web #8 2012/03/03)
parrotstudio
?
がんばれ PHP Fiber
がんばれ PHP Fiber
infinite_loop
?
PYNQ疾りLT todotani
PYNQ疾りLT todotani
Kenshi Kamiya
?
Lt7 TensorFlow
Lt7 TensorFlow
GIG inc.
?
Pynqでカメラ鮫颪鬟螢▲襯織ぅfastx コ`ナ`奮
Pynqでカメラ鮫颪鬟螢▲襯織ぅfastx コ`ナ`奮
marsee101
?
Better C#の用抜を朕峺して
Better C#の用抜を朕峺して
bleis tift
?
F#によるFunctional Programming秘T
F#によるFunctional Programming秘T
bleis tift
?
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
ryos36
?
Buffer overflow
Buffer overflow
ionis111
?
Polyphony のK双晒
Polyphony のK双晒
ryos36
?
About FeliCa Lite(晩云Z)
About FeliCa Lite(晩云Z)
Hirokuma Ueno
?
沿霞岳鞄看稼ワンライナ`のすfめ
沿霞岳鞄看稼ワンライナ`のすfめ
cocu_628496
?
Raspberry pi on java 20130510
Raspberry pi on java 20130510
Masafumi Ohta
?
ここがすごい! なぞと永堰永5.3
ここがすごい! なぞと永堰永5.3
Takuya Sato
?
Polyphony IO まとめ
Polyphony IO まとめ
ryos36
?
埖侵NDEF 2013定2埖催(Rr催)
埖侵NDEF 2013定2埖催(Rr催)
Hirokuma Ueno
?
ネタプログラミング冱Zクリエイタ`Youma (Gunma.web #8 2012/03/03)
ネタプログラミング冱Zクリエイタ`Youma (Gunma.web #8 2012/03/03)
parrotstudio
?
Lt7 TensorFlow
Lt7 TensorFlow
GIG inc.
?
Pynqでカメラ鮫颪鬟螢▲襯織ぅfastx コ`ナ`奮
Pynqでカメラ鮫颪鬟螢▲襯織ぅfastx コ`ナ`奮
marsee101
?

Similar to Ruby でハ?ケットハ?`サを恬ろう (20)

Rust-DPDK
Rust-DPDK
Masaru Oki
?
RubyでるOpenFlowネットワ`ク - LLまつり
RubyでるOpenFlowネットワ`ク - LLまつり
Yuya Rin
?
2012 11-17.nagoyapm08
2012 11-17.nagoyapm08
IWATA Susumu
?
Lagopus performance
Lagopus performance
Masaru Oki
?
ラプラシアンフィルタを舘艶糸京看温姻糸でg廾(ソフトウェアからハ`ドウェアにオフロ`ド)
ラプラシアンフィルタを舘艶糸京看温姻糸でg廾(ソフトウェアからハ`ドウェアにオフロ`ド)
marsee101
?
Dalvik∀襯泪轡鵑離〒`キテクチャ 個井
Dalvik∀襯泪轡鵑離〒`キテクチャ 個井
Takuya Matsunaga
?
‐Zabbix2.0/snmpttによるトラップメッセ`ジのシ #Zabbix #徭姙ラック茶氏
‐Zabbix2.0/snmpttによるトラップメッセ`ジのシ #Zabbix #徭姙ラック茶氏
寔厰 湘
?
スタ`ト詰レイヤ` #0
スタ`ト詰レイヤ` #0
Kiwamu Okabe
?
及4指Linux-HA茶氏Y創 PacemakerのB初
及4指Linux-HA茶氏Y創 PacemakerのB初
ksk_ha
?
Boost.SIMD
Boost.SIMD
Akira Takahashi
?
畸 RPM v恙
畸 RPM v恙
Tetsuya Morimoto
?
2014 dart flight school in Tokyo
2014 dart flight school in Tokyo
nothingcosmos
?
閣永永並兵め
閣永永並兵め
npsg
?
TCP connectionの隠贋と痌
TCP connectionの隠贋と痌
mittyorz
?
安艶恢室宝茶膿氏23指朕
安艶恢室宝茶膿氏23指朕
匯 弥嶄
?
意姻庄沿鉛艶或の高と
意姻庄沿鉛艶或の高と
Manabu Ori
?
InfiniBand on Debian
InfiniBand on Debian
Taisuke Yamada
?
RubyでるOpenFlowネットワ`ク - LLまつり
RubyでるOpenFlowネットワ`ク - LLまつり
Yuya Rin
?
2012 11-17.nagoyapm08
2012 11-17.nagoyapm08
IWATA Susumu
?
Lagopus performance
Lagopus performance
Masaru Oki
?
ラプラシアンフィルタを舘艶糸京看温姻糸でg廾(ソフトウェアからハ`ドウェアにオフロ`ド)
ラプラシアンフィルタを舘艶糸京看温姻糸でg廾(ソフトウェアからハ`ドウェアにオフロ`ド)
marsee101
?
Dalvik∀襯泪轡鵑離〒`キテクチャ 個井
Dalvik∀襯泪轡鵑離〒`キテクチャ 個井
Takuya Matsunaga
?
‐Zabbix2.0/snmpttによるトラップメッセ`ジのシ #Zabbix #徭姙ラック茶氏
‐Zabbix2.0/snmpttによるトラップメッセ`ジのシ #Zabbix #徭姙ラック茶氏
寔厰 湘
?
スタ`ト詰レイヤ` #0
スタ`ト詰レイヤ` #0
Kiwamu Okabe
?
及4指Linux-HA茶氏Y創 PacemakerのB初
及4指Linux-HA茶氏Y創 PacemakerのB初
ksk_ha
?
2014 dart flight school in Tokyo
2014 dart flight school in Tokyo
nothingcosmos
?
閣永永並兵め
閣永永並兵め
npsg
?
TCP connectionの隠贋と痌
TCP connectionの隠贋と痌
mittyorz
?
安艶恢室宝茶膿氏23指朕
安艶恢室宝茶膿氏23指朕
匯 弥嶄
?
意姻庄沿鉛艶或の高と
意姻庄沿鉛艶或の高と
Manabu Ori
?
Ad

More from Yasuhito Takamiya (10)

アプリ塁 ネットワ`ク塁
アプリ塁 ネットワ`ク塁
Yasuhito Takamiya
?
麗尖ネットワ`ク鞭け秘れテストツ`ルNetTester あるいは暴は泌採にして伉塘するのを峭めてネットワ`ク砿尖を?曚垢?ようになったか
麗尖ネットワ`ク鞭け秘れテストツ`ルNetTester あるいは暴は泌採にして伉塘するのを峭めてネットワ`ク砿尖を?曚垢?ようになったか
Yasuhito Takamiya
?
Tremaプログラミング ウル室(テク) 寄室爽
Tremaプログラミング ウル室(テク) 寄室爽
Yasuhito Takamiya
?
ニュ`Trema 5つのポイント
ニュ`Trema 5つのポイント
Yasuhito Takamiya
?
デ`タで需る意姻艶馨温
デ`タで需る意姻艶馨温
Yasuhito Takamiya
?
OpenFlow フレ`ムワ`クのxびかた
OpenFlow フレ`ムワ`クのxびかた
Yasuhito Takamiya
?
SDNr旗の_kよもやま - OpenFlowとTrema
SDNr旗の_kよもやま - OpenFlowとTrema
Yasuhito Takamiya
?
クラウドインタ`ネットル`タ
クラウドインタ`ネットル`タ
Yasuhito Takamiya
?
Trema コミッタになるには
Trema コミッタになるには
Yasuhito Takamiya
?
Bare Metal Cloud: gマシンを戻工するクラウドサ`ビス (SWoPP 2010)
Bare Metal Cloud: gマシンを戻工するクラウドサ`ビス (SWoPP 2010)
Yasuhito Takamiya
?
アプリ塁 ネットワ`ク塁
アプリ塁 ネットワ`ク塁
Yasuhito Takamiya
?
麗尖ネットワ`ク鞭け秘れテストツ`ルNetTester あるいは暴は泌採にして伉塘するのを峭めてネットワ`ク砿尖を?曚垢?ようになったか
麗尖ネットワ`ク鞭け秘れテストツ`ルNetTester あるいは暴は泌採にして伉塘するのを峭めてネットワ`ク砿尖を?曚垢?ようになったか
Yasuhito Takamiya
?
Tremaプログラミング ウル室(テク) 寄室爽
Tremaプログラミング ウル室(テク) 寄室爽
Yasuhito Takamiya
?
ニュ`Trema 5つのポイント
ニュ`Trema 5つのポイント
Yasuhito Takamiya
?
デ`タで需る意姻艶馨温
デ`タで需る意姻艶馨温
Yasuhito Takamiya
?
OpenFlow フレ`ムワ`クのxびかた
OpenFlow フレ`ムワ`クのxびかた
Yasuhito Takamiya
?
SDNr旗の_kよもやま - OpenFlowとTrema
SDNr旗の_kよもやま - OpenFlowとTrema
Yasuhito Takamiya
?
クラウドインタ`ネットル`タ
クラウドインタ`ネットル`タ
Yasuhito Takamiya
?
Trema コミッタになるには
Trema コミッタになるには
Yasuhito Takamiya
?
Bare Metal Cloud: gマシンを戻工するクラウドサ`ビス (SWoPP 2010)
Bare Metal Cloud: gマシンを戻工するクラウドサ`ビス (SWoPP 2010)
Yasuhito Takamiya
?
Ad

Ruby でハ?ケットハ?`サを恬ろう