68user's page 掲示板

Prev< No. 2961〜3000> Next  [最新発言に戻る] [過去ログ一覧]
No. 2961 # 1202 2002/12/02 (月) 14:50:39
初めまして。初心者なので質問自体が意味不明かもしれませんが、
システムコールでCPU使用量や、ディスク使用量などを取得する方法を教えてください。dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が違ってくるので、、、ちなみに使用言語はC、OSはLinuxでお願いします。

No. 2962 # 68user 2002/12/02 (月) 15:20:34
>>2961 1202
> ディスク使用量
statfs(2), fstatfs(2)

> CPU使用量
プロセス単位の情報かシステムの情報を取るのかわかりませんが、
Linux ならどちらにせよ /proc 直読みなのかな? あるいは /proc を
読むような API が用意されているかもしれませんが、わかりません。

後は man -k stat、man -k cpu、man -k disk などを活用してください。

No. 2963 # 1202 2002/12/02 (月) 15:47:40
>>2962 68user
ありがとうございます。
早速試してみます。

No. 2964 # kiki 2002/12/02 (月) 20:25:54
kikiと申します.
68user様,先日はお世話になりました.

お聞きしたいことがあります.

私は今,シェルでpsコマンドを打ち込んだら
標準出力で"psコマンドがうちこまれました."
と出力させるプログラムを作ろうとしています.

この時に,シェルからpsコマンドが打ち込まれたかどうかを
判定するプログラムに,シェルで打ち込まれたコマンドを渡して
判定させたいのですが,このような事は,プロセス間通信や
デーモンを使うのでしょうか?

皆様のアドバイスをよろしくお願い致します.

また,簡単なデーモンのソースがあるページや,
デーモンを作るにあたってやくだつページを
ご存知でしたら教えてください.

よろしくお願いします.

No. 2965 # 68user 2002/12/03 (火) 01:16:24
>>2964 kiki
前にも書きましたが目的は何ですか? kiki さんの質問は
いつも情報量が足りないと思います。

目的を書かないから前提条件がわからない。前提条件が
わからないから、例えば
    「利用者にばれてもいいのか」
    「シェルのソースをいじるというのはアリなのか」
などもわからない (当然その答えによって解は異なります)。

> また,簡単なデーモンのソースがあるページ
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC16 など。

>>2961 1202
> dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が
> 違ってくるので、、、
ちなみに僕ならば面倒なので GNU df を Solaris に
入れます (仕事であれば特に)。

No. 2966 # kiki 2002/12/03 (火) 02:32:54
2965>>68user様

毎回すみません.

目的は前回の質問でふれたsuトロイの痕跡の検出なんです.
suトロイも本物のsuも.bash_historyのなかにコマンドが残りますが,
/var/log/messageでは,本物のsuの痕跡しか残らない事を利用して,
suトロイをリアルタイムに近い形で検出できないか?と考えたのです.

そこで,シェルからsuコマンドが打ち込まれたかどうかを
判定するプログラムに,シェルで打ち込まれたコマンドを渡して
判定させ,suとコマンドが 実行されているようならば,
/var/log/messageをみて,suの痕跡があるかどうかを調べれば
検出できるだろうと考えたのです.

とりあえずsuコマンドが打ち込まれたかどうかを判定する
部分をまず作ろうと思いましたが,この時にプロセス間で
データのやりとりが必要になったり,デーモンも使うのかな
と思い,質問させていただきました.

「利用者にばれてもいいのか」
    >はい,ばらせる事ができるならば是非そうしたいです.

「シェルのソースをいじるというのはアリなのか」
    >はい,ありです.

毎回わかりづらい書き込みをして申し訳ありません.
ご教授をお願い致します.

No. 2967 # 68user 2002/12/03 (火) 13:04:01
>>2966 kiki
今度は検出なわけですね?

> /var/log/messageでは,本物のsuの痕跡しか残らない事を利用して,
syslog(3) や logger(1) を使えば誰でも su と同様にログに記録する
ことはできますので、これだけでは正確に判断できません。

