naoki86star

インターネットの片隅でなにかしら書いてみる

sflowのパケットを観察するツールのこと

 フロー解析のプロトコルといえば、NetFlowかSflowか、というステレオタイプの下で、自分の場合はsflowのほうを扱う機会がほとんどであり、全面的にsflowtoolというCLIのお世話になってます。最近githubの最新版で-Lオプションってのが追加されていて、フローを行志向で出力する際に、コマンドラインで指定した任意の項目を指定できるというようになってます。
 前は-lオプションという固定項目の出力を利用して、もしそれに含まれない項目を参照したい場合は、その場で見たい項目が出力されるようにedit/buildしていたのが、項目名を覚えてしまえばこっちのほうが便利なのでよく使い始めています。

これの説明でだいたい足りるのですがどうも1文字レベル間違えたり他と混合して思い出せなかったりとするのでヘッダレベルとIPレベルの項目だけ備忘の表として書いておきます。

コマンドは、

sflowtool -L localtime,agent,inputPort,srcIP,srcIP6

みたいに使えます。
 項目名が仕様と合致しないときもサイレントです。*1
 

  • Lオプションの設計思想として、L3L4のプロトコル別できっちり分けたと見受け、一律集約した列でだすようなことはできないです。(つまり例えばsrc-ip列としてIPv4/IPv6を混在することができない)
(packet/sample-header)
項目名 説明
datagramSourceIP -
localtime サンプルレコードを受信した時点のローカル時刻(サンプルの発生時刻であることを期待)
pcapTimestamp pcapファイルから読み込んだ場合のpcapが示すそのレコード時刻
agent exporterのid
packetSequenceNo -
sysUpTime -
samplesInPacket -
sampleSequenceNo -
meanSkipCount sampling-rateのこと
samplePool -
dropEvents -
inputPort IN側のifindex
outputPort OUT側のifindex
IPv4/IPv6(L3/L4)
項目名 説明
sampledPacketSize -
IPSize -
srcIP IPv4の場合
dstIP IPv4の場合
srcIP6 IPv6の場合
dstIP6 IPv6の場合
IPProtocol -
IPTOS IPv4の場合
priority IPv6の場合
ICMPType IPProtocol=1の場合
ICMPCode IPProtocol=1の場合
TCPSrcPort IPProtocol=6の場合
TCPDstPort IPProtocol=6の場合
TCPFlags IPProtocol=6の場合
UDPSrcPort IPProtocol=17の場合
UDPDstPort IPProtocol=17の場合
UDPbytes*2 IPProtocol=17の場合

 
この他、sflowtool.cから拾っていけば興味深い項目も出力できそうなのですが、対応できてる環境はレアな感じに思います。VLANとかに着目したい環境はすこしあるのかもですね。*3

*1:同じ項目を二回列挙すると後ろ側が空欄になる仕様みたいです

*2:TCPBytesってのはオリジナルにない

*3:Ethernet/ExtendedSwitch/ExtendedGateway_v2/ExtendedGateway/ExtendedUser