CategoryNetwork

DPDKでremote_core_launchした処理が例外を投げた時の挙動について

上記について実際に動かして調べました。

パターン1: remote_core_launchをtryに囲む

void func() /* user implementation */
{
throw exception;
}

int main() /* developer implementation */
{
dpdk_init();
try {
remote_core_launch(func);
} catch (e) {
printf(e.what());
}
}

これでは例外をキャッチできないが、一応普段どおりに terminate called after throwing an instance of ‘hogehoge’ してくれるので壊れたり(余談参照)しなかった。

余談: DPDK使ってるときに極まれにDPDKの秘孔をついてNICが使えなくなることが セキュリティキャンプであったので。(本当にDPDKの秘孔が原因か解らないけど。。)

パターン2: すべての処理の一番上からtryで囲む

void func() /* user implementation */
{
throw exception;
}

int main() /* developer implementation */
{
try {
dpdk_init();
remote_core_launch(func);
} catch (e) {
printf(e.what());
}
}

これでも例外はキャッチできない。 なおterminate called after throwing an instance of ‘hogehoge’はしてくれる

パターン3: remote_core_launchする関数をラップする

void func() /* user implementation */
{
throw exception;
}

void wrap_func() /* developer implementation */
{
try {
func();
} catch (e) {
printf(e.what());
}
}

int main() /* developer implementation */
{
dpdk_init();
remote_core_launch(wrap_func);
}

これで例外をしっかりキャッチできる

まとめ

STCPではパターン3を採用して実装する。 これが一番ベターな感じがするなあ。

OSC 2016 do に参加してきました

前回のオープンソースカンファレンス2016東京に続き、先日北海道で行われたオープンソース カンファレンス2016北海道にも参加させていただきました。 いつも通り「国立セキュリティ・キャンプ同窓会」というコミュニティで参加をさせていただき、 セキュリティキャンプ修了生の成果報告という形で展示とセミナーをさせていただきました。 前回はるくすさん(@rkx1209)に協力を仰ぎ、手伝っていただいたのですが、今回のセミナーは 私単身で心細いながらもパケット解析手法についてのお話をさせていただきました。 後述いたしますが、展示も前回と同じようにcpawctfの宣伝をさせていただいています。 今回は開発中の新フロントエンドの試作を展示させていただきました!

Continue reading

OSC2016 北海道 特設ページ

このページはOSC2016doでのセミナーのサポートページです。

今回のセミナーでは以下のようなことを行います。

  1. パケット解析ライブラリLibPGENの紹介
  2. LibPGENを使用した新たなプロトコルを解析するデモ

1. パケット解析ライブラリLibPGENの紹介

プログラミング言語から簡単でがっつりパケット解析をおこなうことができるLibPGENという パケット解析のライブラリを紹介します。

2. LibPGENを使用した新たなプロトコルを解析するデモ

既存環境が解析に対応していないプロトコルの通信を解析するデモンストレーションを行います。 LibPGENは新たなプロトコルのパケットを解析するときの拡張が簡単に行えるように設計してあり、 今回LibPGENを拡張して新たなプロトコルの通信解析を行います。 TMP(TestMessageProtocol)というデモ専用なんちゃってプロトコルを定義して、その通信をする アプリケーションを用意しました。今回はそのアプリケーションの通信をあらかじめキャプチャした ファイルを用意したので、その通信内容を解析するスクリプトを簡単に実装します。

セミナーで使用するプログラムのソース群や参考情報

DPDKとLinuxカーネルでパケット処理のレイテンシ比較

DPDKを使って開発をするのですが、どれだけ早いのか一応自分で測ってまとめてみました。 今回はrdtscを使ってレイテンシ計測を行います。ただ、DPDKの通信速度を計るだけでなく、 Linuxカーネルで同様の通信をした時の速度と比較をします。

Continue reading

Intel DPDK の環境構築 [実機編]