では他に判断する方法はあるかというと、決定的なものはないです。
結局は「何をもって本物と判断するか」「何を持って悪意のあるプロ
グラムと判断するか」に帰着するわけで。興味があればアンチウィルス
ソフトがウィルスを検出する手段を調べてみるとよいでしょう。

で、それとは別に「どうやって su がタイプされたことを検出するか」という
話ですが、ウィルスやトロイの木馬にやられるときというのは、つまるところ
「プログラムを実行したとき」なわけで、exec(2) の実行直前に su を実行
しようとしているかどうか、というチェックをすればよいでしょう。

プロセス間通信やデーモンは「なぜそれを使う必要があるか」を説明でき
ないなら、使う必要はないということです。


別の解としては、システムコールの発行を hook して安全性をチェック、
というのもありますが、UNIX でこういうのってできるのかなーと思って
調べてみたら、なんかできるようですね。
      http://www.caj.co.jp/support/etrustac_faq.htm
      Q6: eTrust Access ControlのSoft Hook技術とは何ですか?
カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を
置き換えているのか…(できるのかな?)

# Windows なら SetWindowsHookEx で簡単なんですけど。

No. 2968 # kiki 2002/12/03 (火) 17:53:30
>>2967 68user様
お返事ありがとうございます.

>syslog(3)やlogger(1) を使えば誰でも su と同様にログに記録することはできます

これはsuトロイを実行した時にも/var/log/messageに本物のsuの認証失敗のメッセージ
を残せる,という事なんですよね.これは,suトロイ内でsyslog()関数などを使って,
syslogdにメッセージを渡すという事なのでしょうか?


P.S.
システムコールで見分ける,ですね.
確かに,suトロイと本物のsuだとやっている事はちがうから
見分けられるかも知れませんね.アドバイスありがとうございます.

No. 2969 # kiki 2002/12/04 (水) 21:25:13
>>2967 68user様

何回も申し訳ありません.kikiです.

>exec(2)の実行直前にsuを実行しようとしているかどうか、というチェックをすればよいでしょう。

これは,システムコールのチェックを自動化させて行なえばよい,
という事なのでしょうか?

基本的な事で申し訳ありません.

No. 2970 # ふくし [E-mail] 2002/12/05 (木) 18:47:37
いつもすいません、質問です。
以下のようなプログラムを Perl 5.8/FreeBSD 2.2.8 release で書きたいです。

カンタンにいうと、入れ子になったタグで囲まれた部分だけを
別ファイルに抜き出し、元ファイルからは削除する、です。

順序を保存して抜く方法と、
保存しないで抜く方法とあると思いますが、
どちらでもかまいません。
(前者の方がいいかなぁ、、)

入力ファイル:

out1
<tag a>
  in1
    <tag b>
        in2
        <tag c>
            in3
        </tag>
        in4
    </tag>
  in5
</tag>
out2
<tag d>
  in6
    <tag e>
        in7
    </tag>
  in8
</tag>
out3
<tag f>
  in9
</tag>
out4

出力ファイル例1:(順序を保存して抜く)

ファイルA:(タグで囲まれた部分のみを抜いたもの)
<tag a>
  in1
    <tag b>
        in2
        <tag c>
            in3
        </tag>
        in4
    </tag>
  in5
</tag>
<tag d>
  in6
    <tag e>
        in7
    </tag>
  in8
</tag>
<tag f>
  in9
</tag>

ファイルB:(ファイルAで抜いた残り)
out1
out2
out3
out4

出力ファイル例2:(順序を保存しないで抜く)

ファイルA:(タグで囲まれた部分のみを抜いたもの)
        <tag c>
            in3
        </tag>
    <tag b>
        in2
        in4
    </tag>
<tag a>
  in1
  in5
</tag>
    <tag e>
        in7
    </tag>
<tag d>
  in6
  in8
</tag>
<tag f>
  in9
</tag>

ファイルB:(ファイルAで抜いた残り)
out1
out2
out3
out4

よろしくお願いします。

