WireShark – TCP の生のデータを保存する

Follow TCP Stream を使えば生の TCP ストリームデータを取得可能です。
 
例えば、HTTP で画像を取得して、その画像をファイルとして保存したい場合は
次のようにします。
 
1. HTTP/1.1 200 OK などの HTTP レスポンスパケットを選んで右クリック→Follow TCP Stream を選択
2. Follow TCP stream ウィンドウが開いたら、右下の Raw をチェック
3. Save As をボタンをクリック
4. 保存先を指定して保存(保存例: http_gif.dat|rs/http_gif.dat)
5. バイナリエディタを開き、0D 0A 0D 0A 以前(HTTP Header)を削除し、拡張子変更(変更例: 画像)
 
追記:
(2006-07-27)同日の別トピックに書きましたが、Ethereal は複製版が Wireshark として独立し、そちらが更新されています。

αチャンネルを画像から取り出す

convert drawn.png -channel matte -separate +matte matte.png

これで、drawn.png のαチャンネル(透過度)だけをモノクロで取得した画像を得ることができます。
参考:
http://www.cit.gu.edu.au/~anthony/graphics/imagick6/channels/#matte
情報元:
http://blawat2015.no-ip.com/~mieki256/diary/0623.html

ImageMagick の convert で半透明な PNG を扱う

PNG はRGBとともにα値を保持しているので、半透明色というのも指定することが可能です。

# a.gif の白(#FFFFFF)を半透明(50%=0x80)にし、b.png として保存(入力の形式は任意ですが、出力は png 必須です)。
convert a.gif -fill “#FFFFFF80” -opaque “#FFFFFF00” b.png
# 半透明になったか確認のため背景画像 bg.jpg の上に b.png を重ね、
# c.jpg として保存する(背景、出力の画像形式は任意です)。
convert -compose over bg.jpg b.png c.jpg

参考:
– convert コマンドのオプションについては「指定した色を別の色に置き換える
」を参照。
– PNGについては JEvaHz Messages 1320-1331 を参考にしました。

PNGの透明化は大別して2種類の指定方法があり、色深度などにより厳密には
4種類のフォーマットがあります。
 
1.αチャンネルを用いる場合(Color type = 4 or 6)
  (8bit,16bit grayscale / 24bit,48bit color)
 RGB値もしくはgrayscale値に加え、ピクセル毎にα値(透明度)を保持。
 α値の深度は色深度と同じ。
 
2.tRNS(=transparency) chunkを用いる場合
  a.1,2,4,8bit indexed colorの場合(Color type = 3)
   個々のカラーに対し、8bitの深度の透明度を指定できる。
  b.1,2,4,8,16bit grayscale の場合 (Color type = 0)
   ある一つのgrayscale levelに対し、1bitの深度の透明度を指定できる。
  c.24/48bit colorの場合(Color type = 2)
   ある一つの色に対し、1bitの深度の透明度を指定できる。
 
(中略)
 
また、PNGの仕様によると透明化は必須ではないらしいので、
実装にばらつきがでるのはやむを得ないでしょう。
部分的な対応もOKだそうで…。

PNG Programming Resources

ttyrec で Out of pty’s エラー

CentOS 4.3 に ttyrec を入れたところ、RedHat 版の RPM では ttyrec コマンドを使うと Out of pty’s と怒られてしまいました。
 
ソースをダウンロードしてきて、README にならって

make CFLAGS=-DSVR4

としたところ、問題なく動作しました。
参考:
[2006-04-11] 端末での作業を記録/再生する

gpg

警告: 剣呑なメモリーを使用しています! [security]:
gpg を使っていて上記のような警告がでていたので簡単に調べてみました。
 
gpg: 警告: 剣呑なメモリーを使用しています!(%!zt! diary)

「gpg: WARNING: using insecure memory!」というのはcp $(which gpg) .; ./gpgなどでrootにsetuidされていないgpgを使うと出てくるメッセージ。

ということで、次の処理で対処可能です。
 

# ll `which gpg`
-r-xr-xr-x 1 root wheel – 738740 4 6 12:46 /usr/local/bin/gpg*
# chmod u+s `which gpg`
# ll `which gpg`
-r-sr-xr-x 1 root wheel – 738740 4 6 12:46 /usr/local/bin/gpg*

SERVER_NAME vs HTTP_HOST

$_SERVER[‘SERVER_NAME’] と $_SERVER[‘HTTP_HOST’] どっちを使うべきか。
 
SERVER_NAME Versus HTTP_HOST
 
結論から
– HTTP_HOST
単純に HTTP リクエストヘッダの host: そのままが格納される。省略されると空文字列になる。
– SERVER_NAME
HTTP リクエストヘッダで host: が指定されていれば、

htmlentities($_SERVER[‘HTTP_HOST’])

