X



トップページ運用情報
1001コメント246KB
bbs.cgi再開発プロジェクト4
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001桃太郎 ★
垢版 |
04/12/02 19:52:43ID:???
peko鯖の稼動によりボトルネックの一つである事がより明らかになった
bbs.cgi作り直しプロジェクトです。

開発環境の工事現場
また挑戦。@2ch掲示板http://dso.2ch.net/myanmar/

関連は>>2-
0831FOX ★
垢版 |
04/12/13 18:45:21ID:???
>>830
たしかに、、、

ただ、将来の変更への耐性が落ちるか、
それはその時にその担当者に頑張ってもらおう。
0832FOX ★
垢版 |
04/12/14 14:34:57ID:???
file i/o を減らすのだ 第八弾(ID生成ルーチン)

1) 毎回 HDD にアクセスしているのを何とかしたい、
2) 毎月同じIDになるのを何とかする?
3) あとなんかあったっけ?

今 コード出します。
0833FOX ★
垢版 |
04/12/14 14:36:21ID:???
{

#IDを生成する
use Digest::MD5;
my $md5 = Digest::MD5->new;

use Digest::MD5 qw(md5_hex);
#my $idnum = md5_hex($ENV{'REMOTE_ADDR'});
my $idnum = md5_hex($GB->{IDNOTANE});

$idnum = substr($idnum,-4);

$md5->add($idnum);
$md5->add($GB->{FORM}->{"bbs"});
#$md5->add(substr($GB->{DATE},6,2));
my $md5datefile = "$GB->{PATH}/md5.cgi";
if(-e $md5datefile){
open(MD5FILE,"<$md5datefile");
my $md5line = <MD5FILE>;
close(MD5FILE);
my ($md5date,$md5number) = split /<>/,$md5line;
if($md5date eq $GB->{MD5DATE}){
$md5->add($md5number);
}else{
open(MD5FILE,">$md5datefile");
my $data = "";
sysopen(RANDOM, "/dev/random", O_READ) || die "cannot open /dev/random $!\n";
sysread(RANDOM, $data, 16);
close(RANDOM);
print MD5FILE "$GB->{MD5DATE}<>$data";
close(MD5FILE);
$md5->add($data);
}
}else{
open(MD5FILE,">$md5datefile");
my $data = "";
sysopen(RANDOM, "/dev/random", O_READ) || die "cannot open /dev/random $!\n";
sysread(RANDOM, $data, 16);
close(RANDOM);
print MD5FILE "$GB->{MD5DATE}<>$data";
close(MD5FILE);
$md5->add($data);
}
chmod(0777,"$md5datefile");
my $idcrypt = $md5->b64digest;
$idcrypt = substr($idcrypt,0,8);
0834動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/14 16:37:18ID:dKRMgTcD
こんな感じ?

use Digest::MD5;
use Digest::MD5 qw(md5_hex);

my $md5datefile = "$GB->{PATH}/md5.cgi";

if (!defined $FOX->{MD5NUMBER}) {
# まだ読み込まれていない
open(MD5FILE, "<$md5datefile");
my $md5line = <MD5FILE>;
close(MD5FILE);
($FOX->{MD5DATE}, $FOX->{MD5NUMBER}) = split(/<>/, $md5line, 2);
}

if ($FOX->{MD5DATE} ne $GB->{MD5DATE}) {
# 日付が変わったので作り直し
my $data = '';
sysopen(RANDOM, '/dev/random', O_READ) || die "cannot open /dev/random $!\n";
sysread(RANDOM, $data, 16);
close(RANDOM);
open(MD5FILE, ">$md5datefile");
print MD5FILE "$GB->{MD5DATE}<>$data";
close(MD5FILE);
chmod(0777, $md5datefile);
$FOX->{MD5DATE} = $GB->{MD5DATE};
$FOX->{MD5NUMBER} = $data;
}

#my $idnum = md5_hex($ENV{'REMOTE_ADDR'});
my $idnum = md5_hex($GB->{IDNOTANE});

my $md5 = Digest::MD5->new;
$md5->add(substr($idnum,-4));
$md5->add($GB->{FORM}->{"bbs"});
#$md5->add(substr($GB->{DATE},6,2));
$md5->add($FOX->{MD5NUMBER});
my $idcrypt = substr($md5->b64digest, 0, 8);
0836▲ 某ソレ511
垢版 |
04/12/14 17:22:01ID:VWWSBm/+
やぱ、プロセス最初の起動で
2つのデータを読み込む、あたりが一番楽だと思う。

と思ったら、>>834で十分だいじょぶっぽいか。
0838マァヴ ★
垢版 |
04/12/14 17:27:14ID:???
ああ、なつかしのID生成ルーチン(^_^;)
ID生成ルーチンのセオリーとしては
「ルーチンを公開しても、リモホやIPが推測できない」
です。
0840FOX ★
垢版 |
04/12/14 17:48:04ID:???
>>834 みたくして、

日付の変わる 24時のあたり大丈夫ですかねぇ

a) bbs.cgi は何十本も常駐している。
b) 寿命は現在10分である

