CategoryLinux

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

Docker使ってVPS構築し直した

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

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

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

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

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

どんな記事か

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

どんな目的か

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

Continue reading

私立プログラミングキャンプに参加しました

シプキャン(私立プログラミングキャンプ)に参加してきました。

今回は徹夜のハッカソンで、僕はlibpgenの機能追加をしました。

Continue reading

libpgen で ARP Spoofing 中間者攻撃 をすべて担う

今まではlibpgenで中間者攻撃を行うときに、linuxのip_forwardを使ってパケットを中継していました。 それでも、中間者攻撃はできますが、まあ他のものに頼っている感じがあったので、すべてlibpgenで担えるようにしました。 ブリッジングもすべて自分で実装したので、今後パケット改竄機能などを追加しやすくなりました。

ソースコード

ソースコードはこんな感じになります。いつもどうり

libpgenを使用して書いています。 Continue reading

libpgen で AR Drone を操作

セキュリティ・キャンプ全国大会の審査に合格することができ、これから忙しくなれそうなので、今のうちに趣味を進めていくことにしました。

先日紹介したMITM攻撃のプログラムでAR Droneを乗っ取るプログラムを書いている最中で、AR Droneの通信を調べて、AR Droneを操作するパケットをlibpgenで送信できるようにしました。超基本的な飛行制御についても調べたので、まとめておきます。

今回使用するAR Droneは大学の研究室のAR Droneをお借りして使わせていただいています。この場を借りてお礼を言わせてもらいます。ありがとうございます。

Continue reading

© 2017 Slank Blog

Theme by Anders NorenUp ↑