OSPN Press 第65号 (2016/02/17発行)

No Comments
このエントリーをはてなブックマークに追加

■次回のOSCは・・「東京(2/26-27)です!」
■[開催報告]OSC浜名湖、OSCエンタープライズ大阪、無事に終了
■ITニュース・総合
■ITニュース・オープンソースリリース情報
■オープンソースカンファレンス開催レポート
-OSC2016 Hamanako
-OSC2016 .Enterprise@Osaka
■オープンソースコミュニティ紹介 〜from OSS コミュニティ辞典〜
-ためまっぷプロジェクト
-東京エリアDebian勉強会
-仮想化友の会
■「オープンソース」を使ってみよう!
第39回:LibPGEN

More

大阪では2回目の開催!
OSC2016 .Enterprise@Osaka!!

No Comments
このエントリーをはてなブックマークに追加

1月29日(金)にOSC2016 .Enterprise@Osakaを開催しました。
大阪での開催は今回が2回目です(前回2014年のレポート)。
会場は前回と同じ、JR大阪駅から直結のグランフロント大阪に入っている
ナレッジキャピタル カンファレンスルームで行いました。

当日は1日中、あいにくの雨でしたが、
朝から沢山の来場者の方にお越しいただきました。

今回はOSC事務局がフォトレポートで当日の様子をお伝えします。

開催日 :2016年1月29日(金)
会場  :ナレッジキャピタル カンファレンスルームタワーB
    (グランフロント大阪 北館)