というあたり、
0841
垢版 |
04/12/14 17:55:02ID:kwpC6qYO

 1)どこぞのexで実験する
 2)じっけん じっけん
 3)おやつは300円までですよ
0843FOX ★
垢版 |
04/12/14 17:59:13ID:???
んじゃ dsoで、そしてex9へ
0844未承諾広告※ ◆TWARamEjuA
垢版 |
04/12/14 18:27:42ID:mhtbHAbI
うぅむ、、、/dev/randomからの採取は、crondで毎日00:00に採取して、ファイルにして保存。
bbs.cgiで、1回取得しておけばSpeedyに引っかかって、ごっつぅえぇ感じになるかと♪
0846FOX ★
垢版 |
04/12/14 19:12:17ID:???
dso に入れてみたぞ

てすと てすとー

あんま自信ないので一日放置してみる < dso
0847FOX ★
垢版 |
04/12/14 19:15:35ID:???
コードをさらしておこう
0848FOX ★
垢版 |
04/12/14 19:18:22ID:???
$FOX 初期化時

$FOX->{$GB->{FORM}->{'bbs'}}->{MD5NUMBER} = &foxInitMD5id($GB->{FORM}->{'bbs'},$GB->{MD5DATE});
$FOX->{MD5DATE} = $GB->{MD5DATE};

bbs.cgi が呼ばれるたびに、

$FOX->{$GBX->{FORM}->{'bbs'}}->{MD5NUMBER} = &foxCheckMD5id(
$GBX->{FORM}->{'bbs'},
$GBX->{MD5DATE},
$FOX->{$GBX->{FORM}->{'bbs'}}->{MD5NUMBER},
$FOX->{MD5DATE});

ID 生成時

my $idcrypt = &foxGetMD5id(
$GB->{FORM}->{'bbs'},#bbs
$GB->{MD5DATE},#日付
$FOX->{$GB->{FORM}->{'bbs'}}->{MD5NUMBER},#
$GB->{IDNOTANE}#
);


0849FOX ★
垢版 |
04/12/14 19:19:05ID:???
sub foxCheckMD5id
{
my ($bbs,$md5date,$num,$dateFox) = @_;
if($dateFox eq $md5date)
{
return $num;
}
return &foxCreateMD5id($bbs,$md5date);
}
0850FOX ★
垢版 |
04/12/14 19:19:15ID:???
sub foxGetMD5id
{
my ($bbs,$md5date,$num,$tane) = @_;
my $id = "FOX";

use Digest::MD5;
use Digest::MD5 qw(md5_hex);

my $idnum = md5_hex($tane);
my $md5 = Digest::MD5->new;
$md5->add(substr($idnum,-4));
$md5->add($bbs);
$md5->add($num);
$id = substr($md5->b64digest, 0, 8);

return $id;
}
0851FOX ★
垢版 |
04/12/14 19:19:24ID:???
sub foxInitMD5id
{
my ($bbs,$md5date) = @_;
my $md5datefile = "../$bbs/md5.cgi";

if(open(MD5FILE, "<$md5datefile"))
{
my $md5line = <MD5FILE>;
close(MD5FILE);
my ($a, $b) = split(/<>/, $md5line, 2);
return $b;
}
return &foxCreateMD5id($bbs,$md5date);
}
0852FOX ★
垢版 |
04/12/14 19:19:36ID:???
sub foxCreateMD5id
{
my ($bbs,$md5date) = @_;
my $md5datefile = "../$bbs/md5.cgi";
my $data = "ABCD";

sysopen(RANDOM, '/dev/random', O_READ) || die "cannot open /dev/random $!\n";
sysread(RANDOM, $data, 16);
close(RANDOM);

open(MD5FILE, ">$md5datefile");
print MD5FILE "$md5date<>$data";
close(MD5FILE);
chmod(0777, $md5datefile);

return$data;
}
0855FOX ★
垢版 |
04/12/14 19:34:04ID:???
>>848のbbs.cgi が呼ばれるたびにの部分を変更

