#!/usr/bin/perl $WGET = "wget"; $SCRIPT_NAME = $ENV{'SCRIPT_NAME'} || $0; $CGI = "file://$SCRIPT_NAME"; $_ = $QUERY_STRING = $ENV{"QUERY_STRING"}; $UserAgent = "Monazilla/1.00 (w3m/2ch.cgi)"; if (/subback.html$/) { &subback(); exit; } s@/(\d+)(/([^/]*))?$@/$1@ || exit; my $datnum = $1; $label = $3; $cgi = "$CGI?$_"; s@^http://([^/]+)/test/read.cgi/([^/]+)/@$1/$2/dat/@ || exit; $subback = "$CGI?http://$1/$2/subback.html"; $bbs = $2; if ($ENV{REQUEST_METHOD} eq "POST") { &post(); exit; } $_ .= ".dat"; $dat = "http://$_"; $tmp = $ENV{"HOME"} . "/.w3m2ch/$_"; $dat =~ s/([^\w\/.\:\-])/\\$1/g; $tmp =~ s/([^\w\/.\:\-])/\\$1/g; ($dir = $tmp) =~ s@/[^/]+$@@; $cmd = "mkdir -p $dir; $WGET -c -U \"$UserAgent\" -O $tmp $dat >/dev/null 2>&1"; system $cmd; $lines = (split(" ", `wc $tmp`))[0]; $lines || exit; @ARGV = ($tmp); if ($label =~ /^l(\d+)/) { $start = $lines - $1 + 1; if ($start < 1) { $start = 1; } $end = $lines; } elsif ($label =~ /^(\d+)-(\d+)/) { $start = $1; $end = $2; } elsif ($label =~ /^(\d+)-/) { $start = $1; $end = $start + 100 - 1; } elsif ($label =~ /^(\d+)/) { $start = $1; $end = $1; } else { $start = 1; $end = $lines; } $head = "■掲示板に戻る■\n"; $head .= "全部\n"; for (0 .. ($lines - 1) / 100) { $n = $_ * 100 + 1; $head .= "$n-\n"; } $head .= "最新50\n"; print <) { s/\r?\n$//; ($name, $mail, $date, $_, $title) = split(/\<\>/); if ($i == 1) { if (!$title) { print < $QUERY_STRING EOF unlink($tmp); exit } print <$title $head

$title

EOF } if ($mail) { $name = "$name"; } s@http://ime.nu/@http://@g; s@(h?ttp:)([#-~]+)@"$1$2"@ge; s@(ftp:[#-~]+)@$1@g; s@= $start && $i <= $end)) { print <$i :$name:$date
$_

EOF } $i++; } print <


名前: E-mail (省略可) :
EOF sub link { local($_) = @_; if (m@/test/read.cgi/@) { return "$CGI?$_"; } return $_; } sub subback { $dat = $_; s@http://@@ || exit; $tmp = $ENV{"HOME"} . "/.w3m2ch/$_"; $dat =~ s/([^\w\/.\:\-])/\\$1/g; $tmp =~ s/([^\w\/.\:\-])/\\$1/g; ($dir = $tmp) =~ s@/[^/]+$@@; $cmd = "mkdir -p $dir; $WGET -O $tmp $dat >/dev/null 2>&1"; system $cmd; print <) { if (/; $QUERY_STRING =~ m@^http://([^/]+)@; my $host = $1; my $sock = IO::Socket::INET->new("$host:80") or die; # retrieve posting cookie; this may not work print "Content-Type: text/html; charset=Shift_JIS\n\n"; print $sock "HEAD /test/bbs.cgi HTTP/1.1\n", "Host: $host\n", "Connection: keep-alive\n", "\n"; my $posting_cookie = undef; while (<$sock>) { print if ($debug); s/[\n\r]+$//; last if (/^$/); if (/^set-cookie:.*(PON=[^;]+)/i) { $posting_cookie = $1; } } #$sock = IO::Socket::INET->new("$host:80") or die; my $submit = "POST /test/bbs.cgi HTTP/1.1\n" . "Host: $host\n" . "Accept-Language: ja\n" . "User-Agent: $UserAgent\n" . "Referer: $QUERY_STRING\n" . "Cookie: $posting_cookie; NAME=nobody; MAIL=sage\n" . "Content-Length: " . length(join("", @POST)) . "\n" . "\n@POST"; print $sock $submit or die; print "\n-- POSTed contents --\n${submit}\n-- POSTed contents --\n" if ($debug); my $chunked = 0; while (<$sock>) { s/[\n\r]*$//; last if (/^$/); $chunked = 1 if (/^transfer-encoding:\s*chunked/i); } my $post_response = ""; while (<$sock>) { if ($chunked) { s/[ \r\n]*$//; my $len = hex($_); $len > 0 or last; read($sock, $_, $len); <$sock>; #skip empty line at the end of chunk. } $post_response .= $_; } $post_response =~ s///im; print $post_response; exit; }