No. 2971 # ふくし [E-mail] 2002/12/05 (木) 20:32:07
補足です。
この tag というのは全部同じタグです。
ただオープンタグにかかれている a, b, ... という
アトリビュートが全部違います。

No. 2972 # ふくし [E-mail] 2002/12/05 (木) 23:16:22
さらに補足。(俺って説明下手だな、、;;;
ファイルには <tag> 以外のタグも存在します。
<aaa ???>〜</aaa>、<bbb ???>〜</bbb> などです。
その中で下の処理の対象になるのが <tag> だけということです。
<tag ???>〜</tag> の中に <xxx ???>〜</xxx> がある場合は、
それも抜いて書き出します。
問題の定義もなかなか奥が深い。

No. 2973 # 68user 2002/12/06 (金) 00:21:32
>>2969 kiki
シェルって何をしているか知っていますか? 簡単に言うと、ユーザが
入力した文字列を解析し、execve(2) を実行することです。

シェルのソースをいじっていいのならば、execve(2) を発行している
部分を探して、そこで su を実行しようとしているかどうかのチェックを
行えばよいのでは、という話です。

>>2970 ふくし
入力が XML なら、
    http://member.nifty.ne.jp/hippo2000/perltips/xml/dom.htm#XML_DOM_NODE
の removeChild で一発なような気がします。

XML でないなら構文解析してスタックに積んで…といきたいところですが、
僕は軟弱なので
    - s|<tag .*?>.*?</tag>||
    - 削除したのが足りなかった
            (例えば <tag a>in1<tag b>in2<tag c>in3</tag> しか取れなかった)
        なら、追加であと 2個の </tag> をするため s|.*?</tag>.*?</tag>|| とする。
とします。

No. 2974 # 68user 2002/12/06 (金) 01:04:43
>>2967 68user
> 別の解としては、システムコールの発行を hook して安全性をチェック、
> というのもありますが、UNIX でこういうのってできるのかなーと思って
> 調べてみたら、なんかできるようですね。
>   http://www.caj.co.jp/support/etrustac_faq.htm
>     Q6: eTrust Access ControlのSoft Hook技術とは何ですか?
> カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を
> 置き換えているのか…(できるのかな?)

最近これに激しく惹かれているのですが、libc 置き換えで可能なんでしょうか。
詳しい人がいらっしゃったら教えてください。

全てのシステムコールは
      http://home.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/i386/sys/syscall.S?rev=1.8
を経由するんじゃないかと思っているのですが、もしそれが正しいなら
ここにチェック機能を入れた libc を用意して置き換えるか、あるいは
LD_PRELOAD で既存 libc に置き換えることは可能なのかなぁ。

どちらにせよアセンブラができないので、
      http://www.ascii.co.jp/books/detail/4-7561/4-7561-0213-1.html
を買って勉強かな…。

No. 2975 # ふくし 2002/12/06 (金) 10:29:54
>>2973 68user
さん、ありがとうございます。
まさに xml で、そのパッケージすごく便利そうなんですが
使い方がよくわかりません ;;;
でもべっかいの方でなんとなくできたのでもう少しまとめてから公開します。

No. 2976 # 68user 2002/12/06 (金) 11:02:25
>>2975 ふくし
別解でがんばるよりは、早めに XML::DOM の使い方を覚えた方が
幸せ度が高いかと。

# 僕は使ったことないですけど。

No. 2977 # UMA 2002/12/06 (金) 13:15:47
通りすがりのものですが・・・

システムコールをhookして安全性を云々というのは、
たとえば
        Systrace - Interactive Policy Generation for System Calls
        http://www.citi.umich.edu/u/provos/systrace/
こういったもののことでしょうか?
(OpenBSD, NetBSD にはマージされています)

No. 2978 # UMA 2002/12/06 (金) 13:17:35
X68000の、内臓フォントを利用するインターフェースを調べています。
フリーで有用な文書がありましたら教えていただけないでしょうか?
>識者

なお当方X68000に関する知識は皆無でございます。

No. 2979 # KENT1 2002/12/06 (金) 16:14:05
>>2960 68user様 報告が遅れまして申し訳ありません。
/usr/bin/time 実行コマンド >& 出力ファイル
を実行した結果うまくいきました。ありがとうございました。

No. 2980 # ふくし [E-mail] 2002/12/06 (金) 17:05:36
タグのパースの件です。
別解ですが、会社の若い者が作ったプログラムが無事動きました。

で、せっかくなので XML::DOM を入れようとしたら、
XML::Parser を入れよと言われたので、
XML::Parser を入れようとしたら、
expat を入れよと言われたので、
expat の tar.gz を解いて ./configure して Makefile を
#prefix = /usr/local
prefix = /henna_directory
として make したら(ぼくは管理者でないので)、
  gcc: unrecognized option `-R/henna_directory/lib'
といわれました。ここで止まっています。
ちなみに /henna_directory/lib というディレクトリはあります。
(ついでにいうと、bin も include も man も)
待て次号。;;;

No. 2981 # 68user 2002/12/06 (金) 22:59:42
>>2977 UMA
> システムコールをhookして安全性を云々というのは、
はい、そういうものを念頭に置いていました (が、ユーザランドで
できたらいいなと。無理なのかな)。

Systrace の存在は知りませんでしたが、これはとてもいいですねぇ。
素晴らしいです。

>>2978 UMA
68user's page で X68000 の疑問が解決したことは一度もなかったりします。
インタフェースって API ですか? (ではなさそうな気がしますが)。僕が記憶に
頼って書くと多分間違っているので、X68000 エミュレータ関係の掲示板で
聞くのが早いと思います。

>>2980 ふくし
まーいろいろありますが、がんばってインストールしてください。

あと、libwww-perl あたりもいれなきゃいけないのが perl の XML
モジュールのうざいところ。

No. 2982 # kiki 2002/12/07 (土) 02:16:59
>>2973 68user様
お返事ありがとうございます.kikiです.

丁寧なご説明ありがとうございました.
おかげで理解できました.ありがとうございます.

No. 2983 # 68user 2002/12/08 (日) 06:01:43
いつも忘れて調べなおすはめにおちいるのでここにメモメモ。

TeraTerm 経由の mule などで PageUp が効かない場合、
Windows\Program Files\TTERMPRO\KEYBOARD.CNF の
    Remove=329
を ; でコメントアウトし、その下に
    User1=329
を追加。さらにファイルの一番最後に
    User1=329,0,$1B[5~
を追加。

って、ちょっと検索してみたら、
    http://phe.phyas.aichi-edu.ac.jp/~cyamauch/mule.html
の対処と全然違ってますな。なんでアレで PageUp できるんだろう。

No. 2984 # SIGNAL 2002/12/12 (木) 18:51:54
OS: Solaris 2.5.1
プロセスの通知にシグナルを使っています。
これまで、SIGUSR1とSIGUSR2で間に合っていたのですが、
今回もう一つパターンの追加(SIGUSR3?)を行いたいのです。
そこで、質問なのですが
<signal.h>にシグナルを追加できるのでしょうか?
また、出来るとしたら注意しないといけない点や
影響を及ぼす範囲を教えて下さい。

よろしくお願いします。

No. 2985 # 68user 2002/12/13 (金) 12:45:23
>>2984 SIGNAL
シグナルの追加はカーネルを書き換えないと無理です。

シグナル以外の方法 (パイプ・共有メモリなど) で情報のやりとり
をするのが正解でしょう。

と偉そうなことをいってますが、シグナルが足りず SIGXCPU を
使って逃げたことはあります。

No. 2986 # koko 2002/12/16 (月) 14:34:40
親プロセスでforkした子プロセスの終了状態(終了コード)を、親プロセス
が認識する方法があれば情報提供をお願いします。

・親プロセスはwaitしません。
・子プロセスは同じものが複数生成されます。(順次生成)

ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ
や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、子プロセスにはできる限り修正を加えない方法を探しています。
理想は子プロセスの終了時にイベントが発生し、waitのように変数に結果
が格納されるようなものです。

No. 2987 # 68user 2002/12/18 (水) 08:51:46
>>2986 koko
> ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ
> や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、
の方法を取らないのであれば、無理なんじゃないでしょうか。

No. 2988 # hsj 2002/12/18 (水) 14:58:58
>>2986 koko
> ・親プロセスはwaitしません。
親でSIGCHLDを拾ってwaitpid()のオプションWNOHANGで
チェックするのもダメですか?
--- snip ---
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/wait.h>

void handler(int sig)
{
        int pid,status,code;

        while((pid=waitpid(-1,&status,WNOHANG))>0)
        {
                if(WIFEXITED(status))
                {
                        code = WEXITSTATUS(status);
                        printf("child process:[%d] was exited with code:[%d]\n",pid,code);
                }
        }
}

int main(int argc,char *argv[])
{
        int i,pid,code;
        char buf[16];
        struct sigaction sa;

        if(argc>1)
        {
                code = atoi(argv[1]);
                srand(code+time(0));
                sleep(rand()%10);
                return code;
        }

        memset(&sa,0,sizeof(sa));
        sa.sa_flags = SA_NOCLDSTOP;
        sa.sa_handler = handler;
        sigaction(SIGCHLD,&sa,0);

        for(i=0;i<10;i++)
        {
                if((pid=fork())<0)
                {
                        perror("fork");
                        return -1;
                }
                if(pid)
                        continue;
                sprintf(buf,"%d",i);
                if(execl("./a.out","./a.out",buf,0)<0)
                {
                        perror("execl");
                        return -2;
                }
        }
        for(;;)
                sleep(1);
        return 0; /* never reaches */
}
--- snip ---
かなり適当ですが。

No. 2989 # koko 2002/12/19 (木) 08:42:04
>>2988 hsj
他のHPを調査をしている中で「waitpidで子プロセスの終了コードが取得できれば解決できそうだ。」というのは私も感じました。
試してみたいと思います。

>>2987 68user
今回は、既存の子プロセス側のソースコードにできるだけ手を入れないという条件があるのですが、良い案がない場合にはやはりパイプを使用する事に
なるかと思います。

ご回答頂き、ありがとうございました。

No. 2990 # 68user 2002/12/20 (金) 02:06:37
>>2986 koko
> ・親プロセスはwaitしません。
ってのは親プロセスにも手を入れたくないという意味かと思った
のですが、wait でブロックさせたくないという意図だったのですね。
読み違えておりました。

No. 2991 # Japper 2002/12/20 (金) 02:55:20
こんにちは
質問があってきました

Perlを使っていると
system関数やexec関数を使うようになりました
便利でとてもよいのですが
Root権限でコマンドが実行されているような気がします
くわしくはまだ確認していません。
また、CGIでファイルマネージャーを使っていますが
これも同じようにパスワードファイルなどを開かれるという欠点があります
全ディレクトリやファイルのパーミッションを000にすることはもちろんできませんし
一部だけのパーミッション設定もだめです
例)/homeを000にするが/home/userが777だとアクセスされてしまう

これらのことからセキュリティーホールとなっていてとても不安です
これらについての対処法はなにかないでしょうか?

No. 2992 # 68user 2002/12/20 (金) 03:08:40
>>2991 Japper
> Root権限でコマンドが実行されているような気がします
perl スクリプト中で
      print "$<\n";
      print "$>\n";
の結果のいずれかが 0 なら root 権限を得ています (が、おそらくは
勘違いではないかと思います)。

> これも同じようにパスワードファイルなどを開かれるという欠点があります
書きかけですが、
      http://x68000.startshop.co.jp/~68user/webcgi/cryptogram.html
が参考になるかもしれません。

No. 2993 # ruku [E-mail] 2002/12/20 (金) 13:27:36
初めまして!YAHOO!オークションのログインをプログラムで実行したいのですが、上手くいきません。ブラウザでの通信のlogをとり、プログラムを組んでいたのですが、どうしてもPOSTした後の3種類のクッキーがとれ
ないのです。上手くいけば下のような3種類のクッキー(個人情報なので***になっています)が返されるのですが、

・・・・・・・・・・ブラウザのlog・・・・・・・・・
<ブラウザのPOST>
POST /config/login?5934sjuoe8ci4 HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: login.yahoo.co.jp
Content-Length: 259
Pragma: no-cache
Cookie: B=cv85agsv02md9&b=2
Connection: keep-alive
Browser reload detected...
Posting 259 bytes...
.tries=1
.src=auc
.last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc
promo=
.intl=jp
.bypass=
.partner=
.u=cq4ce2ov02mdi
.v=0
.fUpdate=Y
hasMsgr=0
.chkP=Y
.done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus
login=********
passwd=***********

<レスポンス>
HTTP/1.1 302 Found
Date: Thu, 19 Dec 2002 05:31:58 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie:****
Set-Cookie:****
Set-Cookie:****

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

このセッションがどうしても上手くいかず、3種のset-cookie
が取得できないのです。大変お忙しい中恐縮ですが、もしよろしければ、アドバイスをよろしくお願いします。とても見せれるプログラムではありませ
んが、下記に示します。

try{
    URL u = new URL("http://login.yahoo.co.jp/config/login?5934sjuoe8ci4");
    URLConnection uc = u.openConnection();
    uc.setRequestProperty("Cookie:","B=cv85agsv02md9&b=2);
    uc.setDoOutput(true);
    uc.setDoInput(true);
    
    OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(), "EUC_JP");
    query.Encode3(".tries","1");
    query.Encode1(".src","auc");
    query.Encode1(".last","http://login.yahoo.co.jp/config/edit_auc");
    query.Encode1("promo","");    *query.Encode()はクエリー文字列にするための関数です。
    query.Encode1(".intl","jp");
    query.Encode1(".bypass","");
    query.Encode1(".partner","");
    query.Encode1(".u",data2);
    query.Encode1(".v","0");
    query.Encode1(".fUpdate","Y");
    query.Encode1("hasMsgr","0");
    query.Encode1(".chkP","Y");
    query.Encode1(".done","http://user.auctions.yahoo.co.jp/jp/show/mystatus");
    query.Encode1("login",ID);
    query.Encode1("passwd",PW);
    out.write(query.toString());
    out.write("\r\n");
    out.flush();
    out.close();
/////////////(1)//////////////////////////////
    for (int j = 0; ; j++) {
        String header = uc.getHeaderField(j);
        if (header == null) break;
        System.out.println(uc.getHeaderFieldKey(j) + ": " + header);
    }
}
catch (Exception a) {
    System.err.println(a);
}


ちなみに(1)で出力されたヘッダ情報は
null: HTTP/1.1 200 OK
Date: Thu, 19 Dec 2002 07:16:58 GMT
Refresh: 900; URL=http://www.yahoo.co.jp/
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: B=el2pemcv02sja&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/;
domain=.yahoo.co.jp

上記のレスポンスを取得してしまい、クッキーが取得できずに先に進めないのです。長くなってしまい、大変ご迷惑をお掛けしますがよろしくお願い致します。
では、失礼します。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2994 # hsj 2002/12/21 (土) 10:45:27
>>2993 ruku
いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と
.uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを
POSTすれば行けるんじゃないでしょうか。
この手のwebアプリはログイン後の画面ではCookieだけでなく、
それ以外の手段でもユーザを一意に識別する何らかの値を持ちまわらせ、
Cookieの(そのものでなく大抵はセッションオブジェクトなりDBなりに
入れた)値とのクロスチェックでユーザを認証している場合があります。
YAHOO!オークションがどうなっているかは知りませんが、
その手の仕組みが組み込まれているんじゃないでしょうか。

No. 2995 # 68user 2002/12/21 (土) 22:50:15
>>2993 ruku
うまくいかないときのアプローチとしては、まずはやっぱり telnet とか
Socket で直接つなぐ方がいいんじゃないでしょうかね。

アクセスに成功する QUERY は知っているし、失敗する QUERY も
知っているわけで (よくわかってませんが、OutputStreamWriter に
細工をすればリクエストの生データが取れるんですよね? )

その 2つの内容をつきあわせて一つ一つチェックすると。ないとは
思いますが、もしかしたら USER_AGENT で制限かけてたりする
かもしれませんし。

No. 2996 # kiki 2002/12/22 (日) 18:25:54
おひさしぶりです。kikiです。前回はお世話になりました。
今回もお聞きしたいことがあり、書き込ませていただきました。

今、私はbash(2.04)をいじって、以下のことが
したいと思っているのです。それは

1.コマンドが実行された時間をそのコマンド履歴といっしょに
    特定のファイルに出力する。(.bash_historyに
    タイムスタンプをつける感じです。
2.特定のファイルにコマンド履歴が追加されるタイミングを
  そのコマンドが打ち込まれた直後になるようにする。
    
このようなことはbashのソースを書き換えればできるのでしょうか?
どうかご教授をよろしくお願い致します。

P.S.
history -w の様なことを自動的にできればいいのですが、
historyコマンドは、シェル自身のコマンドなので無理でしょうし。
うーん。

No. 2997 # ruku 2002/12/23 (月) 12:44:14
>>2994 hsj
貴重なアドバイスありがとうございます。いちおう.uやcookieの値はお書きしたプログラムの前で取得しているので問題はないと思うのですが・・・。これがなかなか上手くいかないのです。

>>2995 68user
ソケットで試してみます。貴重なアドバイスありがとうございました。

No. 2998 # ruku 2002/12/23 (月) 13:55:38
度々すみません。ブラウザの設定でcookieを無効にして再度logをとったら
プログラムと同じになりました。次にlogを示します。

+++GET 457+++
POST /config/login?2v1pmh3i6v229 HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: login.yahoo.co.jp
Content-Length: 259
Pragma: no-cache
Connection: keep-alive
Browser reload detected...
Posting 259 bytes...
.tries=1
.src=auc
.last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc
promo=
.intl=jp
.bypass=
.partner=
.u=5g07ercv0d4tr
.v=0
.fUpdate=Y
hasMsgr=0
.chkP=Y
.done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus
login=*************
passwd=*****************

+++RESP 457+++
HTTP/1.1 302 Found
Date: Mon, 23 Dec 2002 04:40:38 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: ******
Set-Cookie: ******
Set-Cookie: ******
+++CLOSE 457+++

+++GET 458+++
GET /config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: login.yahoo.co.jp
Pragma: no-cache
Connection: keep-alive
Browser reload detected...

+++RESP 458+++
HTTP/1.1 200 OK
Date: Mon, 23 Dec 2002 04:40:38 GMT
Refresh: 900; URL=http://www.yahoo.co.jp/
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: B=2m7te28v0d4u6&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp
+++CLOSE 458+++

cookieを無効にしても3種のcookieはとれるようなのです。しかも最後の
ヘッダの応答はプログラムでもとれているのです。ただ、POSTを送る処理
しかプログラムでは行っていないはずなのに最後のヘッダの応答を取得して
しまうのはどうしてでしょうか?もしよろしければアドバイスよろしくお願いします。もしかしたら応答ヘッダの取得する場所が悪いのでしょうか?

No. 2999 # hsj 2002/12/24 (火) 03:44:56
>>2998 ruku
先ほど試しにncで
> いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と
> .uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを
> POSTすれば行けるんじゃないでしょうか。
をやってみたところ、問題なく3つのCookieが発行されました。
#ただし、最初のGETは/cofig/login?.src=aucに対して行いました。
なので、プログラムが正確に上記の事を行えば問題なく行けると思いますが・・・。

No. 3000 # 68user 2002/12/24 (火) 14:28:48
> 2996
> このようなことはbashのソースを書き換えればできるのでしょうか?
入力を解析し、プロセスを実行しているのは bash なので、ソースに手を
いれれば何でも可能です。

Prev< No. 2961〜3000> Next  [最新発言に戻る] [過去ログ一覧]