こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PerlでURLにアクセスして、その内容をファイルに落とせますか?

知人から以下のような相談があったのですが、少し急ぎで困っています。

その知人が働くNGO団体で取引のある1万近い個人・法人のデータベースに関することなのです。

以前はその団体にUNIXマシンの管理者が一人いて、その人がUNIXマシンでデータベースを管理していたのだそうです。が、その管理人が亡くなって、誰もそのマシンにログインできないとのこと。でも、マシン自体は普通に動いています。

で、そのマシンはネットでつながっていて、外部から

https://www.なんちゃら.ne.jp/なんちゃら/なんちゃら.cgi?1
https://www.なんちゃら.ne.jp/なんちゃら/なんちゃら.cgi?2
https://www.なんちゃら.ne.jp/なんちゃら/なんちゃら.cgi?3


という感じでアクセスすると、データベースの会員番号1番、2番、3番の人のデータがHTMLで個人情報が表示されるような仕組みになっています。
(IDとパスワードの入力は必要ですが、1回入力すれば聞かれないみたいです)

そこで、外部のマシンから、Perl(もしくは別のスクリプト言語でもいい)のスクリプトを実行することで、この1万人近いデータベースを吸いだせないか、ということなのですが、簡単なことなのでしょうか?
ざっくりどんな感じのソースになるのかお教えいただければ助かります。

そのNGO団体のパソコンでPerlが動く環境ですので、Perlを勉強してソースを書けるように頑張って勉強しようと思ったのですが、ちょっと急ぎなのでヒントだけでも頂けたらと思った次第です。
よろしくお願いします。

投稿日時 - 2009-02-04 12:51:08

QNo.4688423

すぐに回答ほしいです

質問者が選んだベストアンサー

一番良い方法はCGIのスクリプトの中身を調べて、
プログラムの中身を把握することだと思います。
10000件のデータを保管しているとのことなので、ファイルなのか、DBなのか
わかりませんが、通常きちんとしたフォーマットに従って処理されていると思います。
事情があって、サーバーにログインできずにCGIソースを閲覧する事ができないということであれば、対応は以下のとおりだと思います。
■シェル等を使い、データをHTML形式でダウンロード
以下の一行で1万件のデータ自体はファイルに取り出せると思います。
for x in `seq 1 1000`;do wget --output-document=$x http://example.com/exmaple.cgi?$x;done;

■ダウンロードしたファイルの解析
ダウンロードしたファイルの解析については、出力される内容に依存しますので、どうすればというのはなんとも言えないですが、
HTML::Parser などを使うと比較的簡単に処理できると思います。

仕事半分、趣味半分でそうしたことをやってますので、
自分で行う時間がないのであれば、下記のフォームからでも
ご相談いただければと思います。
http://e-uematsu.net/php/form.php

投稿日時 - 2009-02-07 00:38:23

お礼

ありがとうございました。
実はいろいろ事情がありまして、そのunixマシンの隣に設置されているWindowsマシンからしかアクセスができない状況だったのですが、どうにかPerlでデータを吸いだせました。
ファイルの解析はこちらでどうにかできそうです。

投稿日時 - 2009-02-10 08:41:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

普通LWP
でもシェルスクリプトでwget回す方が簡単

自分が頼まれたら電源落としてHDD取り出すのが一番速いけども

投稿日時 - 2009-02-04 13:38:09

お礼

短いながら、参考になりました。ありがとうございました。
HDDの取り出し、は考えてもいなかったのですが、そんな手段もあるのだなと勉強になりました。

投稿日時 - 2009-02-10 08:42:28

ANo.2

なんちゃら.cgiを解析するのが一番早いと思います。

もしくは、
sh なんちゃら/なんちゃら.cgi?n >> ファイル
みたいな感じのを繰り返すループを組めば取り出せるのではないでしょうか。

投稿日時 - 2009-02-04 13:35:10

お礼

ありがとうございます。
.cgiを外部マシンから解析するのは、ちょっと僕の手には負えませんでした。
unixマシンが使える環境ならいいのですが…。

投稿日時 - 2009-02-10 08:44:02

ANo.1

Perl から Web サーバーへのHTTPアクセス、確かに出来ますが、私が知ってるのは Socket.pm を使う方法で、急造プログラマにできるかと言われるとかなり心配です。

Socket あるいはもっと簡単な方法での HTTPアクセスに成功したとしても、データを漏れなく取得する工夫やそれを別マシンのデータベースに流し込むのはより高スキルが要求されそうに思います。

失礼ながら、引き受けてもらえる技術者を探される方が良くないでしょうか。 そっち方面に明るい技術者が味方につけば、HTTPアクセス以外にどんなアプローチがあるかも相談できると思います。

あ、kagichan さんがたまたま Perl を知らないだけで他の言語(C とか)でのシステムプログラミングには熟練されてる方なら、私の書き込みは忘れてください。

投稿日時 - 2009-02-04 13:22:48

お礼

ありがとうございます。
Socket.pmは結局使えませんでした。すみません。
当方、20年~15年ほど前にとある企業にて、Cで組み込み機器の開発の
仕事をしていましたが、どうもネットワークとかそういう話には弱いのです
(そういう意味ではほとんど初心者です)。

投稿日時 - 2009-02-10 08:46:51

あなたにオススメの質問