Hatena::ブログ(Diary)

TECHNERD::INIT このページをアンテナに追加

2009-03-03

Windows XPでIPv6

IPv6スタックインストール

Windows XPIPv6スタックを搭載しているが、初期状態では無効となっておりIPv6を使用することはできない。

IPv6スタックを有効にするためには、次のコマンドをコマンドプロンプトから実行する。

ipv6 install

最後にシステムの再起動を行う。

IPv6インタフェース情報の取得

IPv6インタフェースごとの詳細な情報は、次のコマンドをコマンドプロンプトから実行することで得られる。

ipv6 if

IPv6経路などの設定時に必要なインタフェースインデックス(番号)は、このコマンドから知ることができる。

ipv6 adu インタフェース番号/アドレス lifetime 有効生存時間

有効生存時間は秒で指定し、infiniteと記述することで無制限時間で追加することができる。また、アドレスを削除する場合には、有効生存時間を"0"と指定する。

IPv6アドレス管理

IPv6アドレスの追加・削除はnetshを使用すると便利。

Windows XPでは、MACアドレスから自動生成されるEUI-64形式のIPv6アドレスに加え、デフォルトIPv6: Privacy Extentions (RFC 3041)に対応しており、匿名のアドレスを自動的に追加する。そこで、匿名アドレスを生成しないように設定するには、以下のコマンドを使用する。

netsh interface ipv6 set privacy state=disabled
  • IPv6アドレス手動構成

IPv6アドレスを自動構成ではなく、手動で構成することも可能。

netsh interface ipv6 add address 4 2001:123:1234::cafe

addressの後ろの「4」は、ネットワークインタフェースインデックス値である。この値は、インタフェース名(文字列)で指定することもできる。

netsh interface ipv6 add address "ローカル エリア接続" 2001:123:1234::cafe

ネットワークアドレスを削除するには、delete addressを使用する。

netsh interface ipv6 delete address 4 2001:123:1234::cafe
  • Default GWの設定
netsh interface ipv6 set route ::/0 "ローカル エリア接続"
2001:123:1234::1

IPv6経路の設定

経路の設定は以下のコマンドをコマンドプロンプトから実行する。

ipv6 rtu 宛先プレフィックス インタフェース番号/送信先アドレス lifetime 有効生存時間

有効生存時間については、IPv6アドレスの追加・削除と同様の設定である。

以下にコマンドのサンプルを示す。

ipv6 rtu 2001:123:1234::/64 4/2001:123:1230::100 pub lifetime infinite

IPv6経路の確認

以下のコマンドをコマンドプロンプトで実行することにより、IPv6経路(ルーティングテーブル)を確認することができる。

ipv6 rt

おまけ:IPv6アドレスを名前から引く

IPv6アドレスはIPv4アドレスと比較して非常に長い。特定のホストをホスト名からIPv6アドレスを引く方法を知っておくと役に立つ場合がある。(DNSを使わなくてもWindowsにもhostsファイルがある。場合によっては便利)

そのためには、hostsファイルと呼ばれるホスト名とIPv6アドレスの対応を定義するファイルを用いる。

  • 編集箇所
%SystemRoot%\system32\drivers\etc\hosts
  • 編集内容

例えば、IPv6アドレス「2001:123:1234::feed:cafe」を

hoge」というホスト名に対応させる場合は、

2001:123:1234::feed:cafe  hoge

と記述する。

2008-12-17

Wireshark(Ethereal)で独自パケットフォーマットを解析する方法

Luaプラグインを使うと、独自パケットフォーマットのパーサーを簡単に定義することができます。

Lua - The Wireshark Wiki

プラグインの有効化

Wiresharkインストールディレクトリ → init.luaを編集

disable_lua = true; do return end;
をコメントアウト
-- disable_lua = true; do return end;
run_user_scripts_when_superuser = falseを
run_user_scripts_when_superuser = trueに

一番最下行に実行したいluaスクリプトを記述したファイルをWiresharkインストールディレクトリに置き、dofileで指定する。

dofile("hoge.lua")

以下の例は、プロトコル名をTRIVIALとし、UDPの7777番にきたパケットをサブツリーで分解する例です。

hoge.lua

-- trivial protocol example
-- プロトコルの定義
trivial_proto = Proto("trivial","TRIVIAL","Trivial Protocol")
-- パース用の関数定義
function trivial_proto.dissector(buffer,pinfo,tree)
    pinfo.cols.protocol = "TRIVIAL"
    local subtree = tree:add(trivial_proto,buffer(),"Trivial Protocol Data")
    subtree:add(buffer(0,2),"The first two bytes: " .. buffer(0,2):uint())
    subtree = subtree:add(buffer(2,2),"The next two bytes")
    subtree:add(buffer(2,1),"The 3rd byte: " .. buffer(2,1):uint())
    subtree:add(buffer(3,1),"The 4th byte: " .. buffer(3,1):uint())
end
-- udp.portテーブルのロード
udp_table = DissectorTable.get("udp.port")
-- ポート7777番とプロトコルの紐付けをする
udp_table:add(7777,trivial_proto)

他にも本家にいくつかサンプルがあります。

Lua/Examples - The Wireshark Wiki

この中でも、下記のスクリプトは結構利用場面は多いのではないでしょうか。

