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
Windows XPでIPv6
IPv6スタックのインストール
Windows XPはIPv6スタックを搭載しているが、初期状態では無効となっており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アドレスは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
と記述する。
Bashショートカットキー チートシート
移動系
Ctrl + a | 行頭へ移動 |
Ctrl + e | 行末に移動 |
Ctrl + b | 1文字戻る |
Ctrl + f | 1文字進む |
削除系
Ctrl + d | カーソル位置にある文字を削除 |
Ctrl + k | カーソル位置から行末まで削除 |
Ctrl + u | 行頭からカーソル位置まで削除 |
Ctrl + w | カーソル位置からその左側の最初のスペースまで削除(スペースが無い場合は行頭まで削除) |
Ctrl + H | カーソルの左にある1文字を削除(BackSpaceに相当) |
Ctrl + y | 削除した文字を貼り付ける |
表示系
Ctrl + l | 画面をクリアしてカレント行(現在いる行)を再表示する |
Ctrl + q | 画面への出力を再開 |
Ctrl + s | 画面への出力を停止 |
Ctrl + t | カーソル位置の文字とその左側の文字を入れ替える |
検索系
Ctrl + r | 前打ったコマンドを検索 |
コマンド系
Ctrl + m | コマンドを実行 |
Ctrl + n | コマンド履歴の1つ後ろのコマンドの表示 |
Ctrl + p | コマンド履歴の1つ前のコマンドの表示 |
Ctrl + c | 現在のコマンドを強制終了 |
Ctrl + z | 現在のコマンドを一時停止 |
!! | 1つ前に実行したコマンドを再実行 |
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
でルールを確認することができます。
簡単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の詳細について知りたい方はこちら。
http://code.google.com/intl/ja/appengine/docs/python/tools/configuration.html#app_yaml
GAEへのアップロード
appcfg.pyでアップロードします。
DOSプロンプトから、
C:\Program Files\Google\google_appengine\appcfg.py update C:\gapps\helloworld
実行後、e-mailとpasswordを聞かれます。
gmailのアカウント | |
password | gmailのパスワード |
入力してアップロード完了
確認
http://hogehogehoge.appspot.comにアクセス。
Hello, Worldと表示されていればOK。
ここまでが一連の流れになります。
Shim6 (Site Multihoming by IPv6 Intermediation)
概要
- 端末ベースのサイトマルチホーム技術といいながら実質ホストマルチホーム技術である
- 端末に振られたアドレスを2種類に分類
- Identifierアドレス
- 端末の一意性を表すアドレス(セッション開始時のIPv6アドレス)
- Locatorアドレス
- ルーティングするための場所を示すアドレス
- Identifierアドレス
- 端末に振られたアドレスを2種類に分類
-
- IPv6層の間にShim層を導入
- Shim層の上からは、Identifierアドレスで通信しているように見える
- Shim層の下からは、Locatorアドレスで通信しているように見える
- IPv6層の間にShim層を導入
-
- 本質的には端末内NAT
- アプリケーションからNATを隠蔽し、端末外NATの抱える問題を回避
- 本質的には端末内NAT
-
- 欠点
- ホストベースマルチホームなので、TEは端末のアドレス選択に依存
- →網側での制御が困難
- ホストベースマルチホームなので、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パケット送受信処理) +--------+-------+ | | +----------------+
最近、あまり追っかけてなかったのですが、http://yebo-blog.blogspot.com/2008/07/ietfshim6.htmlしたそうですね。
関連リンク
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