$FOX->{$GBX->{FORM}->{'bbs'}}->{MD5NUMBER} = &foxCheckMD5id(
$GBX->{FORM}->{'bbs'},
$GBX->{MD5DATE},
$FOX->{$GBX->{FORM}->{'bbs'}}->{MD5NUMBER},
$FOX->{MD5DATE});
$FOX->{MD5DATE} = $GBX->{MD5DATE};
0856FOX ★
垢版 |
04/12/14 19:34:27ID:???
あつっ

これじゃまずいか。。。
0857FOX ★
垢版 |
04/12/14 19:37:04ID:???
ん?
そうでもないか?

なんか今日は調子悪いなぁ
こんな日は飲んだくれるに限るか、

>>855 になってます
おかしいとこ指摘よろしく〜
0858FOX ★
垢版 |
04/12/14 19:55:01ID:???
ex9 にいれてみるー

今晩、観察しててね
0861動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/14 22:32:17ID:oYltBmUn
sub foxCheckMD5id
{
my ($bbs,$md5date,$num,$dateFox) = @_;
if($dateFox eq $md5date)
{
return $num;
}

my $md5datefile = "../$bbs/md5.cgi";
if(open(MD5FILE, "<$md5datefile"))
{
my $md5line = <MD5FILE>;
close(MD5FILE);
my ($a, $b) = split(/<>/, $md5line, 2);
if ($a eq $md5date) {
return $b;
}
}
return &foxCreateMD5id($bbs,$md5date);
}
0865動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/15 00:38:51ID:gwIGlcO3
ex9の格闘技板ですが、日付変わってもID変わってません。
0866FOX ★
垢版 |
04/12/15 05:37:18ID:???
さて
どこに隙があるんだ?

ex7は旧来のままなんで「気のせい」ということで
よろしく
0867動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/15 10:29:18ID:2HN9RP7L
>>866
どうせまたおまいがやったんだろ。
正直に言っちゃえよ、楽になるぞ。
0869
垢版 |
04/12/15 14:18:29ID:JexvqC49
 1)0時付近で変わっても気にしない
 2)自作自演昨日として宣伝
 3)Bananaはmaido3まで
0870FOX ★
垢版 |
04/12/15 14:22:30ID:???
>>861
ふむふむ

これにして今晩観察@ex9
0873某ソレ47 ◆ap/yuix/tw
垢版 |
04/12/15 17:33:45ID:9MQ67KRG
「IDは日付が変わるぐらいに変わります」でいいと思うけどな。
0874動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/15 17:44:55ID:w6sVvVK6
・FreeBSD 5.xなら/dev/urandomよりも/dev/randomのほうが良いかも

・種ファイルをhogehoge_date "+%Y%M%d"という感じであらかじめ23:55ぐらいに自動生成してもいいのかも
日付が変わる時のロックがいらない。

・ロックファイルを作るときに、openした直後にunlinkするというTipsがある。
プロセスが異常終了したらOSによりunlinkされるし、動作中はunlinkされないので便利。
ttp://ns1.php.gr.jp/pipermail/php-users/2004-November/024120.html
0879FOX ★
垢版 |
04/12/16 05:59:16ID:???
>>887
更新してからのタイムラグがあるという事ではなくて
実際に全然反映されていないですか?