-- HTTPを 4888-4891番に割り当てる
do
        local tcp_port_table = DissectorTable.get("tcp.port")
        local http_dissector = tcp_port_table:get_dissector(80)
        for port in {4888,4889,4890,4891} do
                tcp_port_table:add(port,http_dissector)
        end
end
-- 10.0.0.0/8の通信のパケット数を計測する
do
    packets = 0;
    local function init_listener()
        local tap = Listener.new("frame","ip.addr == 10.0.0.0/8")
        function tap.reset()
            packets = 0;
        end
        function tap.packet(pinfo,tvb,ip)
            packets = packets + 1
        end
        function tap.draw()
            print("Packets to/from 10.0.0./8",packets)
        end
    end
    init_listener()
end

2008-11-27

簡単Google App Engine入門編

Pythonを知らなかったということもあって、個人的にGoogle App Engine(GAE)がとっつきにくかったので、helloworldまでをまとめてみます。

Python 2.5のインストール

以下のリンクから適当にmsiパッケージをおとしてインストール

no title

補足:基本的なpythonの使い方は以下のサイトが参考になります。

言語習得Pythonへの道

App Engine SDKのダウンロードとインストール

Download and Install the SDK for App Engine  |  App Engine Documentation  |  Google Cloud

適当なmsiパッケージを選択します。

インストールすると、デフォルトで以下のディレクトリに展開されます。

 C:\Program Files\Google\google_appengine

この中で、重要なスクリプトが以下の二つです。

dev_appserver.py開発環境用のWEBサーバー、ローカルでGoogle App Engineをエミュレートしてくれます
appcfg.pyGoogle App Engineにアップするためのスクリプト

これらの使い方は、後ほど・・・

次に、作業用ディレクトリを作ります。

ここでは、C:\gapps\helloworldのディレクトリを作成し、その中に以下のファイルを用意します。

  • helloworld.py
 print 'Content-Type: text/plain'
 print ''
 print 'Hello, world!'
  • app.yaml
 application: helloworld
 version: 1
 runtime: python
 api_version: 1
 
 handlers:
 - url: /.*
   script: helloworld.py

開発用GAEサーバを起動&helloworldのデプロイ

DOSプロンプトから、以下のコマンドを実行。

 C:\Program Files\Google\google_appengine\dev_appserver.py C:\gapps\helloworld

dev_appserver.pyの引数にデプロイしたいサービスのディレクトリを指定すれば、そのディレクトリをデプロイしてサーバが立ち上がります。

私は、面倒くさいんで上記の内容を、dev_appserver.batに上記の内容を記述して起動するようにしています。

ブラウザで表示

続いて、http://localhost:8080/にブラウザでアクセス。

すると・・・

 Hello, world!

と表示されればおめでとう!

次は、Google App Engineへのアカウントの登録とアップロード方法について説明します。

簡単Google App Engine登録編 - TECHNERD::INIT

2008-06-17

Apache Shindig

OpenSocialアプリケーションをホストするためのソフトウェア)。

SNSサイトなどのコンテナに相当するものだそうです。

これを使えば独自にOpenSocialのアプリケーションをホスティングすることができます。

  • インストール方法
    • 必要要件
      • Java (JDK/JRE) 1.5以上。環境変数JAVA_HOMEに指定。
      • Subversion Client
      • Maven

ソースコードの取得

1. mkdir ~/src/shindig (this is also referred to as <shindig_home> later in the exercises)

2. cd ~/src/shindig

3. svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk/ .

ビルド(with Maven)

1. Make sure you have the prerequisites installed first.

2. cd ~/src/shindig/

3. mvn (This executes a top level build of Shindig)

4. Once the build completes, you can run Shindig with:

mvn -Prun

Jettyサーバの立ち上げ

1. mvn jetty:run-war



http://chrisschalk.com/shindig_docs/io/shindig-io.html

2008-03-17

Wireshark(Ethereal)で独自パケットフォーマットを解析する方法

Luaプラグインを使うと、独自パケットフォーマットのパーサーを簡単に定義することができます。

Lua - The Wireshark Wiki

プラグインの有効化

Wiresharkインストールディレクトリ → init.luaを編集

disable_lua = true; do return end;
をコメントアウト
-- disable_lua = true; do return end;
run_user_scripts_when_superuser = falseを
run_user_scripts_when_superuser = trueに

一番最下行に実行したいluaスクリプトを記述したファイルをWiresharkインストールディレクトリに置き、dofileで指定する。

dofile("hoge.lua")

以下の例は、プロトコル名をTRIVIALとし、UDPの7777番にきたパケットをサブツリーで分解する例です。

hoge.lua

-- trivial protocol example
-- プロトコルの定義
trivial_proto = Proto("trivial","TRIVIAL","Trivial Protocol")
-- パース用の関数定義
function trivial_proto.dissector(buffer,pinfo,tree)
    pinfo.cols.protocol = "TRIVIAL"
    local subtree = tree:add(trivial_proto,buffer(),"Trivial Protocol Data")
    subtree:add(buffer(0,2),"The first two bytes: " .. buffer(0,2):uint())
    subtree = subtree:add(buffer(2,2),"The next two bytes")
    subtree:add(buffer(2,1),"The 3rd byte: " .. buffer(2,1):uint())
    subtree:add(buffer(3,1),"The 4th byte: " .. buffer(3,1):uint())
end
-- udp.portテーブルのロード
udp_table = DissectorTable.get("udp.port")
-- ポート7777番とプロトコルの紐付けをする
udp_table:add(7777,trivial_proto)