Apache 2.2.11 に付属の ab(Apache Bench) は User-Agent を偽装出来る

気付いたら一ヶ月も放置してた!
筆無精でいかんですね、というか仕事が充実しすぎててあまり吐き出す事がない今日この頃でした。
んで、今日はこの前気付いた事の備忘録。


とりあえずHTTPサーバに負荷かけたいなぁ、となると個人的に一番お手軽だと思ってるのが ab(Apache Bench) です。
とは言え、Apache 2.0.41 の頃に使おうとした時は

$ ab -H "User-Agent: DoCoMo/2.0 F01A(c100;TB;W24H17)" -n 100 -c 10 http://localhost/sample

とかしても、User-Agent が

ApacheBench/2.0.41-dev, DoCoMo/2.0 F01A(c100;TB;W24H17)

とかになっちゃって、当時は単純に負荷書ける意外の目的ではあんまり使い物にならんかったのです (´・ω・`)
で、つい先日ふと気になって Apache 2.2.11 の ab.c 見てみたら

case 'H':
    hdrs = apr_pstrcat(cntxt, hdrs, optarg, "\r\n", NULL);
    /*
     * allow override of some of the common headers that ab adds
     */
    if (strncasecmp(optarg, "Host:", 5) == 0) {
        opt_host = 1;
    } else if (strncasecmp(optarg, "Accept:", 7) == 0) {
        opt_accept = 1;
    } else if (strncasecmp(optarg, "User-Agent:", 11) == 0) {
        opt_useragent = 1;
    }
    break;

なんて感じに改良されてました (`・ω・´)
後々 opt_useragent の値使って

if (!opt_useragent) {
    /* User-Agent: header not overridden, add default value to hdrs */
    hdrs = apr_pstrcat(cntxt, hdrs, "User-Agent: ApacheBench/", AP_AB_BASEREVISION, "\r\n", NULL);
}
else {
    /* Header overridden, no need to add, as it is already in hdrs */
}

てな感じで振り分けしてるので、今までみたいな 追加 ではなく 置き換え が可能になってます。


やっとこさやりたい事が出来るようになった!

追記

svn commit: r534057 - in /httpd/httpd/branches/2.2.x: CHANGES support/ab.c

変更されたの 2007 年か!
今まで知らなかった自分が恥ずかしい o...rz