もしタイムラグ(最大10分の設定)だったら
我慢できませんかねぇ?

全く反映されていない場合はなおすですー
でも今みると反映されているような、
0883 ◆MOMOwomoIk
垢版 |
04/12/16 08:29:08ID:BfLokOIn
887のレスに弊社の社運を感じる。
0885未承諾広告※ ◆TWARamEjuA
垢版 |
04/12/16 12:35:25ID:YtBnLjWr
>>884
65536種類に限定しているので、ごく希に違うホストなのに同じIDが出てアタフターな事が起こっているようなのです。
0886
垢版 |
04/12/16 14:01:03ID:jwRKr/sP
>885
もしIDが(1日,1板で)65536種類に限定されているとするならば、
2つの別々のホストから同じIDが出る確率は(1日あたり)次の通りとなる

住人数  確率
   2:  0.0015%
  50:  1.8523%
 100:  7.2784%
 150: 15.6881%
 200: 26.2109%
 250: 37.8447%
 300: 49.6112%
 400: 70.4809%
 500: 85.1681%
1000: 99.9529%

…………到底 'ごくまれ' とはいえないな
単に '気づかないことが多い' だけだったのか
0888FOX ★
垢版 |
04/12/16 14:20:53ID:???
ID 生成部変更するなら今がチャンス !!
この機械を逃がすと・・・ 二度と変更されないかもだ
0890某ソレ47 ◆ap/yuix/tw
垢版 |
04/12/16 14:25:05ID:WAdG0w73
perl分からないよう。
この際IDの桁数を増やすとかどうでしょ。
0891▲ 某ソレ511
垢版 |
04/12/16 14:56:50ID:wMv6nQa3
s/a/あ/g;

ごめんなさい冗談ですすいませんで
0894動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/16 17:46:11ID:LwK82nGE
>>ヤクザ
いや、同じになったら意味ないでしょ。凄いことになっちゃうぞ。

IDは12桁ぐらいがいいかなぁ。長すぎてもあれだし。
あとついでだから日付だけじゃなくて年月も入れようぜ。
0895FOX ★
垢版 |
04/12/16 17:52:30ID:???
ちなみに
毎月同じ日にちの日は同じIDになるという噂があるど、

本当なの?
そして、なぜそうなるの?
0899FOX ★
垢版 |
04/12/16 18:08:36ID:???
自分で書いたコードでさえ・・・なのに
いわんや・・・おや
0901動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/16 19:29:40ID:LwK82nGE
乱数の初期化が怪しいと思われ。
ちゃんとseed渡してるの?
(渡してないと毎回同じ乱数しか出ないかも)

と思ったら/dev/randomか・・・
0904未承諾広告※ ◆TWARamEjuA
垢版 |
04/12/16 22:39:23ID:YtBnLjWr
sub Make_ID($$$){
# 引数は・・・
# 板名
# time 値
# IPアドレス
# 返り血はID文字列
use Digest::MD5;
my ($BBS_name, $time, $IP_Address) = @_;
my $ID_2ch = Digest::MD5->new();
$ID_2ch->add(qx|uname -v|); # 鯖固有の文字列とか。
$ID_2ch->add($BBS_name); # 板のディレクトリ名ね。
$ID_2ch->add(int($time/86400)); # 純粋に日を基準単位に。
$ID_2ch->add($IP_Address); # 丸ごと豆乳。
return substr($ID_2ch->b64digest,-9,8); # ちょんぎるして戻るり。
}

・/dev/random にアクセスしないのでHDDにも優しいかな?
・uname -v の値を知っている人は、★の中の人「だけ」だと思うし。
・IDが被る確率は、遙かに少なくなっていると思うし。
・なんてったってアイドルだし(はぁと)
0906動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/16 22:49:36ID:45hy3iTA
>>904
それだとわからないのはuname -vだけ
(自分のIPやら日付やらpathやらはわかる)
だからIPからuname を総当りで求めて
検証が終わったらば他の人のIPも求まるだろう。
32ビット整数ぐらい割といける。

