S.C. MAGI-SYSTEM 日記
Diary
2009年になって、実に3年ぶりに更新再開。

hns - 日記自動生成システム - Version 2.19.9

2005年03月11日(金) [n年日記]

[天気:-](家) 起床:- 就寝:-

#1 [Univ] …もういくつ寝ると…

あれあれ?

気付いたら、明日がもう国試じゃないか!

2004年03月11日(木) [n年日記]

[天気:晴れ常に強風](家) 起床:11:00 就寝:25:00

#1 [Home] 不治の病

今日は一日中、信じられないくらいの強風が吹き荒れていました。
おかげさまで早くも花粉に悩まされております。
こう鼻水が止まらないと、しんどくてたまりませんね。

…あ、花粉症がひどくなったら腹痛は治ったかも。

#2 [MacOSX] Camino Nightly Build

なんとなく build 。 [Camino-20040311.dmg.gz]
History 周りのバグ修正が入っていますが、それを除けば実質 20040226 版 と同じです。

2003年03月11日(火) [n年日記]

[天気:晴れ](家) 起床:6:30 就寝:25:45

#1 [Server] DoS Attack by Gaisbot/3.0

ここ数日、Geofrontの外部向けサーバである melchior
/kernel: swap_pager_getswapspace: failed
/kernel: swap_pager_getswapspace: failed
last message repeated 107 times
/kernel: swap_pager_getswapspace: failed
last message repeated 80 times
といったエラーを出して 大変 なことになることが頻発していました。
だいたい落ちる(というかアクセスを受け付けなくなる) *1 ときに
/kernel: pid 52644 (squid), uid ***, was killed: out of swap space
squid[52642]: Squid Parent: child process 52644 exited due to signal 9
といったエラーが記録されていたんで最初は Squid を疑ったのですが、 patch を当てた後である今日もまたエラーが出たので、原因は違うらしい。
次に疑ったのは
/kernel: pid 56160 (perl), uid ****, was killed: out of swap space
ということで perl スクリプト。
一応伏せてあるけど、上の uid は私のなのでこのサーバで私の uid で動いているものを探してはみたが…
  • MRTG
  • MHonArc
くらいである。
それぞれが cron で呼ばれる時間は MRTG が15分おき、MHonArcが30分おきである。
ちなみに昨日 out of swap space が出たのが
Mar 10 02:26:09 melchior /kernel: swap_pager: out of swap space
Mar 10 02:26:10 melchior /kernel: swap_pager_getswapspace: failed
今日は
Mar 11 23:26:58 melchior /kernel: swap_pager: out of swap space
Mar 11 23:27:02 melchior /kernel: swap_pager_getswapspace: failed
ということで、時間的には似たようなものだが */15 や */30 で起動される時間ではない。
となると、何が原因か…

CGI?

他に perl を使っているものと言えば CGI である。そうだ。これだ。
さっそく Apache のログをあたってみると
202.1.239.113 - - [10/Mar/2003:02:24:03 +0900] "GET /cgi-bin/diary/diary.cgi?0113 HTTP/1.0" 200 4264 "-" "Gaisbot/3.0+(robot@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)"
202.1.239.113 - - [10/Mar/2003:02:24:04 +0900] "GET /cgi-bin/diary/diary.cgi?0115 HTTP/1.0" 200 3888 "-" "Gaisbot/3.0+(robot@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)"
202.1.239.113 - - [10/Mar/2003:02:24:22 +0900] "GET /cgi-bin/diary/diary.cgi?0128 HTTP/1.0" 200 3278 "-" "Gaisbot/3.0+(robot@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)"
202.1.239.113 - - [10/Mar/2003:02:24:26 +0900] "GET /cgi-bin/diary/diary.cgi?0118 HTTP/1.0" 200 2560 "-" "Gaisbot/3.0+(robot@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)"
202.1.239.113 - - [10/Mar/2003:02:24:26 +0900] "GET /cgi-bin/diary/diary.cgi?0126 HTTP/1.0" 200 2770 "-" "Gaisbot/3.0+(robot@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)"
どんぴしゃだ。
hns(日記CGI)に総当たりでアクセスしていやがる。
非常識もいいところだ。
上のログでは テロ開始 が 02:24:03 だが、このわずか2分後にはメモリ不足で out of swap space になると。
やれやれ。