ちょっとした開発でDPDKを使うことになり、 結構導入が辛かったので備忘録のようにかんたんにまとめました。 まだ全てわかっているわけではないので、 今後も勉強しながら更新していこうと思います。もしご指摘などがあれば、コメントをしていただけると、助かります。DPDK関連の日本語の情報が少ないので、他の人のお役に立てれば幸いです。 環境構築は普通のx86_64マシン上(Thinkpad X250 に ArchLinux) でやりました。 公式ドキュメントを参考にしながら行ったため、章分けなどは公式ドキュメントと合わせてあります。 わからなかった時に公式ドキュメント(英語)を参照する時にご活用ください。今回は1のIntroductionから4のCompiling and Running Sample Applicationsまでをやります。具体的にはDPDKの導入を行ってサンプルアプリケーションの実行までです。

Continue reading

BPFとLinuxでのL2IFを扱うネットワークプログラミングでの違いについて

この記事を書こうと思ったきっかけ

OSX上でc言語で書いたパケットキャプチャでパケットをキャプチャしていた時に並行してwiresharkと見比べていたのですが、なんだかwiresharkと比べてパケットを幾つかドロップしていたため、少し調べた(他人に頼った)ところ、BPFでの確保したディスクリプタはLinuxのそれと幾つか動作の違いがあるとのことなので、簡単にまとめることにしました。 今回この記事を書く上で情報を提供してくれた方々にはとても感謝です。

Continue reading

[3分でわかる] LibPGENを使ったパケット操作とWiresharkはすごいってのを理解する講座 初段 in OSC2016TokyoSpring

この記事は僕の趣味である「パケット遊び」をたくさんの人に知ってもらい、ぜひパケット仲間を増やそう!といった内容の記事です。

Continue reading

Docker使ってVPS構築し直した

新年明けましてオメデトウございます。

年末だし、VPSのバックアップとか、いろいろやって綺麗に作り直そう!と考えていたら年が明けて、一週間がたちました。(やっと終わった。)

いままで自分はslankdev.netとlibpgen.orgの2つをwordpressのマルチサイト機能で管理していたんですが、つい先日どこかのプロが不手際でmariadbのコンテナを壊して泣いているとTwitterで見たのをきっかけでコンテナに興味を持ち始めました。

ということで、僕もDockerで構築し直そう!ってなったわけです。ついでにConohaの新しいVPSにお引越しもしました!SSDやったぜ。

どんな記事でどんな目的?

どんな記事か

Dockerを使用して一つのサーバーで複数のWebサイトを保守管理する環境を構築する記事です。Docker-Composeを使用しています。

どんな目的か

  • Dockerを利用して複数のサイトをお互いに依存なく管理する。
  • 初期構築後でもサイトを増やしたり、減らしたりを安全で簡単にできるようにする。
  • 今後、メールサーバとか別のサーバーも安全に追加消去できるようにしたい。

Continue reading

PcapNg 解析入門

普段開発しているlibpgenにPcapNgファイルの読み書きの機能追加をした時にPcapNgの入門をしたのでまとめてみました。

PcapNgとは

PcapNg(以下めんどくさいのでpcapng)とはwiresharkで開くことのできる パケットのファイルフォーマットの一つです。 従来までのpcapファイルに加え様々な機能が追加されています。現在wiresharkではデフォルトのファイルフォーマットとしてサポートされていますが、他の解析ツールなどとの互換性が低いことからたくさんの人から避けられて(嫌われて)います。 ググってもpcapngを従来のPcapファイルに変換する方法などが先に出てくる現状です。。

Continue reading

OSXでBSD Socketを使ってプログラミングする時

最終更新: 2015/09/16

こんにちは。

libpgenをVM上だったり、実機だったり動かしてる時にやっぱりお気に入りのMBPでも動かしたくなったので、BSD向けのコードを追加していこうと思います。BSDで低レイヤネットワークプログラミングをし始める人の参考になるように書いていくつもりです。

この記事は筆者が勉強しながら書いているので、随時新たなことがわかり次第更新します。

Continue reading

© 2017 Slank Blog

Theme by Anders NorenUp ↑