そのためのrandomですよ。
0908未承諾広告※ ◆TWARamEjuA
垢版 |
04/12/16 22:58:06ID:YtBnLjWr
>>906
> だからIPからuname を総当りで求めて
総当たりって!?うちの林檎機でもこれだけの文字列が出てくるけれども、、、

Macintosh:~ root# uname -v
Darwin Kernel Version 7.6.0: Sun Oct 10 12:05:27 PDT 2004; root:xnu/xnu-517.9.4.obj~1/RELEASE_PPC

あんぽんたんにでもわかりやすい解説キボンヌですm(_ _)m
0910動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/16 23:33:09ID:45hy3iTA
uname -v だと公開してしまうと
ある程度書式がありますよね。

FreeBSDなら
FreeBSD 5.1-RELEASE-p8 #0: Sat Sep 27 11:17:53 GMT 2003
見たいな感じで

頭から言うと
FreeBSDは変わらないし、
バージョンだって10.20とかないし、
RELEASEでないとしてもSTABLEとかあるていどきまってるし、
年月日では
月はAprとかDecとかしか入らないとか
曜日はSunとかMonだとか
などと考えると組み合わせの数は現実的になりますよ。
そうするとOS頻繁に変えるとかいうんでなければ解析は可能でしょう。

んでunameが割れると今度はそっちにあててIP解析もできるんじゃないかなぁと。

っと長い割には判りにくいかもです。すいません。
0914動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/16 23:52:59ID:JGTpjxlP
>911
unam -a は、かなりの頻度で後悔されてます。

http://www6.big.or.jp/~beyond/bbsnews/proxy/operate/1093068260/
の215とか
0915動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/17 00:31:03ID:hwJlyrsu
uname -aなんてホストごとの有効な違いが40bitぐらいしかないんじゃないの?

1024bitぐらい豪快にランダムのシードを用意しないとダメ。
パソコン数台で解析できる。
0917FOX ★
垢版 |
04/12/17 01:16:42ID:???
そもそも現在のやり方が決まった経緯は知っておいてくださいー
0919マァヴ ★
垢版 |
04/12/17 01:37:16ID:???
おいらかな?(^_^;)もしかして
0920マァヴ ★
垢版 |
04/12/17 01:41:24ID:???
1 旧IDはIPアドレスの特定が結構できてしまった
2 そこで新しくID生成ルーチンを作ろうと思った
3 しかしおいらにはそのスキルはなかった(^_^;)
4 どうせならルーチンを公開しても耐えられるもののほうがいいわけで・・・
5 スキルのある人よろしく・・・と公募した(ちょうどこのスレッドの展開みたいなもんですな(^_^;))
6 で、32bit総当り検索に耐えるために
  @非公開の鍵を使うことで、推定を難しくした(しかし、これだけではちと不安)
  AIPアドレスが違っても、ある程度の数の同じIDが出るようにした(つまりIPアドレスは特定不能)
って感じだったように覚えてます(^_^;)

って、そういう話じゃなくて?(^_^;)
0922マァヴ ★
垢版 |
04/12/17 01:55:47ID:???
>921
そゆことです(^_^;)なのである程度の重複は避けられないんだな。
0924動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/17 01:58:39ID:dhpgCm/v
ある程度っつっても相当稀なわけだし、構わないでしょ。
要は毎回呼ばれるような無駄な負荷を無くすのが今回の目的?
0925マァヴ ★
垢版 |
04/12/17 02:00:22ID:???
>924
多分・・・
1 ファイルオープンがもったいない(負荷軽減)
2 異月同日に同じIDが出てしまうらしいバグ対策
の2点かと(^_^;)
0928マァヴ ★
垢版 |
04/12/17 03:35:04ID:???
当時のおいらってなんか頭の回転よかったらしい(^_^;)
今や何を話しているのか理解できん
0929動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/17 04:33:43ID:PSEHRzSe
ひょっとして今起こっている「日付が変わってもIDが変わらない(ことがある)」ってのは
「異月同日に同じIDが出てしまうらしいバグ」の同工異曲かな?
今のIDルーチンには $md5->add(substr($DATE,6,2)); が入ってないから。
レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況