んで、原因が分かれば次は対処方法の検討である。
一番ラクなのは、上の DoS攻撃 元のIPアドレスからのアクセスを ipf でブロックすることであるが、 今までのログから検索するに…
% ( cat /var/log/apache/access_log ; zcat /var/log/apache/access_log.*.gz ) | grep Gaisbot/ | awk '{print $1}' | sort | uniq -c
   1 140.123.101.12
   7 140.123.103.244
   2 140.123.103.245
  21 140.123.103.4
 931 202.1.239.113
  64 66.237.60.21
  11 66.237.60.22
   6 66.237.60.23
  24 66.237.60.35
ということなので、とりあえず 202.1.239.113 を BAN
それから HTTP_USER_AGENT *2
Gaisbot/3.0+(robot@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)
ということなので、少し Apache の負荷が増えるかもしれないが、
    RewriteCond ${HTTP_USER_AGENT}      ^Gaisbot/.*
    RewriteRule ^/.*            -       [F]
として 403 Forbidden を返すようにした。

検索ロボットも迷惑なものである。
*1: やっぱりFreeBSDは高負荷に強いですね。 Swap使い尽くしてもプロセスが上がらないためにアクセスできなくなるだけで、 システムそのものが落ちることはありません。
*2: 誠さん も被害に遭われたらしい。

#2 [MacOSX] 3-pass encoding

もはやカテゴリが全然関係ない話題となりつつあるが、DivX エンコードの続きである。
先日紹介した DVDibbler は内部で MPlayer のサブセットである mencoder を使ってエンコードしている。
この mencoder でかなり高いクオリティでエンコードする方法を 見付けた ので紹介したい。
3-pass encoding と呼ばれるものだが、端的に言ってしまうと予備試験をしてから本試験に入るというような感じである。
ちなみに 2-pass というのもあり、これは
  1. Ripping & エンコード (フレームレート算出)
  2. Ripping & エンコード (本エンコード)
となっている。
DivXに代表される最近の codec では VFR とも呼ばれる可変フレームレート(Variable Frame Rate)を採用していて、 動画において変化の少ない(動きのない静止画の多いシーン)部分ではフレームレートを下げ、 逆に動きの多いシーンではフレームレートを上げることで動画のムラを抑えるようになっている。
この動きの多い(変化の多い)部分でフレームレートが低いと、いかにも「圧縮しました」みたいなモザイク状の四角い箱が目立つようになる。
んで、普通にエンコードする場合はエンコーダが経験的に動画の変化量を予測し、それを元にフレームレートを出しているので、動きのゆるやかなシーンから突然激しくなるとムラが生じやすい。
そこで 2-pass である。
1回目のエンコードはいわば "仮" のエンコードで、全体を通してどこにフレームを割り振るべきかを算出する。
そして2回目のエンコードで、先の値を参考に最適なフレームレートでエンコードするのである。
これだけ手間をかけると、オリジナルのDVDと遜色ないくらいの出来になる。すごい。
ちなみに 3-pass は 2-pass の前に音声のみのエンコードを先にやってしまう *3 というものだ。

もちろんエンコードにかかる時間も半端ない。
PowerBook G4 12" で 00:24:23 のものをエンコードするのに
Encoding started on Tue Mar 11 22:32:02 JST 2003
first pass ...Tue Mar 11 22:58:43 JST 2003
second pass ...Wed Mar 12 00:02:15 JST 2003
third pass ...Wed Mar 12 01:06:35 JST 2003
Encoding completed on Wed Mar 12 01:06:35 JST 2003
という感じである。
音声だけで実際の長さ分、動画に至ってはその3倍くらいかかるものを2回もやるのだから7倍?(爆)

mencoder で作る場合のスクリプトを書いてみました。
興味があれば どうぞ

つーか DVDibbler (GUI) もう使ってないじゃん。(笑)
*3: 2-passでは1回目、2回目の両方で音声のエンコードもするため、無駄がある。


最近の日記
2019年06月24日
10年振り
2009年12月31日
定期アップデート
2009年04月03日
定期アップデート
2009年03月22日
定期アップデート
2009年01月26日
pomera
2009年01月23日
今日のBOT
2009年01月22日
BOT
2009年01月20日
Seagate HDD
PowerPCの備忘録
RSS feed
abuse
2009年01月19日
Windows 7 beta
2009年01月16日
perl-after-upgrade
2009年01月14日
アクセスカウンタ
2009年01月13日
ひとまず完了
2009年01月12日
7.1-RELEASE(適用)
2009年01月10日
hns 2.19.9
2009年01月09日
recursion no
以上、3 日分です。
先月 2019年08月 来月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project