展示  :22ブース(展示一覧
セミナー:23セッション(セミナー一覧公開資料
来場者数:約200名
Twitter :#osc16ep(Twitterで資料公開しているセミナーもあります)

「OSC .Enterprise」は、東京で3回、大阪で今回含め2回、
「企業システム全体でのOSS活用」をテーマにして開催してきました。
平日開催、アクセスの良い場所という企業所属の方にも参加いただきやすい、
日程や会場を考えて開催しています。
※もちろん、興味のある方ならどなたでも、ご参加いただけます!

▼OSC受付でプログラム配布!
受付でプログラム配布!

=展示=

22ブースが並んだ展示会場!
それぞれが個性溢れるブースを展開し、ブースでは熱心に質問したり
名刺交換していたりと様々な光景が繰り広げられていました。
展示一覧

▼展示会場の様子
展示会場の様子 展示会場の様子
展示会場の様子 展示会場の様子
展示会場の様子

=セミナー=

4トラック23セッション行われたセミナー。
10時からの朝一セッションから多くの方にご参加いただきました。
セミナープログラム
セミナー資料(一部公開)

▼セミナーの様子
Elasticのセミナーの様子
Elasticsearch、Kibana、Logstashではじめるログ解析入門
 担当:Elastic

NECさんのセミナーの様子
OSSライセンスと著作権法の概要
 担当:NEC

アシストさんのセミナーの様子
PostgreSQLトラブルシュート
 担当:株式会社アシスト

日本仮想化技術さんのセミナーの様子
今さら聞けない人のためのDocker超入門
 担当:日本仮想化技術株式会社

セミナーとセミナーの間の休憩時間には・・・

▼展示会場の気になるブースに立ち寄ったり
興味のあるブースをチェック!

▼次のセミナーをチェックしたり
次のセミナーをチェック!

▼アンケートを記入したり
アンケート記入中

▼協賛各社のパンフレットを収集したり
資料収集中!

と、皆さま思い思いに過ごしていました!

=最後に・・・=

足下の悪い中、お越しいただいた来場者の皆さま、
会場を盛り上げていただいた出展者の皆さま、ありがとうございました。
また大阪でお会いしましょう!!

======
OSC事務局
======

▼出展ブース一覧!!
NTTデータ アトミテック
GMOインターネット NEC
SRA OSS, Inc. 日本支社 データダイレクト・ネットワークス・ジャパン
日本アイ・ビー・エム 日本仮想化技術
ニュータニックス・ジャパン Elastic
EMC Oracle Corporation (MySQL Community Team)
カゴヤ・ジャパン OSS Plaza.com
富士通ソーシアルサイエンスラボラトリ エルピーアイジャパン
オープンソースビジネス推進協議会(OBCI) OSSコンソーシアム
コモンズネット deraemons
html5jエンタープライズ部 LibreOffice日本語チーム

「オープンソース」を使ってみよう
(第39回 LibPGEN)

No Comments
このエントリーをはてなブックマークに追加

目次

はじめに、パケット遊びについて

現在パケットを解析といえばWiresharkを使った解析が大本命。
ほぼ全ての作業をこれ一つでできてしまうとてもクールなツールで、
私も大好きです。ですが、パケットを見るだけではパケットの全てを
理解したとは言えないと私は考えます。
自分でパケットを作って、いじって、送って、受け取って、いろいろな
面からパケットで遊ぶことで楽しみながらネットワークの勉強につながる
ことができると考えます。
私はこれを「パケット遊び」と勝手に名付けて親しんでいます。

pcapファイルなどから新たにパケットを送信したり、パケットを改変したりする
ツールは幾つかありますが、プログラミング言語からパケットを操るツールは
そこまで多くはありません。ここでは私の開発している統合パケット解析を助ける
C++のライブラリ「LibPGEN」のご紹介をさせていただきます。

LibPGENを使った簡単なサンプルプログラムを紹介します。
プログラムの詳細な解説やLibPGENについての詳しい情報は公式サイトの
リンクを貼っておくのでそちらを参照してください。

LibPGENとは

LibPGENとは私が開発しているC++でのパケット解析を助けるライブラリです。
もともとLibrary Packer GENeratorとしてパケットを生成するライブラリだった
のですが、いろいろ機能を追加した結果、統合パケット解析ライブラリとなりました。
2016年2月1日現在、Version1.0が最新安定版です。

公式ドキュメント

公式サイト
http://libpgen.org

開発者ブログ
http://blog.slankdev.net

どのような方が対象のソフトウェアか

ネットワークやパケットの勉強を考えている方や、パケットを愛する全ての皆様。
C言語の基本文法とTCP/IPの基本的な知識がある方を対象にしています。

実行可能環境

言語: C++
OS : Linux, BSDで動作します。
BSDに関してはOSXでしか動作確認を行っていないので、今後確認をしていきます。

紹介内容

今回紹介する内容はこちらです。

  • LibPGENのインストール方法
  • パケットキャプチャ
  • ARPパケットを送信してIPアドレスからMACアドレスを調べるプログラム

また、今回紹介する内容は私のブログでも一部詳細に紹介しているので
もしよければそちらも参照してください。

LibPGENでパケット遊び

インストール

ここではLibPGENのインストール方法を紹介します。簡単で数分で終わります。

実行可能環境

version1.0ではLinux、BSDをサポートしています。とても古くない限り動くはずです。

必要なパッケージ

コンパイルでは以下のパッケージを使用します。

  • make
  • clang (なければg++)
  • ar
  • git

インストール方法

GitHubでソースコードを公開しているので、最新版をpullしてインストールします。

$ git clone https://github.com/slankdev/libpgen.git
$ cd libpgen 
$ make 
$ sudo make install 

これでインストールが完了です。
あとはC++のプログラムを作ってpgen.hをインクルードして、
コンパイル時はlibpgenをリンクしてください。
それだけでLibPGENの全ての機能を使うことができます。

パケットを観る

今回はLibPGENを使用して簡単なパケットキャプチャを作って、
パケットを見て行こうと思います。

ソースコード

パケットをネットワークインターフェースから受信して
それを簡易表示するプログラムを示します。
今回はICMPパケットのみをキャプチャしてみることにしましょう。


#include <pgen.h>


int main(int argc, char** argv){
	if(argc < 2){
		printf("usage: %s interface \n", argv[0]);
		return -1;
	}

	pgen_t* handle = pgen_open(argv[1], NULL);
	if(handle == NULL){
		pgen_perror("pgen_open");
		return -1;
	}

	u_char buf[10000];
	int buflen;
	while(1) {
		buflen = pgen_recv(handle, buf, sizeof(buf));
		pgen_unknown packet(buf, buflen);
		if(packet.isICMP()){ 
			packet.summary();
			packet.hex();
		}
	}

	pgen_close(handle);
	return 0;
}

実行

早速プログラムを実行してパケットを見てみましょう。
libpgenを使ってコンパイルするためオプションで -lpgen を指定します。
LibPGENはRaw SocketやBPFを使用しているため実行はRoot権限で行ってください。
今回はOSX10.10.5で実行しました。

実行すると以下のようにICMPパケットをキャプチャすることができます。


[slank@localhost]$ g++ capture.cc -lpgen
[slank@localhost]$ sudo ./a.out en0
hexdump len: 98
0000:    80 e6 50 17 18 46 a2 12  42 17 d8 8f 08 00 45 00   ..P..F..  B.....E.
0010:    00 54 f5 72 00 00 31 01  f4 34 ad c2 7e 91 c0 a8   .T.r..1.  .4..~...
0020:    b3 05 00 00 3f 7c 88 df  00 01 56 a9 bd 84 00 0c   ....?|..  ..V.....
0030:    38 66 08 09 0a 0b 0c 0d  0e 0f 10 11 12 13 14 15   8f......  ........
0040:    16 17 18 19 1a 1b 1c 1d  1e 1f 20 21 22 23 24 25   ........  .. !"#$%
0050:    26 27 28 29 2a 2b 2c 2d  2e 2f 30 31 32 33 34 35   &'()*+,-  ./012345
0060:    36 37                                              67
unknown(packet=[ICMP|IP|ETH]  192.168.179.5 > 173.194.126.145  len=98
hexdump len: 98
0000:    a2 12 42 17 d8 8f 80 e6  50 17 18 46 08 00 45 00   ..B.....  P..F..E.
0010:    00 54 ba 55 00 00 40 01  20 52 c0 a8 b3 05 ad c2   .T.U..@.   R......
0020:    7e 91 08 00 2f a0 88 df  00 02 56 a9 bd 85 00 0c   ~.../...  ..V.....
0030:    40 40 08 09 0a 0b 0c 0d  0e 0f 10 11 12 13 14 15   @@......  ........
0040:    16 17 18 19 1a 1b 1c 1d  1e 1f 20 21 22 23 24 25   ........  .. !"#$%
0050:    26 27 28 29 2a 2b 2c 2d  2e 2f 30 31 32 33 34 35   &'()*+,-  ./012345
0060:    36 37                                              67
unknown(packet=[ICMP|IP|ETH]  173.194.126.145 > 192.168.179.5  len=98
hexdump len: 98
0000:    80 e6 50 17 18 46 a2 12  42 17 d8 8f 08 00 45 00   ..P..F..  B.....E.
0010:    00 54 f8 05 00 00 31 01  f1 a1 ad c2 7e 91 c0 a8   .T....1.  ....~...
0020:    b3 05 00 00 37 a0 88 df  00 02 56 a9 bd 85 00 0c   ....7...  ..V.....
0030:    40 40 08 09 0a 0b 0c 0d  0e 0f 10 11 12 13 14 15   @@......  ........
0040:    16 17 18 19 1a 1b 1c 1d  1e 1f 20 21 22 23 24 25   ........  .. !"#$%
0050:    26 27 28 29 2a 2b 2c 2d  2e 2f 30 31 32 33 34 35   &'()*+,-  ./012345
0060:    36 37                                              67

とても簡単なプログラムでパケットキャプチャが作成できます。

パケットを造る

パケットを見ることができたので、次はパケットを自分で作って送ってみましょう。
Ethernetネットワークで重要な役割をしているARPのパケットを送信するプログラムを
示します。192.168.0.1のMACアドレスを調べるプログラムを示します。

ソースコード


#include >pgen.h<

int main(int argc, char** argv){
	if(argc < 3){
		printf"usage: %s interface targetIP \n" argv[0]);
		return -1;
	}

	pgen_t* handle = pgen_open(argv[1], NULL);
	if(handle == NULL){
		pgen_perror"pgen_open"
		return -1;
	}

	pgen_arp packet;
	packet.ETH.src.setmacbydev(argv[1]);
	packet.ETH.dst = "ff:ff:ff:ff:ff:ff"
	packet.ETH.type = 0x0806;
	packet.ARP.operation = 1;
	packet.ARP.hwsrc = packet.ETH.src;
	packet.ARP.psrc.setipbydev(argv[1]);
	packet.ARP.hwdst = packet.ETH.dst;
	packet.ARP.pdst = argv[2];
	packet.send(handle);

	while(1){
		u_char buffer[10000];
		int buflen = pgen_recv(handle, buffer, sizeof(buffer));
		pgen_unknown buf(buffer, buflen);
		if(buf.isARP()){
			packet.cast(buffer, buflen);
			if(packet.ARP.operation == 2){ 
				packet.summary();
				break;
			}
		}
	}

	pgen_close(handle);
	return 0;
}

実行

では実行してIPアドレスからMACアドレスを調べてみましょう。


$ g++ arp.cc -lpgen
$ sudo ./a.out eth0 192.168.0.1
ARP { 192.168.179.1 is at a2:12:42:**:**:** }

無事MACアドレスを調べることができました。

まとめ

このようにLibPGENではパケットを簡単に作成、解析、送受信をすることができます。
今回紹介した機能だけでなく他にも様々機能を持ち、今後も追加予定です。

今回紹介はできませんでしたが、Pcapファイルの読み書きやPcapNgファイルの
読み書きもサポートしています。キャプチャしたパケットを保存することなども
簡単に行えます。PcapNgファイルはWiresharkのデフォルトのキャプチャ形式で
ありながら、様々なツールに対応していないので、PcapNgファイルの読み書き
対応はLibPGENの売りの一つでもあります。

公式サイトではこれだけでなく様々なドキュメントも公開しています。
使用するときはぜひ見てください。

参考情報

大寒波の来る中開催されたOSC2016 Hamanakoは、寒さに負けず大盛り上がり!!

No Comments
このエントリーをはてなブックマークに追加

大寒波がやってきた1月23日(土)にOSC2016 Hamanako
浜松市市民協働センターで開催されました。今年で4回目の開催になります。
寒い中ですが、多くの方にご来場いただきました!

開催日 :1月23日(土)
会場  :浜松市市民協働センター
来場者 :約130名
セミナー:17コマ
展示  :25ブース
ハッシュタグ:#osc16hm
展示ブース一覧
セミナータイムテーブル

=展示ブース=

例年同様会場にはセミナースペースと展示ブースに簡易的な仕切りをした、
オープンな空間で行われています。

OSC浜名湖は、地元コミュニティの出展数が多いのが特徴です。
来場者だけでなく、ブース出展者も気軽に他のブースを回って話を聞く
ことができます。

展示ブースの様子 展示ブースの様子
展示ブースの様子 展示ブースの様子

今年は、ゆるキャラグランプリ優勝の出世大名家康くんやOSC浜名湖スポンサー
「猫ブース鬼パーセント芋!」から来ていただいた声優さんがブースインタビュー
をしたりと、出展者の皆様も楽しんでいただけたことでしょう。
オープンソースチャンネル
(ブースインタビューの動画公開予定)

▼展示ブースを回る、出世大名家康くん!
出世大名家康くん!

▼声優さんが、ブースインタビュー!
ブースインタビュー!

=セミナー=

会場の中心で行われるセミナーは15分単位で、
すべてのセミナーを聞くことができます。

▼1トラック17コマ行われた、セミナー
セミナーの様子

聞きたいセミナーが重なって聞けない!
なんてことにならないのがこのスタイルのいいところですね!
事前の登録者が少なく実行委員スタッフも不安視しておりましたが、
セミナースペースも満席なほどの集客でした!

▼椅子に座ってセミナー聴講中!
出世大名家康くん!

=ライトニングトーク=

声優の小見川さん、荒浪さんによる司会とドラ娘という嬉しい
シチュエーションでのライトニングトークです。
いつも以上に盛り上がっていましたね!

▼ライトニングトークの様子
ライトニングトークの様子

▼盛り上げてくれた、声優の小見川さん、荒浪さん!!
声優の小見川さん、荒浪さん

=懇親会=

38名が参加した懇親会。
今回は、ほろ酔い村 映里砂(えりさ)さんでの開催です。
事前登録よりも人数が増えたため、窮屈な状態での開催でしたが、
その分近くて会話も弾んだのではないでしょうか。
日本酒の種類も多く、飲み比べをしたりと皆さん楽しんでいました!

▼みんなでかんぱ〜い!
懇親会の様子

=前夜祭=

今年もひっそりと前夜祭を開催しました。
OSC浜名湖といえば美味しいビールのお店、マインシュロス!
昨年の懇親会会場で、今年もここで懇親会!と思っていたのですが、
OSC当日は貸し切りのため使えなかったので前夜祭での利用です。
前日入りしてでも前夜祭へ!というコアなメンツ9名で大いに盛り上がりました!

前夜祭のお店 前夜祭メンバー

=最後に=

ご来場いただいた皆さま、ご出展者の皆さま、ご協力いただいた皆様、
そしてOSC事務局の皆さま、いろいろな方に支えられてOSC2016 Hamanakoが
開催できました。来年も同時期あたりに開催予定です。
来年もよろしくお願いします!

===================
OSC2016 Hamanako実行委員会スタッフ
===================