読者です 読者をやめる 読者になる 読者になる

//あとで書く

です・ます調が記事によって違ったりするブログ

netmapを触ってみる(導入編)

先日の「第35回ネットワークパケットを読む会」にてnetmapについての話があり,面白そうだったので導入してみました.今回は導入編(というか設定しただけ)です.次回以降にnetmapを用いたソケットプログラミングについて記事を書いていきたいと思います.

はじめに
netmapについて知見を得るためにこの記事を開いた方には申し訳ありません.残念ながら当記事から得られるものは何もないので,以下のような素晴らしいスライド・記事を参照していただいた方が良いかと思います.

パケットジェネレータipgenから見るnetmap
超高速なパケットI/Oフレームワーク netmap について - ゆううきブログ


netmapについて
高速パケットIOフレームワークと呼ばれています.従来のソケットの送受信を高速化することができるそうです(ユーザプロセスとNIC間で様々な効率化がはかられている).netmapはユーザランドドライバです.また,現段階ではIntel製以外のNICには対応していません.

NICの種類を確認する方法としては,$dmesg | grep インタフェース名 等があります(適当)

環境
仮想マシン上で作業を行いました.

VirtualBox 5.0.12
FreeBSD 10.3(x86_64)

カーネル再構築
導入といっても,netmapは既に機能としてFreeBSDに取り込まれています.しかし,GENERICカーネル(FreeBSDをインストールした時点で動いているカーネル)には取り込まれていないのでカーネルを再構築します.カーネル再構築の一連の流れについて,次の記事に詳しく記載されているのでそちらを参照下さい.iij/ipgenを試してみる - Qiita

GENERICファイル(コンフィグレーションファイル)を適当に開き,最終行に一行追記した後にコンパイルします.以下の例では,GENERICファイルをコピーしてから追記しています.

$curl -O http://ftp.jaist.ac.jp/pub/FreeBSD/releases/amd64/10.3-RELEASE/src.txz
$tar Jxvf src.txz
$cd ./usr/src/sys/amd64/conf
$cp -p GENERIC hoge
$vim hoge

#最終行に追加
device         netmap

$config hoge
$cd ../compile/hoge
$make cleandepend
$make depend
$make
$sudo make install 


おわりに(次回以降の記事について)
最初にも触れましたが,次回以降は実際に既存のソケット通信との速度比較等を行いたいと思っています.(次回があるかはわかりませんが><)

第5回ICTSCに参加してきた

先に言わせていただきますが,問題の解説ではなく,ただの大会全体の感想です.
(解説はもっと文章力も技術力も高い方が書いてくれるはず・・・)

大会と参加経緯
 2月27日から28日にシスコ合同本社にて開催された,第5回ICTトラブルシューティングコンテストに参加してきました. 以前からLinux上のサーバ構築や,OpenFlowを用いた自作コントローラの制作等,ネットワークインフラの技術に興味がありました.ですので,これらの問題解決を競技形式で行うこのコンテストは非常に多くの経験や知見が得られると思い,エントリーをしました.

チームについて
 私は「mi_chan」という名前のチームに所属していました.(年齢的にリーダーをやらせていただきました) コンテストは学校対抗で3人以上5人以下で編成されたチームで競技を行うとの事で、自分達のチームは3人でした.

競技結果
 競技の結果は残念ながら悲惨なものでした.原因が大体把握できていた問題もありましたが,上手な文章の組み立てや具体例/対策等の記述に苦労し,私自身はチケットを一度も送信できませんでした.リーダーでありながら,チーム内で最も人権がありませんでした. ですが,競技終了後のLT大会や他チームの方との話を通じて,得られた知見があったことや,解けそうだった問題について理解することができました.

問題に関するメモ・感想

  • iptables設定が関わる問題が多く出題されたが,普段からRHEL関連のOSしか触っていなかったため,UbuntuやvyOSのiptables設定がわからず苦労した.

  • SYN Floodを用いて帯域幅を狭めていた手法がとても面白かった.

  • DNSのTXTレコードを用いたマルウェアの話がやはり出てきて,興味深かった.

  • 「10.100+X.3.Y/24」が実際には「10.100+X.5.Y/24」だった.(ルータのconfigを見ればすぐにわかるものだが,これに数時間溶かしてしまった)

  • Cisco機器の設定自体の問題は1問だけだった(非対照通信)ので,ルーティングやネットワーク周りより,もう少しサーバ周りに事前勉強時間を割り当てればよかった.

  • GitLab,nginx,BINDについては完全に知識足らずだった.

  • サーバの再起動問題については,/var/log/以下の各ログファイルの役割について今一度把握しておく必要がある.

