2chの書き込み規制のしくみを調べてみた
スレを読み進めていくと、どうやら
206.223.144.0/20
207.29.224.0/19
からのTCPポート
443
995
1723
へのアクセスをフィルタすれば書き込めるらしい。
書き込むたびにTCPポートスキャンをしているの?と興味が湧いたので調べてみた。
ちなみに元記事には情報源スレッドのURLが記載されているが、読み方がわからなかったので読んでない。
Twitterに全部書いたので再掲
tcpdumpで確認したのだが、上記の443、995、1723以外は確認できなかった。2,3回しか試してないので実際には他のパターンもあるかもしれない。2ch側からTCPポートスキャンがされる件を検証してみた。「書き込む」のボタンを押したらすぐにポートスキャンきた。207.29.225.225からTCPポート443、995、1723にSYNきた。クッキーを持ってない場合に届く模様。クッキー削除したらまたきた。
— └('-'└)└)└)<matsuu (@matsuu) November 2, 2013
クッキーを食わせた状態でもう一度書き込んだ場合はポートスキャンは来なかった。
書き込みテストは「2ch 書き込み テスト」でググって出てきたここに。
書き込みテスト 専用スレッド637
書き込みの作法を知らないのでよくわからなかったんだけども。
ポートの待ち受けはPerlでIO::Socket::INETを使ってテキトーに書いた。2chの続き、各ポートを待ち受けて書き込みしてみたところ、Request Time-outになった。TCPのハンドシェイクのあと即FIN-ACK送ってるのでポートが空いてるかのみ確認してる。443→995→1723の順でポートスキャンしてて、どれか1つでも空いてたら拒否してる模様
— └('-'└)└)└)<matsuu (@matsuu) November 2, 2013
#!/usr/bin/perl use strict; use warnings; use IO::Socket::INET; my $s = IO::Socket::INET->new(Listen => 5, LocalPort => $ARGV[0], Proto => 'tcp', ReuseAddr => 1) or die $!; $s->listen; while(my $c = $s->accept) { while(my $q = $c->getline) { print $q; $c->print($q); } $c->close; } $s->close;
3ハンドシェイク後にFIN-ACKをすぐ投げてるので何も出力されなかった。