と等価になる。
host ヘッダが省略された場合はサーバデフォルト(Apache なら httpd.conf の ServerName)と等価になる。
 
とのことです。いずれにせよ、信頼できる値ではありませんね。
 
参考:
Chris Shiflett: SERVER_NAME Versus HTTP_HOST(blog.xole.net)

Linux でバイナリ処理をする

標準で入っている od というプログラムでバイナリダンプが可能です。

$ # /bin/sh を 2 バイト単位で 10 進ダンプする
$ od /bin/sh
$ # /bin/sh を 1 バイトずつ 16 進ダンプする
$ od -t xC /bin/sh
$ # /bin/sh を、1 バイトずつ 16 進ダンプし、同時に ASCII 文字でも確認する
$ od -t xCa /bin/sh

また、任意の ASCII コードを出力するのに、echo を利用することできます。

$ # 0x50 0x51 0x52 の文字(‘P’,’Q’,’R’)を、末尾に改行なしで出力する。
$ echo -en ‘\x50\x51\x52’
# Hello と改行つきで出力する。
$ echo -e ‘\x48\x65\x6C\x6C\x6F’

その他バイナリエディタ関係:
hex(ports: japanese/hex)
日本語文字列対応のバイナリダンプツール。
HexEdit(ports: editors/hexedit)
Emacs ライクなバイナリエディタツール。
Emacs の Hexl モードを使う
hi
vi ライクなバイナリエディタ。
参考:
Manpage of OD
Manpage of ECHO

Smarty + overLIB で簡単にポップアップ

overLIB は簡単に見栄えのいいポップアップ表示を行うためのフリーの JavaScript ライブラリです。overLIB は PHP/Smarty なしでも勿論動作します。
overLIB 単体を利用する場合は次のようにします(公式マニュアルより抜粋)。

<!– 必須の初期化処理(ひとつのページにつき一度だけ必要) –>
<div id=”overDiv” style=”position:absolute; visibility:hidden; z-index:1000;”></div>
<script language=”JavaScript” src=”overlib.js”><!– overLIB (c) Erik Bosrup –></script>
<!– マウスオーバー時に ポップアップを表示する –>
 <a href=”javascript:void(0);” onmouseover=”return overlib(‘This is an ordinary
  popup.’);” onmouseout=”return nd();”>here</a>

Smarty のテンプレートでは popup_initpopup というカスタム関数を使えば、さらに簡単に overLIB を利用する事が可能です(Smarty の公式マニュアルより)。

{* popup_initは popup を使う前に、<BODY>から</BODY>の間で一度だけ呼び出す必要があります(訳注: この文章は原文とは異なります 😉 *}
{popup_init src=”/javascripts/overlib.js”}

{* マウスオーバー時にポップアップウィンドウを表示するリンクを作成する *}
<a href=”mypage.html” {popup text=”This link takes you to my page!”}>mypage</a>

{* popup の text ではリンク等の HTML 文も利用可能です *}
<a href=”mypage.html” {popup sticky=true caption=”mypage contents”
text=”<UL><LI>links<LI>pages<LI>images</UL>” snapx=10 snapy=10}>mypage</a>

参考:
overLIB 公式
Smarty 公式
Smarty 2.6.6 日本語マニュアル

Selenium – HTMLベースの HttpUnit

http://www.openqa.org/selenium/index.html
 
HTMLでテストケースを書いて、ブラウザで実行できる Web 用の xUnit 系テストツール。実装は JavaScript です。
同僚経由で知りましたが、かなりいいです。
 
追記: これを Firefox の拡張で行えるようにした Selenium IDE というものもあります。
ブラウザでの動作を記録してそこからテストを生成してくれるというものです。
テストの生成から実行まで全て短時間で GUI でできるというのが素晴らしいです。作成したテストはもちろん本家 Selenium でも使えます。これから何度もお世話になりそう。
なお、この拡張は日本で作られた Selenium Recorderがベースになっています。
 
参考:
webアプリケーションテストツール seleniumがヤバすぎる(2nd life)
SeleniumIntegration
– [Web アプリケーションテストツール Selenium のテスト記述から開放してくれる Firefox 拡張 Selenium IDE|http://cl.pocari.org/2006-02-15-3.html]]

Smarty で JavaScript や CSS を使うと構文エラーになる対策

{literal} 〜 [/literal}

で挟むとその間にあるものは、Smarty の構文解析を行いません。
互換性を考えないのであれば公式マニュアルにあるように left_delimiter と right_delimiter を {, } から、<!–{, }–> に変更するというのもスマートです。ただしその場合、タグの属性の一部を変数にいれる使い方をすると、ソースはプレーンな HTML ではなくなりますが..。

<option value=1 {checked}>

 
参考:
Smarty の構文解析を回避する(Smarty 2.6.3 マニュアル)