最後に
 このような素晴らしい大会を企画して下さった企業の方々や運営の方々に本当に感謝しています,ありがとうございました.mi_chan各位お疲れでした.来年は賞金狙っていきましょう.サバ缶ごちそうさまです(笑)

wxPython&Mecab

wxPythonMecabを使って文章の形態素解析(今回は名詞分け)を行うプログラムを作ってみました。とってもお粗末です。f:id:epcnt19:20141204173820p:plain

#coding:utf-8
import wx
import MeCab
def click(self):
    output_text.Clear()
    node = mecab.parseToNode(str(input_text.GetValue()))

    while node.next:
        if node.feature.split(",")[0] == ("名詞"):
            output_text.AppendText(node.surface)
            output_text.AppendText(",")

        node = node.next

if __name__ =='__main__':
    mecab = MeCab.Tagger('-Ochasen')
    app = wx.App()
    frame = wx.Frame(None,wx.ID_ANY,"形態素解析テスト",size=(600,260))

    panel = wx.Panel(frame,wx.ID_ANY)
    input_text = wx.TextCtrl(panel,wx.ID_ANY,style=wx.TE_MULTILINE,size=(100,100))
    input_text.SetLabel("文章入力")
    button_1 = wx.Button(panel,wx.ID_ANY,"形態素解析開始")
    button_1.Bind(wx.EVT_BUTTON,click)

    output_text = wx.TextCtrl(panel,wx.ID_ANY,"結果",style=wx.TE_MULTILINE,size=(100,100))

    layout = wx.BoxSizer(wx.VERTICAL)
    layout.Add(input_text,flag=wx.GROW)
    layout.Add(button_1,flag=wx.GROW)
    layout.Add(output_text,flag=wx.GROW)
    panel.SetSizer(layout)

    frame.Show()
    app.MainLoop()

Mecab

形態素解析についてメモしておきます。
形態素解析とは自然言語処理の技術のひとつで、文章や言葉を、辞書や文法上の情報を頼りに品詞分けすることです(多分
最近話題の「東ロボプロジェクト」でもこの形態素解析は使われています。

その中でも自分はMacab(めかぶ)という日本語形態素解析エンジンを使ってPythonと連携して色々遊んだりしてます。

ネットワーク系やらLinuxシステムコールプログラミングやら自然言語処理やら色々かじっていますが、どれも今ひとつの知識しかありません...的を絞りたい....

daytimeクライアント

今日はxinetdでdaytimeサーバを立てて、そこへアクセスするクライアントを作りましたー

サーバサイドはLAN内のCentOSでクライアントサイドはCygwinです。

CentOS6.5(i386)にはinetd・xinetdが入っていなかったのでyumで追加しました。

/etc/xinetd.d/daytime-streamの設定を弄りました。

daytime-dgramってのもあったけど、これはUDPの接続用なのだろうか・・・

ソケットはjavaではよく使うのですが、Cでやると中々難しい・・・

まだまだ完全な理解はしていませんが、UNIXのソケットの機構は色々面白いので、もう少し頑張りたいです。最終的な目標はhttp鯖。そしてNAT越えのプログラムを作ることです。

ではでは

 

Cygwin導入

今更ですが、Cygwinを導入しましたー

windows環境でlinuxが触れるのは嬉しいですね!(今まではラズパイをsshしてました)

とりあえず、gccを使ってhttp鯖の制作をしたいです。

UDPの方は全く進んでおらず・・・暗号化(hash)の方にも興味がでできてしまいまして(笑)

LMhashの解析プログラムをpythonで作りたいのですが、とりあえずは的を一つに絞ってやっていきますかね・・・

 

Nat traversal

最近Nat traversalに興味を持っているので、色々メモしておきます。

Nat traversalはNAT越えともよばれ、普通は各種ルータの設定でポートを開けなければなりませんが、NAT越えはこれをせずにNATの向こう(WAN側)の端末と接続できるというものです。(合ってるかな・・・)

NAT越えの技術はUPnPぐらいしか知りませんでしたが、他にも色々あるらしく・・・

特にUDPホールパンチングは面白そうだったので、今度JavaPython辺りを使って再現してみたいと思います。