Hatena::ブログ(Diary)

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

2009-04-09

githubで.vimrcの管理

Dropboxを使って各種設定ファイルを管理していたのですが、設定ファイルにDropboxを使うのは冗長なのでLinuxの設定ファイル諸々はgithubで管理することにしました。

github上にconfigレポジトリを作成してそこで管理することとします。

GitHubサイトでの設定

githubのページにて、ログイン後、新規レポジトリを作成する。

Your Repositoriesの右にある[create a new one]を選択

Project Name: Config

として新規レポジトリを作成

PC側での設定

  git config --global user.name "Your Name"
  git config --global user.email youraddr@gmail.com

この設定がコミットログに反映されます。

初期コミット

mkdir config
cd config
git init
# .vimrcを追加
git add .vimrc
git commit -m 'first commit'
# GitHubを Remote Repositry として追加する
git remote add origin git@github.com:chipa34/config.git
# ローカルの変更を、github上のconfigレポジトリにプッシュする
git push origin master

他の環境からGitHub上の情報を持ってくる場合

git clone http://github.com/chipa34/config.git

初期コミットの時に作ったconfigディレクトリ以下を引っ張ってきます。

SVNで慣れてたので以下のサイトは参考になりました

2009-02-17 ip6tables このエントリーを含むブックマーク

IPv6フィルタを行うときは以下のようなシェルを作って対応しています。

#!/bin/sh

# 全てのルールを削除
ip6tables -F
# 全てのユーザ定義チェインを削除
ip6tables -X

# 基本的には外部からのパケットの通過を拒否
ip6tables -P INPUT DROP
#ip6tables -P INPUT ACCEPT
# 基本的には外部へのパケットの通過を許可
ip6tables -P OUTPUT ACCEPT
# 基本的には他のインターフェイスへ再送信を拒否
ip6tables -P FORWARD DROP

# lo( ループバック)からのINPUTを許可
ip6tables -A INPUT -i lo -j ACCEPT

#RS,RA,NS,NAを受け入れる
ip6tables -A INPUT -i eth0 -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
ip6tables -A INPUT -i eth0 -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
ip6tables -A INPUT -i eth0 -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
ip6tables -A INPUT -i eth0 -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT

# 個々のアクセス制御を以下に記述
# HTTPアクセスを許可
ip6tables -A INPUT -i eth0 -p tcp -s 2001:1234:1234::/48 --dport 80 -j ACCEPT

# HTTPSアクセスを許可
ip6tables -A INPUT -i eth0 -p tcp -s 2001:1234:1234:1234::cafe/128 --dport 443 -j ACCEPT

# ip6tablesに保存する
ip6tables-save > /etc/sysconfig/ip6tables

このシェルを実行することでルールが適用されます。

# ip6tables -L

でルールを確認することができます。

2009-01-21

簡単Google App Engine登録編

この記事は、簡単Google App Engine入門編 - TECHNERD::INITの続きです。

GAEへの登録

http://appengine.google.com/にアクセスします。

[Welcome to Google App Engine]という画面が出てきたら

[Create an Application]をクリック

Verify Your Account by SMSという画面に飛ぶので

Country and Carrier: Japanを選択します。

次にキャリアを選択します。

Username:

に携帯のe-mailアドレスの@より前の部分を入力

[Send]を押す

携帯のe-mailアドレスに以下のような7桁の認証キーがおくられてきます。

Google App Engine Code : 9999999

これを入力するとアカウントの登録が完了です。

アプリケーション領域の作成

GAE上にアプリケーション領域の作成を行います

[Create an Application]の画面にて、

Application Identifier:に任意の名前をつけて下さい。

ここではhogehogehogeにします。

Application Title:に適当にタイトルをつけてください。

そして[Save]を押す。

appspot.com上にhogehogehoge.appspot.comという領域が作られました。

まだアプリケーションをアップしていないのでアクセスしても何もありません。


Google App Engineへのアップロード

ローカルPCにて

app.yamlを編集

application: hogehogehoge <-ここを[Create an Application]の画面で指定したApplication Identifierに変えてください。
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
script: helloworld.py

app.yamlの詳細について知りたい方はこちら。

Error 404 (Not Found)!!1

GAEへのアップロード

appcfg.pyでアップロードします。

DOSプロンプトから、

C:\Program Files\Google\google_appengine\appcfg.py update C:\gapps\helloworld

実行後、e-mailとpasswordを聞かれます。

e-mailgmailのアカウント
passwordgmailのパスワード

入力してアップロード完了

確認

http://hogehogehoge.appspot.comにアクセス。

Hello, Worldと表示されていればOK。

ここまでが一連の流れになります。

2009-01-09

Shim6 (Site Multihoming by IPv6 Intermediation)

概要

  • 端末ベースのサイトマルチホーム技術といいながら実質ホストマルチホーム技術である
    • 端末に振られたアドレスを2種類に分類
      • Identifierアドレス
        • 端末の一意性を表すアドレス(セッション開始時のIPv6アドレス)
      • Locatorアドレス
        • ルーティングするための場所を示すアドレス
    • IPv6層の間にShim層を導入
      • Shim層の上からは、Identifierアドレスで通信しているように見える
      • Shim層の下からは、Locatorアドレスで通信しているように見える
    • 本質的には端末内NAT
      • アプリケーションからNATを隠蔽し、端末外NATの抱える問題を回避
    • 欠点
      • ホストベースマルチホームなので、TEは端末のアドレス選択に依存
        • →網側での制御が困難
 +----------------+
 | Application    |
 +----------------+
 |   TCP/UDP      |
 +--------+-------+
 |        |IPv6(2)| <- IP end-point sub-layer (IPsec,Fragment,Destination Option処理)
 |        +-------+ 
 |  IPv4  |  Shim | <- Locator/Identifier対応付け及びアドレス付け替え
 |        +-------+
 |        |IPv6(1)| <- IP routing sub-layer(NDP,IPv6パケット送受信処理)
 +--------+-------+
 |                |
 +----------------+

最近、あまり追っかけてなかったのですが、yebo blogしたそうですね。

関連リンク

Shim6 WG

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