68user's page 掲示板

Prev< No. 3700〜3800> Next  [最新発言に戻る] [過去ログ一覧]
No. 3700 # sagara [E-mail] 2004/04/28 (水) 19:15:37
ファイルをダウンロードするスクリプトを作成していますが、
ファイルサイズが大きいとファイル内容は一部しかダウンロードできません。
sysreadの戻り値$Ret_Lenは、正しい値が返ってきます。
最後のprint文で、全てを出力していません。あるいは、$INBUFに全てが
格納されてないかです。
全ての内容をダウンロードするには、どうすべきなのでしょうか?

    $size = -s $dl_file;
    open(INF, $dl_file) or &CgiError( "Error: Unable to open file $dl_file: $!\n" );
    binmode(INF);
    $Ret_Len = sysread(INF, $INBUF, $size);
    if (defined $Ret_Len) { #エラーではない
        if ($Ret_Len >0) { #読み取りの成功
            ;
        } else { #EOF
            close(INF);
        }
    } elsif ($! == EAGAIN) { #ブロックエラー
        $Ret_Len = sysread(INF, $INBUF, $size);
    } else {
        die "sysread() error: $!";
    }

    $NowMime = substr( $f_name, rindex($f_name, ".")+1, length($f_name) );
    $NowMime =~ tr/a-z/A-Z/;
    $RetMime = "";
# 2001.12.19 added by ishikawa ->
    #$mimeMach = 'dummy';
# 2001.12.19 added end ishikawa <-
    if( $NowMime ne "" ){
        if( open(CB, "./lib/mime.types") ){
            @mimein = <CB>;
            close( CB );
            foreach( @mimein ){
    if(/^[^#\n\r]/){
     s/[\t]+/\t/;
     ($MimeHead,$MimeBody) = split(/\t/);
# 2001.12.19 added by ishikawa ->
     if( defined $MimeBody ){
# 2001.12.19 added end ishikawa <-
     foreach $mimeMach ( split( /\s/, $MimeBody ) ){
     $mimeMach =~ s/\s//g;
     $mimeMach =~ tr/a-z/A-Z/;
     if( $mimeMach eq $NowMime ){
     $RetMime = $MimeHead;
     last;
     }
     }
# 2001.12.19 added by ishikawa ->
     }
# 2001.12.19 added end ishikawa <-
     if( $RetMime ne "" ){ last; }
    }
            }
        }
    }

    if( $RetMime eq "" ){
        print "Content-Type: application/octet-stream\n";
        print "Content-Disposition: inline; filename=\"$f_name\"\n\n";
    }
    else{
        print "Content-Type: $RetMime\n";
        print "Content-Disposition: inline; filename=\"$f_name\"\n\n";
    }

    binmode(STDOUT);
    print $INBUF;

No. 3701 # 68user 2004/04/28 (水) 21:50:48
>>3700 sagara
- 「ファイルサイズが大きい」とは具体的に何バイトですか?
- あるバイト数以上のファイルの場合、常にダウンロードできないのですか?
- 大きいファイルを処理するのに何秒かかりますか?
- length($INBUF) の値は?
- $INBUF の内容をファイルに出力すると、正常に出力できますか?
- 「sysreadの戻り値は正しい」というのは「正常にダウンロード
    できなかった場合でも、sysread の戻り値は正しい」ということ
    ですか?
- sysread ではなく read を使うとどうなりますか?
- OS 名・OS のバージョン・perl のバージョンは何ですか?

あと、コメント部分や関係ない箇所は極力削ってから投稿しましょう。
仕事のソースであれば特に。

No. 3702 # うほほ 2004/04/29 (木) 17:10:34
>68USER様
早々のお返事をありがとうございました。
やってみたら、ばっちりでした〜!
本当にありがとうございました♪

No. 3703 # lock 2004/05/04 (火) 09:58:30
はじめまして。よろしくお願いします。

環境:NetBSD1.5.2、Apache2.0.49

以下に示す接続が、4日くらいたっても消えません。
これは、クライアントがhttpで何かをダウンロード中の状態の1つということでしょうか?
ずっとこの状態のままなのはどういう原因が考えられますでしょうか?

Apacheのログには、このクライアントからのアクセスログは存在しませんでした。
FIN_WAIT_2の状態が終了した後で書き込まれるのでしょうか?


%netstat -an (一部抜粋)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 15964 210.*.*.*.80 133.*.*.*.15241 FIN_WAIT_1
tcp 0 16460 210.*.*.*.80 133.*.*.*.6322 FIN_WAIT_1
tcp 0 16500 210.*.*.*.80 133.*.*.*.19339 FIN_WAIT_1

No. 3704 # 68user 2004/05/04 (火) 19:45:56
>>3703 lock
サーバ側から close すると (正確にはアクティブクローズ
すると) FIN_WAIT_1 になります。普通はこの後にクライアント
から ACK・FIN が帰ってきて FIN_WAIT_2 に遷移しますが、
この辺がうまくいっていないものだと思われます。

> ずっとこの状態のままなのはどういう原因が考えられますでしょうか?
わかりません。普通は FIN_WAIT_1 のままにならないように
タイマか何かがあると思いますが、FIN_WAIT_1 タイマって
存在するのかな? (FIN_WAIT_2 タイマはあるけど)

> FIN_WAIT_2の状態が終了した後で書き込まれるのでしょうか?
これまたわかりません。apache のソースを読みましたが、どこで
ログを吐いてるのかすらわかりませんでした。

とまぁ何の役にも立たない回答になってしまいましたが、
数日様子を見てはいかがでしょうかね。

No. 3705 # hash 2004/05/04 (火) 23:12:07
数日前、FreeBSD 5.2Rをインストールしたのですが、起動時(ログイン前)に

Configuring syscons: keymap blanktime

と表示され、長時間とまってしまって困っています。
その後ログインプロンプトが表示され、ログイン可能ですし、
その他の操作に問題も無い感じなのですが、毎度の事なので釈然としません。

解決方法は無いものでしょうか?それともこういうものなんのでしょうか?
よろしくお願いいたします。

No. 3706 # 68user 2004/05/04 (火) 23:28:38
>>3705 hash
> Configuring syscons: keymap blanktime
の後の sendmail 起動時に固まっているものと思われます。

内容は若干グダグダですが、こちらをどうぞ。
    http://home.jp.freebsd.org/cgi-bin/thread?mesid=%3c200308030422%2eAA02439%40nt%2em8%2edion%2ene%2ejp%3e

てゆーかうちのマシンも sendmail 起動時に固まりますが、
めんどくさいので止まったら Ctrl-C を押してます。

No. 3707 # hash 2004/05/05 (水) 02:07:03
>> 3706
早速のお返事ありがとうございます。
ご指摘頂いた通り、原因はメッセージの後のsendmailの起動でした。
> Configuring syscons: keymap blanktime
のメッセージから検索しても、解決法が見つからないのはあたりまえでしたね。

ご紹介いただいたウェブサイトに目を通すのに時間がかってしまいましたが、
解決することができました。

私の場合はDNSサーバの指定部分で、ADSLモデムの提供しているDNSで解決しようとしていたのですが、
モデムのDNSサービスがIPv6に対応していない為、名前解決できずTime outを待っていたようです。
DNSサーバの指定をプロバイダーのアドレスにしたら解決しました。

起動する度に気になっていたので、すっきりしました。
どうも、ありがとうございます。

No. 3708 # Sjr 2004/05/05 (水) 20:19:41
DESについて質問させて下さい。
OpensslコマンドでDESを使っているのですが、間違った鍵で復号しようとすると
bad decryptというエラーがでます。パリティチェックはOKとします。
これはDESの仕様上、エラーが検出できるということなのでしょうか?
DESというと単にビット単位の置換だと思っているので、エラーが検出できるのが
ちょっと不思議です。
TripleDESの中ででも、いきなり関係無い鍵で復号したりしてますから、さらに
不思議です。

なにか根本的に理解が違っている気もするので、宜しければご教授ください。

No. 3709 # 68user 2004/05/05 (水) 22:59:32
>>3708 Sjr
`bad decrypt' を出しているのは多分 rypto/evp/evp_enc.c の

    int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl){
          b=ctx->cipher->block_size;
          n=ctx->final[b-1];
          if (n > b){
                EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT);

だと思います。PKCS#5 で定義されている操作に矛盾が発生すると
このエラーが発生すると思っています。

ところで PKCS#5 の日本語訳のありかをご存知の方いらっしゃい
ませんか? (解説している書籍でも可) 以前自分で訳してみたものの、
よく理解していないため何が何だかわからない日本語ができあがって
しまいました。

No. 3710 # Sjr 2004/05/06 (木) 10:56:55
68userさん、ご回答有難うございました。
恥ずかしながらPKCSというのは知りませんでした。PKCS#5というのは、
簡単に言うと文字列を鍵とする場合の決まりごと、みたいなものでしょうか?
頂いたソースやPKCS#5を斜め読みしてもまだ今一つピンときていません。
勉強したいと思います。

今のところなんとなく、PKCS#5でのPS(Padding String)についての記述を
見て、Padding ruleによってはエラーが検出できるのではと予想しています。

やっぱりアルゴリズムを見ていくしかないですねぇ…

No. 3711 # 68user 2004/05/06 (木) 11:54:23
>>3710 Sjr
> 簡単に言うと文字列を鍵とする場合の決まりごと、みたいなものでしょうか?
決まりごとというか、RSA が作った決めごとですね。

DES は 64bit のデータを暗号化・復号化する機能しか持っていません
(だから DES は 64bit ブロック暗号)。

これでは 64bit を超えるデータを暗号化できないので、データを分割して
暗号化する方法の一つが CBC モード (FIPS PUB 81 で規定)。一方、データ
列が 64bit に満たない場合のパディング方法などを規定しているのが
PKCS#5 です。

PKCS#5 でのパディングは
      データ1バイトの場合: A -> A 07 07 07 07 07 07 07 としてから暗号化
      データ2バイトの場合: A B -> A B 06 06 06 06 06 06 としてから暗号化
                  :
      データ7バイトの場合: A B C D E F G -> A B C D E F G 01 としてから暗号化
      データ8バイトの場合: A B C D E F G H -> A B C D E F G H 08 08 08 08 08 08 08 08 としてから暗号化
としていますね。

と書いているうちにわかったような気がしますが、
      http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/crypto/openssl/crypto/evp/evp_enc.c?rev=1.1.1.1.2.4
の EVP_DecryptFinal_ex が呼ばれるときの流れは

      残りブロックサイズ = ctx->cipher->block_size;
      if (残りブロックサイズ > 1){
          /* 残りはパディング部分のみ */
          n=ctx->final[b-1]; /* 最後の 1バイトを読む。その値はパディング長であるはず */
          if (n > b)
              /* パディング長が残りブロックサイズを超えているならエラー */
              for (i=0; i<n; i++)
                    パディング部分の値が全て n であることをチェック
          /* ここまできたら、パディング部分が正しいことがわかる */
          n=ctx->cipher->block_size-n; /* パディング部分を除いたブロックサイズを取得 */
          for (i=0; i<n; i++) /* パディング部分より前のデータについて出力バッファに書き出す */
              out[i]=ctx->final[i];

てな感じでしょうか。

No. 3712 # 68user 2004/05/06 (木) 12:05:05
一応補足。

>>3708 Sjr
> DESというと単にビット単位の置換だと思っているので、エラーが検出できるのが
> ちょっと不思議です。
DES 自体は、鍵に含まれるパリティを以外の誤り検出機能はない、という
理解で正しいと思います。

しかし、PKCS#5 においては誤った鍵を使うと
>>3711 68user
> データ1バイトの場合: A -> A 07 07 07 07 07 07 07 としてから暗号化
> データ2バイトの場合: A B -> A B 06 06 06 06 06 06 としてから暗号化
この最後のデータ列 (06 06 06 06 06 06 など) がめちゃくちゃになって
しまうため、パディングチェック時にエラーとなる、ということですね。


なお、PKCS#5 は DES に限らず、ブロック暗号一般に適用できます。ただし
PKCS#5 は 64bit 暗号に特化した書き方がされているので、64bit 超暗号に
一般化したものが PKCS#7 に規定されています。

# と言っても、mod 8 とか書いてあるか、mod k と書いてあるかの違いしか
# ないような気がしますけど。

No. 3713 # Sjr 2004/05/07 (金) 10:09:34
x168userさん、詳細な説明ありがとうございます。
誤りの検出については、ほぼ理解できたと思います。


>データ8バイトの場合: A B C D E F G H -> A B C D E F G H 08 08 08 08 08 08 08 08 としてから暗号化

のところは意外でした。データが増えてしまうのでしょうか。
確かにこうしないとパディングされているのかされていないのかが
分からない、ということなのでしょうけど。
よくよく見ていくと色々と考えられていて面白いですね。

No. 3714 # SS 2004/05/10 (月) 14:58:25
初歩的な質問です。
複数ファイルを1ファイルにcatで結合しようとしたところ次の問題が発生しました。
各ファイルのファイル名は20文字程あり、それら10ファイルをまとめて作成したい
ファイル名も20文字程あります。cat以下コマンドを入力していくと、255文字で
入力不能となります。環境はSolarisへのTelnet接続、シェルはkshを使っています。
また、結合したい10ファイルは1つのディレクトリにある全てのファイルです。
ファイル名を短くするとか一度にやらないとか方法はあるでしょうが、画期的な方法が
あれば宜しくお願いします。

No. 3715 # ふくし [E-mail] 2004/05/10 (月) 18:01:22
>>3714 SS
さん、

ファイル名に共通点ありますか?

$ cat aaa.txt
a
b
c
$ cat bbb.txt
1
2
3
$ cat ccc.txt
x
y
z
$ cat *.txt
a
b
c
1
2
3
x
y
z

No. 3716 # 68user 2004/05/10 (月) 21:08:55
>>3714 SS
Solaris8 では sh・ksh・csh いずれも 255 文字の制限があるようで、極めて
不愉快ですね。

ワイルドカード (glob) を使う以外の別解としては、文字数の制限がある
のはコマンドラインからの入力時だけのようなので、シェルスクリプト内で
      #!/bin/ksh
      cat file-a file-b ..... > result
などとすれば OK なようです。

あとは、tcsh や bash を使うとか。

No. 3717 # SS 2004/05/11 (火) 13:59:04
シェルスクリプトで実現することにしました。ありがとうございました。

No. 3718 # zsh 2004/05/11 (火) 16:54:18
>>3717 SS
3716で68user様もさらっと書いてますが、ワイルドカードをを使用する事でも回避可能です。
% cat * > outfile

それにしてもこんな制限があるとは知りませんでした。
で、確認してみたところ、255文字ではなく257文字まで入力できました。
・・・・・・なんでこんなに中途半端なんでしょう?

No. 3719 # lock 2004/05/13 (木) 00:00:43
>>3074 68user
返事遅れて申し訳ありません。
回答ありがとうございます。

状況は、全く変化せずFIN_WAIT1の状態のまま残っています。
タイマーはないようです。
OSを再起動すればなくなるのでしょうが、それは出来ないので困っています。
強制的にクローズする方法はありませんでしょうか?

apacheを再起動しても変化なしでした。

No. 3720 # 68user 2004/05/13 (木) 00:18:07
>>3719 lock
であれば、NetBSD のバグだと思われます。

http://www.netbsd.org/Misc/query-pr.html#search
http://www.netbsd.org/MailingLists/ で検索してみましたが、
それっぽいものはありませんでした。

# FIN_WAIT_1 が残るというメールはありましたが、NetBSD 1.3.1
# 以前の問題のようです。

これ以上はわたしには全くわからないので、netbsd.org の
メーリングリストで質問してみてはいかがでしょうか。

No. 3721 # 大谷 2004/05/15 (土) 17:41:21
初めてメールします。CGIを用いてGREE.jpのようなものを作りたいと考えているのですが、何かいい案はございませんか?

No. 3722 # 68user 2004/05/15 (土) 17:53:34
>>3721 大谷
現状何が問題なのかを提示せずに いきなり「何かいい案は?」と
問われても、何と答えればよいのかわかりません。

No. 3723 # つる 2004/05/16 (日) 17:56:22
シェルスクリプト内の変数の使い方について教えて下さい。
環境は、HP-UX11.00で、Cシェルです。

a.cshとb.cshの2つのシェルがあり、
b.cshは、a.cshから呼ばれる動きです。

この時、a.csh内で設定した変数を、b.csh内でもしたいのですが
上手くいきません。

- a.csh -----------
#!/bin/csh

set title = "test log"
./b.csh

- b.csh ------
#!/bin/csh

echo "Subject: $title" >> kekka.log
echo "" >> kekka.log

というように使いたいのですが、上手くできません。
よろしくお願いします。

No. 3724 # zsh 2004/05/16 (日) 18:18:46
>>3723 つる
setenvしてください。

No. 3725 # ふくし [E-mail] 2004/05/19 (水) 15:38:15
留学歴を調べててわかったんですが、
あべ晋三さんって Mac のノート(G4 パワーブック?)で
Unix を使って日本を動かしてるらしい。

    http://www.s-abe.or.jp/image/pc_desk.gif

「./configure; make new_japan; make install」ってのがすごいですね。
実装が知りたい (^^)



さて質問です。tcup という有名なレンタル掲示板に
「プログラム書き込みを禁止する」という設定項目があり、
これを有効にするといわゆるエロ広告がカットできるようなんですが、
どういう実装になってるんでしょうか。
HTTP-AGENT 環境変数とかだったらフツー偽装しますよね。
(いぜん PC を docomo の携帯に偽装して「グリコの抽選の応募」を
    連続応募する裏ワザというのがあった)
ていうか、Internet Explorer だってコンピューターのプログラムには
違いないわけで。どうやって判別できるんでしょう?

No. 3726 # 68user 2004/05/19 (水) 18:21:09
>>3275 kotaro
> 「./configure; make new_japan; make install」ってのがすごいですね。
何ヶ月か前にほうぼうでネタにされてましたね。configure と make は ; で
なくて && でつなぐべきだとか、いったい何を grep してるんだとか、パス
ワード入力時に何で * がエコーバックされるんだとか。

http://www.s-abe.or.jp/ の web も XOOPS を使っているようで、ページ
運営者がそういう系統の人なんでしょうね。

> 「プログラム書き込みを禁止する」
http://www.teacup.com/gbbs/l1new.shtml の「プログラム投稿(迷惑投稿)禁止」
のことですね。

    http://8520.teacup.com/pon/bbs
        あれれ? 投稿者:PON  投稿日:10月10日(金)00時00分26秒

以降の発言を見るに、cookie を食べてくれるかとか、referer を
渡してくるかとか、Javascript を正しく解析してくれるかとか、
そういう感じの判定をしているものと思われます。

No. 3727 # tt 2004/05/22 (土) 16:39:13
質問です。
Solaris8で、バックアップからのフルリカバリを行う際、
パーティションを作成した後にnewfsでファイルシステムの作成を行いますが、
このときSWAP領域にも、newfs /dev/rdsk/.....というようにファイルシステムを
作成するものなのでしょうか?
vfstabファイルによると、SWAPはファイルシステムがufsでなくswapですので、どうなのかと思いまして。
googleで解説ページを検索すると、SWAPにnewfsを行っているサイトもあるのですが、
自分の持っている書籍では行っていません。

ちょっと分からなくなってしまったので、宜しくお願い致します。

No. 3728 # 68user 2004/05/22 (土) 19:00:17
>>3727 tt
ufs ファイルシステムを作るわけではないので、newfs は不要です。

ファイルを swap として追加する場合も、
      # mkfile 512m /foo/bar/swap512m
      # swap -a /foo/bar/swap512m
と、ゼロ埋めのファイルを用意して swap -a するだけですので。

No. 3729 # tt 2004/05/24 (月) 00:57:57
>>3728 68user様
ご回答ありがとうございます。
やはり不要なのですね。
ただ、それでもnewfsを行った場合、何か不具合が出るのでしょうか?
「不要」とは、「行っても問題無いが、する必要が無い」と言った意味になりますでしょうか。
swapをnewfsしている方は、その後問題無いのかなと思いまして。。

No. 3730 # zsh 2004/05/24 (月) 07:25:11
>>3729 tt
newfsしても問題ないと思います。
ただし、実際にswapを使い始めると(書き込みが行われると)
ufsとして書き込みに行かないので、結局ファイルシステムは破壊はされます。
よって、newfsする意味がありません。

No. 3731 # marlboro [E-mail] 2004/05/27 (木) 11:50:40
C言語版FTPクライアントを実行させたところ、RETR後、レスポンスが2回続けて
ありますが(150、226)、226のレスポンスが異常に遅いです(6分後)。
Solaris8、ProFTP(関係ないとおもいますが。。。)の構成です。

No. 3732 # すすむ 2004/05/27 (木) 19:48:05
HP-UX11.00で、Bシェルなのですが、
awkで表示された内容をある数分出力したら別ファイルに
入れたいのですが、

---------------------------------------
#!/bin/sh
#

FILE="test.txt"
OUTPUT="output.txt"

awk -F" " '
        BEGIN {
                count = 0+0 ;
        }
function func() {
        if (・・・・) {
                printf("%s\n",$0) ;
                printf("\n") ;
                return 0;
        } else {
                return 1;
        }

}
{
        if (NF == 0) next ;
        if (NF == 2 && $1 == "dn:") {
                ret=func() ;
                if (ret == 0) count++ ;
        }
        if (count == 1000) {
                count = 0+0 ;
        }
}' ${FILE} > ?????
------------------------------------

1000件ごとに出力するファイル名を変えたい
「output_nnn.txt」ということはできるでしょうか。

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

No. 3733 # 68user 2004/05/27 (木) 20:54:46
>>3731 marlboro
ご報告ありがとうございます。

調べてみますが、
    - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?)
    - OS 付属の FTP クライアントでは問題ないのか
    - (インターネット上に公開されているサーバであれば) 相手のサーバ名
を教えていただけると助かります。

>>3732 すすむ
HP-UX11.11 の /bin/awk で、
    out="output_nnn.txt";
    print "hoge"> out
などと出力ファイルを指定できるようです。後は out の内容を
動的に変えていけばよいでしょう。

対象ファイルを切り替えるときは close(out) すればリソースの
無駄が省けてよいかもしれません。

No. 3734 # すすむ 2004/05/27 (木) 22:55:17
>>3733 68user
ありがとうございます。

>HP-UX11.11 の /bin/awk で、
> out="output_nnn.txt";
> print "hoge"> out
>などと出力ファイルを指定できるようです。後は out の内容を
>動的に変えていけばよいでしょう。
>対象ファイルを切り替えるときは close(out) すればリソースの
>無駄が省けてよいかもしれません。

確認できる環境が近くにないので確認ができませんが、
以下の様なことなのでしょうか。
------------------------
#!/bin/sh
#

FILE="test.txt"
OUTPUT="output.txt"

awk -F" " '
        BEGIN {
                count = 0+0 ;
                num = 1;
                output="output_num.txt"
        }
        function func() {
                if (・・・・) {
                        printf("%s\n",$0) >> output ;
                        printf("\n") >> output ;
                        return 0;
                } else {
                        return 1;
                }
          }
          {
                if (NF == 0) next ;
                if (NF == 2 && $1 == "title:") {
                                ret=func() ;
                                if (ret == 0) count++ ;
                }
                if (count == 1000) {
                                count = 0+0 ;
                                num++ ;
                                output="output_num.txt"
                }
          }' ${FILE}

No. 3735 # 68user 2004/05/27 (木) 23:37:27
>>3731 marlboro
手元の複数の環境で実験した限りでは再現しませんでした。
>>3733 68user
をご参照の上、より詳細なご報告いただければ幸いです。

>>3734 すすむ
ご自分で動作確認して、わからなければ再度質問してください。

No. 3736 # すすむ 2004/05/28 (金) 08:44:07
>>3735 68user
>ご自分で動作確認して、わからなければ再度質問してください。

失礼しました。
ありがとうございました。
希望通りの動きをしました。

No. 3737 # kentarou 2004/05/28 (金) 08:45:29
>> 「./configure; make new_japan; make install」ってのがすごいですね。
> 何ヶ月か前にほうぼうでネタにされてましたね。configure と make は ; で
> なくて && でつなぐべきだとか、

ごめんなさい、教えてください。
;ではなく&&でつなぐとどうなるのですか?

No. 3738 # zsh 2004/05/28 (金) 12:41:31
>>3737 kentarou
例として、「cmd1 && cmd2」とした場合は、
cmd1の戻り値が0の場合のみcmd2を実行します。

No. 3739 # 68user 2004/05/28 (金) 13:03:19
>>3738 zsh
そして、make は成功時には 0 を、失敗時には 1 を返します。
# http://x68000.startshop.co.jp/~68user/unix/glossary.html#%CC%E1%A4%EA%C3%CD

よって && でつなぐことで、
    - configure でこけたら make 以降は行なわない
    - make でこけたら make install は行なわない
という効果があるわけです。

No. 3740 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 17:25:42
Perl&CGIで授業の出席フォームを作成しようとしています。Perlは初心者です。
サーバーは、Windows2000+IIS+ActivePerl5.6.0で、ブラウザはIE6.0です。
クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。
inet_aton、gethostbyaddr、inet_ntoaの各関数を使ってIPアドレスを取得する
コードを試しましたが、ブラウザIE6.0のプロキシ設定をしていれば、プロキシ
のIPアドレスが取得でき、クライアントのIPアドレスが取得できません。もちろん
プロキシの設定を外せば、クライアントのIPアドレスが取れます。プロキシを設定
した状態で、クライアントのIPアドレスを取得できる方法がありましたら、ご教示
ください。

No. 3741 # 68user 2004/05/28 (金) 17:59:31
>>3740 瓜倉 茂
> クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。
IP アドレスは $ENV{REMOTE_ADDR} で取得できますよね。FQDN (ホスト名) の
取得が目的ですか?

それはそれとして、
> プロキシを設定した状態で、クライアントのIPアドレスを取得できる方法が
> ありましたら、ご教示ください。
については
>>3450 68user
の「理屈的には、100% の精度の proxy 判定は不可能です」のくだりを
読んでください。

100% は無理と書きましたが、学内限定でなおかつあなたが管理者の立場なの
であれば、必ず HTTP_X_FORWARDED_FOR を設定させるように proxy サーバの
設定変更するなどの手はあります。

ただ、根本的に信頼性がないので「web で出席を取る」という仕組みが妥当か
どうかは微妙な気がします。

No. 3742 # marlboro 2004/05/28 (金) 22:25:03
>>3733 68user
遅くなりました。すでに確認していただいているのですが。
>調べてみますが、
> - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?)
> - OS 付属の FTP クライアントでは問題ないのか
> - (インターネット上に公開されているサーバであれば) 相手のサーバ名
>を教えていただけると助かります。
あて先は、同じネットワーク内に存在するサーバです。同じくSolaris8です。
UNIXのftpコマンド、Windowsのツール(FFFTP)では問題なく動作します。
#ftpコマンドでPASVで送受信する方法を知らないんですね。。。
サーバ側の問題とも考えにくいです。

No. 3743 # kentarou 2004/05/28 (金) 23:13:18
コマンドを&&でつなぐ件、勉強になりました。
ありがとうございます。

No. 3744 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 23:38:23
68user様
早速のご回答ありがとうございます。Perlの使い方で問題が解決するのかと
思ってましたが、ネットワーク経由だと他のところも絡んでくるのですね。
Webにこだわらないで、出席を取る問題を再考してみます。

No. 3745 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 23:43:36
marlboro様
先ほどのNo.3744の内容は、No. 3742のmarlboro様へのお礼でした。
あて先を間違い失礼しました。改めてmarlboro様の回答にお礼申し
上げます。

No. 3746 # 68user 2004/05/29 (土) 01:03:39
>>3742 marlboro
ProFTPD を相手にすると再現することがわかりました (一番
最初に試すべきことでしたね)。

    % time ./ftp-client -d anonymous foo@example.com ftp.proftpd.org /MIRMON.PROBE
    <-- 220 ProFTPD 1.2.10rc2 Server (proftpd.org Project) [81.223.20.36]
    --> USER anonymous
    <-- 331 Anonymous login ok, send your complete email address as your password.
    --> PASS foo@example.com
    <-- 230 Anonymous access granted, restrictions apply.
    --> PORT aaa,bbb,ccc,ddd,16,36
    <-- 200 PORT command successful
    --> RETR /MIRMON.PROBE
    1085749801
    <-- 150 Opening ASCII mode data connection for /MIRMON.PROBE (11 bytes)
    (ここで6分待たされる)
    <-- 226 Transfer complete.
    --> QUIT
    <-- 221 Goodbye.
    0.000u 0.005s 6:03.75 0.0% 0+0k 0+0io 0pf+0w

対策ですが、
    http://x68000.startshop.co.jp/~68user/net/c-ftp-1.html

        while (1){
                int read_size;
                read_size = read(data_socket, buf, BUF_LEN);
                ...
        }
の後に
        close(data_socket);
を入れることで直るようです。

データコネクションはサーバ側から切ってくれると認識して
いたのですが、間違いなのかもしれません。調査します。

ご指摘いただきありがとうございました。

> #ftpコマンドでPASVで送受信する方法を知らないんですね。。。
Solaris8 の ftp はカスなので、passive モードにできない
と認識しています。GNU モノや BSD モノなら、passive でできます。

No. 3747 # kouzu 2004/06/04 (金) 12:58:35
はじめまして。

ミラーリングの質問をさせていただきたいの
ですが、solaris8 10/01で
内蔵ディスクをRAID1は一般的でしょうが、
RAID1+0(ミラー+ストライピング)を構成
するのはアリなのでしょうか?

そもそもできるのでしょうか??

危険・・・?
ソフトはVeritasCSです。
VxVM VxFSも購入予定

標準内蔵DISKは73GBが6個で、
現状下記で振り分けようとしています。
disk1スライス: /(usr opt含む) , swap
disk2スライス: /export/home , /work

disk3,4でRAID1ミラーを予定だが、
RAID0+1が実は実現できそう・・・

No. 3748 # hash 2004/06/04 (金) 21:45:55
LAN内だけで有効なドメイン名(hogehoge.example等)を使いたいのですが、
そういったことは可能でしょうか?

具体的にはLAN内のWEBサーバに名前でアクセスしたり、
LAN内のメールアドレスを作りたいのです。

なんだか、漠然とした質問で申し訳ありません。
このようなことができるのであれば、解説しているサイトや、
検索に有効なキーワードでも教えていただけると幸いです。

サーバ構成は以下のようになっています。
・OS RedHat Linux8
・MTA sendmail 8
・DNS bind 9
・MUA OutLook Express 6(Windows2000, XP Pro)

WEBサーバにはローカルIPアドレスでアクセスし、
メールはWEBアプリからpostmaster@host.localdomainのように送信して、
POPはOutlook Expressで受信しています。

No. 3749 # hash 2004/06/04 (金) 21:51:53
>>3748 hash
> WEBサーバにはローカルIPアドレスでアクセスし、
> メールはWEBアプリからpostmaster@host.localdomainのように送信して、
> POPはOutlook Expressで受信しています。

度々すいません。
なんだか、意味のわからない文章になっていました。

現在は引用部分のように利用しているということです。
いろいろと面倒なので、何とかしたいと思って色々調べているのですが、
今のところ手がかりも見つからず質問させていただいた次第です。

No. 3750 # 金床 2004/06/05 (土) 06:10:55
>>3746 68user
興味があったので調べてみました。

現状のftp-client.cはデータコネクションでのデータ転送終了時にソケットのcloseを行っていないため、
サーバー側からのFIN-ACKパケットに対してFIN-ACKを送り返しません。

このため、データコネクションの切断について、クライアントからのFIN-ACKパケットを待つProFTPDと、
FIN-ACKパケットを特に待たない他のFTPDとの実装の差が、今回の問題であるプログラムの動作の差になっている
ようです。

>データコネクションはサーバ側から切ってくれると認識していたのですが、間違いなのかもしれません。
データコネクションの切断はサーバー側から行います。原理的に考えても、ファイルやファイルリストのサイズを
送信前に調べることはできませんので、これは間違いありません。

「サーバー側から切断」とはつまりサーバー側からFIN-ACKパケットが送信されるということです。
この際にreadが0を返すので、プログラムはwhileループを抜けます。
ここにclose(data_socket);を追加するとFIN-ACKを返信するようになり、ProFTPDはデータコネクションの切断が
正常に行われたと考え、処理が進みます。

つまり、close(data_socket);を追加することは「切断をクライアント側から行う」ことにはなりません。

以上、まとまりがなく申し訳ありませんが、参考になれば幸いです。

No. 3751 # TSURU 2004/06/05 (土) 17:31:35
初めて投稿します。

現在、sendmail 8.12.9 でSTARTTSLコマンドを有効にしてSSL接続を行っています。
デフォルトでは、SSLプロトコルバージョンは3.1です。これを、SSLプロトコル
バージョン3.0にする必要があるため、プロトコルバージョンが3.1の実行ファイル
と、3.0の実行ファイルを両方作成し、必要に応じて、実行ファイルを置き換えて、
sendmail を起動しなおして、sendmail に接続しています。
プロトコルバージョン3.0のものをコンパイルし、インストールした直後では、
正常にSSLプロトコルバージョンは3.0で通信できました。しかし、一旦、
SSLプロトコルバージョン3.1の実行ファイルに置き換えて起動し、数時間後に、
再度プロトコルバージョン3.0の実行ファイルで起動したところ、プロトコルバー
ジョン3.0では通信できないというおかしな状況になってしまいました。
プロトコルバージョン3.0で、通信できずにエラーとなった時の、
/var/log/syslog に出力された、sendmail のエラーメッセージは以下の
とおりです。

Jun 4 13:52:27 xxxx sm-mta[7195]: STARTTLS=server: 7195:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:290:

プロトコルバージョン3.0にする方法は、SSL_CTX_new() の引数に、
サーバの時はSSLv3_server_method()、クライアントの時は、SSLv3_client_method()を指定するという方法で行っています。
SSLライブラリは、OpenSSL 0.9.6c[engine] を使用しています。

どなたか、原因や対応方法などわかる人がいたら、ご教示していただきたいと
思います。
よろしくお願いします。

No. 3752 # bon 2004/06/05 (土) 18:29:25
お世話になります。
solaris9のx86版で、syslogの設定について質問なのです。
inetdから起動されるデーモンで、
クライアントのIP等の情報を/var/adm/messagesに出力させるには、
/etc/init.d/inetsvc内の最後を、「/usr/sbin/inetd -s -t」として、
マシンを再起動すれば良いらしいのですが、そのようにしてからtelnetで試したところ、
どうしてもログに出力されません。
/etc/syslog.confの設定はデフォルトのままで、
「*.err;kern.debug;daemon.notice;mail.crit /var/adm/messages」
の設定はコメントアウト等されていません。
他に何か設定すべき場所等ありますでしょうか?
宜しくお願い致します。

No. 3753 # zsh 2004/06/06 (日) 20:42:55
>>3752 bon
/etc/default/inetdに
ENABLE_CONNECTION_LOGGING=YES
の指定が必要です。

No. 3754 # zsh 2004/06/06 (日) 20:50:30
>>3748 hash
>WEBサーバにはローカルIPアドレスでアクセスし、
>メールはWEBアプリからpostmaster@host.localdomainのように送信して、
>POPはOutlook Expressで受信しています。

これが今の運用だとすると、
postmaster@host.localdomain
と指定している時点でローカルのドメインを使えているように見えますが・・・
クライアントからホスト名でアクセスするだけだったら
hostsファイルに指定してやれば良い気がします。

No. 3755 # bon 2004/06/06 (日) 21:41:14
>> 3753 zsh様
やっと動きました!
ありがとうございました。

No. 3756 # marlboro 2004/06/08 (火) 21:00:42
>>3746 68user
ありがとうございました。
動作確認できました。やはり6分待たされるんですよね。
>ProFTPD を相手にすると再現することがわかりました (一番
>最初に試すべきことでしたね)。
最初にお伝えするべきでした。

No. 3757 # 68user 2004/06/08 (火) 22:25:42
>>3747 kouzu
> RAID1+0(ミラー+ストライピング)を構成するのは
> アリなのでしょうか?
わかりません。RAID1 しかやったことがないです。

システム領域は RAID1 しか対応していないミドルウェアも
あるようですのでね。どう考えてもお仕事なようですから、
素人のアドバイスなど聞かず、まずは Veritas 社に問い
合わせることをお勧めします。

>>3750 金床
なるほど、勉強になります。サーバプログラムの書き方の違いとしては、
    クライアントの FIN-ACK を待たない
        ⇒ close か、shutdown(fd, SHUT_RDWR)
    クライアントの FIN-ACK を待つ
        ⇒ shutdown(fd, SHUT_WR) して、read が 0 を返すのを待つ
てな感じなんでしょうかねぇ。

>>3751 TSURU
単に 3.0 サーバに 3.1 プロトコルでお話しているということは
ないですよね? tcpdump や ethereal などでプロトコルバージョンを
確認しても間違いはありませんか?

SMTP over TLS は使ったことがないため、たいしたことは言えなくて
申し訳ないです。

No. 3758 # TSURU 2004/06/08 (火) 22:29:20
>>3751 TSURU
こんばんは。
V3.0で通信できない、という件ですが、設定方法を変えたら、正常にV3.0で通信
できるようになりました。
具体的には、sendmail.cfにて、CipherList を設定する方法で、できるように
なりました。
お騒がせしました。
68userさん、レスをいただきありがとうございます。

ありがとうございました。

No. 3759 # 68user 2004/06/08 (火) 22:35:42
>>3758 TSURU
V3.0 と V3.1 で sendmail.cf を共用にしていたため、
V3.1 でしか使用できない Cipher を V3.0 で使おうとして
エラーになっていた、ということでしょうか?

No. 3760 # TSURU 2004/06/08 (火) 23:10:56
>>3759 68user
いや、それはないと思います。
sendmail.cfファイルも、V3.0用とV3.1用で別々に作成して、置き換えて使っています。
僕も、それほどSSLについて詳しいわけではありませんが、
SSLプロトコルバージョンと暗号化アルゴリズム(Cipher)は、直接は関連性はないように
思います。
おそらく、この認識で合っているとは思いますが。

No. 3761 # 68user 2004/06/08 (火) 23:31:37
>>3760 TSURU
SSL3.0 と TLS1.0 (≒SSL3.1) の仕様上は、使用できる暗号
スイートに違いがあります。たとえば SSL3.0 では FORTEZZA
が使用できましたが、TLS1.0 では削除されました。また、AES
関連の暗号スイートについては、TLS のみに追加されました。
今後も新規暗号スイートは TLS のみに追加されていくでしょう。

http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt
http://www21.ocn.ne.jp/~k-west/SSLandTLS/draft302-Ja.txt
http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc3268-Ja.txt

# ただし実装においては SSL3.0 と TLS1.0 はコードを共有して
# いるでしょうから、もしかしたら SSL3.0 で AES が使用できる
# ような実装もあるのかもしれません。

よって、暗号スイートの違いから接続がうまくいかなかったのでは
ないかと考えた次第です。

後学のために教えていただきたいのですが、
>>3758 TSURU
> sendmail.cfにて、CipherList を設定する方法
何と書くとうまくいかなくて、何と書くとうまくいったのか
お教えいただけますか?

No. 3762 # TSURU 2004/06/09 (水) 23:37:31
>>3761 68user

1.通信できなかった場合
sendmail.cfで、CipherList は特に設定していない。
また、SSL_CTX_new() の引数にSSLv3_server_method()、
又は、SSLv3_client_method()を指定する。
この方法だと、通信できなくなった。

2.通信できた場合
sendmail.cfで、CipherList に、DEFAULT:+SSLV3 を指定する。
また、SSL_CTX_new() の引数にSSLv23_server_method()、
又は、SSLv23_client_method()を指定する。
(つまり、sendmail のソースコードをいじらないままの状態です。)
この方法で、正常に通信できるようになりました。

No. 3763 # aits 2004/06/09 (水) 23:37:44
どなたかご教授下さい。

すでに動いているSolaris8の機器に新規Diskを追加し、Formatコマンドでパーティション切って、
labelしたあとにリブートする必要はありますか?
リブートしないと反映しないのですかね?
リブートは必要ないと思っていますが。。

No. 3764 # 68user 2004/06/10 (木) 00:40:32
>>3762 TSURU
ありがとうございます。暇を見つけて試してみたいと思います。

>>3763 aits
リブートして /etc/vfstab の内容が正しいことを検証しておく
方がよいと思われますが、リブートが必須かどうかと問われれば、
必須ではありません。リブートせずに、そのまま mount できます。

No. 3765 # 金床 2004/06/10 (木) 10:25:20
>>3757 68user

>サーバプログラムの書き方の違いとしては、
> クライアントの FIN-ACK を待たない
> ⇒ close か、shutdown(fd, SHUT_RDWR)
> クライアントの FIN-ACK を待つ
> ⇒ shutdown(fd, SHUT_WR) して、read が 0 を返すのを待つ
> てな感じなんでしょうかねぇ。

ProFTPDのソースを見てみました。ご指摘の通り、
shutdown(fd, SHUT_WR)
になっていました。
#実際にはSHUT_WRはハードコーディングされて1になっていましたが

shutdown後にreadしているかどうかまでは追えていません。
時間があるときにコードを書いてshutdownの動作を確かめてみたいと思ってます。


ちなみにProFTPDのこの部分を
shutdown(fd, SHUT_RDWR)
に変えてみたところ、closeを追加しないftp-client.cでも処理が止まらずに進むことを確認できました。

No. 3766 # 初心者 2004/06/10 (木) 23:15:30
unix上でzip圧縮した際にパスワードを設定したいのですが、
どなたかご存知な方いらっしゃいいますか?
windowsだと基本的にzip圧縮の際にパスワードを設定できるように
なっているのですが・・・。
一応manコマンドで調べると-eという暗号化のオプションが存在する
ようなのですが出来ません。
環境はsolarisです。よろしくお願いします。

No. 3767 # hash 2004/06/11 (金) 00:08:24
>>3754 zsh
> クライアントからホスト名でアクセスするだけだったら
> hostsファイルに指定してやれば良い気がします。

お返事ありがとうございます。
全クライアント(Win2000)のhostsファイルを変更するのは
大変(そんなに数はないのですが)なのでDNSにローカルのbindを指定して使っています。

ということは、bindのゾーン設定が悪いんですね。
とりあえず切り分けができたのでもう少し試行錯誤してみます。
報告できるようなことがあれば、また報告させていただきたいと思います。

ありがとうございました。

No. 3768 # hash 2004/06/11 (金) 00:27:09
>>3766 初心者

$zip -e out.zip target.o
Enter password:
Verify password:
    adding: target.o (stored 80%)

で出来ました。
RedHatですが、同じだと思います。

No. 3769 # 68user 2004/06/11 (金) 00:56:56
>>3766 初心者
> unix上でzip圧縮した際にパスワードを設定したいのですが、
Solaris 標準の zip は、おそらく暗号化ライブラリなしで
コンパイルされていると思うんですよね。たぶん。

FreeBSD の ports
        http://www.jp.freebsd.org/cgi/cvsweb.cgi/ports/archivers/zip/Makefile?rev=1.29
を参考に、zcrypt29-exportable.zip を持ってきたり、
-DUSE_CRYPT を指定したりして自分でソースからコンパイル
すれば大丈夫でしょう。

もしかしたら
    SunSite
        http://sunsite.tus.ac.jp/sun/solbin/
のバイナリパッケージが暗号化機能付きでコンパイルされて
いるかもしれません (試していません)。

No. 3770 # zsh 2004/06/11 (金) 17:04:11
>>3769 68user
Solaris標準・SunSiteのバイナリパッケージ共に暗号機能なしのようです。

No. 3771 # den 2004/06/13 (日) 18:34:51
Servlet を C の exe からソケットを使って起動させようとしているのですが
うまく起動しません。

どなたかわかる方はいませんか?

No. 3772 # 68user 2004/06/13 (日) 19:44:10
>>3771 den
情報不足です。

http://www.hyuki.com/writing/techask.html を読んでください。

No. 3773 # 68user 2004/06/13 (日) 22:56:01
日記。

今日は
    http://www.amazon.co.jp/exec/obidos/ASIN/475614389X/qid%3D1087134585/249-1275008-5298706
        プログラミングテクニック - UNIXコマンドのソースコードにみる実践プログラミング手法
        (UNIX MAGAZINE COLLECTION)
を買いました。UNIX MAGAZINE に連載されていた記事をそのまま
まとめただけですが、これでたまっていた UNIX MAGAZINE を捨て
られるので、部屋が狭い人にはお勧めです。

ただ、この人の書く文章にはおもしろみのかけらもなく、全く読む
気にならないのが残念なところ。プログラミングって こんなに
つまらないものだったかなぁ、と思えることうけあいです。

No. 3774 # 68user 2004/06/14 (月) 02:54:44
日記 2。

久々に whois.cgi なぞを触っていたら、FreeBSD 5.2.1-RELEASE の
/usr/bin/whois は、いちいち NIC (Network Information Center) を
指定しなくても、
    % whois u-tokyo.ac.jp
で情報を参照できる。昔は
    % whois -h whois.nic.ad.jp u-tokyo.ac.jp
としなくてはならなかったはずなのに何故? と思ってソースを読んだ
結果、
    xxx.whois-servers.net
    (例えば TLD が jp だったら jp.whois-servers.net)。
の CNAME を引っ張ると、whois.nic.ad.jp が返ってくるので、
そこに再接続すればよいらしい。

あるいは
    % whois -h jp.whois-servers.net u-tokyo.ac.jp
とすると whois-servers.net が proxy となって whois.nic.ad.jp
から勝手に情報を取得してくれるようだ。

whois-servers.net に対応したのは、FreeBSD 4.0-RELEASE・
FreeBSD 3.4-RELEASE から。

http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/whois/whois.c

No. 3775 # kiyo 2004/06/14 (月) 13:46:37
dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか?
教えてください。

No. 3776 # yoko 2004/06/14 (月) 15:22:44
Solaris(UNIX)でフォルダの削除が行えません。
rmdir フォルダ名のコマンドでは「ディレクトリが存在しません。」
のメッセージがでます。CPコマンドで同じフォルダを同じ場所にコピーすると
同じ名前のファルダが2つできてしまいます。
このフォルダの消し方をどなたか教えていただけないでしょうか。

No. 3777 # TSURU 2004/06/14 (月) 17:21:18
>>3776 yoko

こんばんは。

rm -r <ディレクトリ名>

で削除できませんか?

No. 3778 # den 2004/06/14 (月) 21:42:32
ソースを載せます。

//***************************************************************
// From the book "Win32 System Services: The Heart of Windows 95
// and Windows NT"
// by Marshall Brain
// Published by Prentice Hall
//
// Copyright 1995, by Prentice Hall.
//
// This code implements a TCP sender.
//***************************************************************

// ssipsend.cpp

#include <windows.h>
#include <iostream.h>
#include <winsock.h>

#define NO_FLAGS_SET 0

#define PORT (u_short) 8080
#define DEST_IP_ADDR "127.0.0.1"

#define MAXBUFLEN 256

INT main(VOID)
{
    WSADATA Data;
    SOCKADDR_IN destSockAddr;
    SOCKET destSocket;
    unsigned long destAddr;
    int status;
    int numsnt;
    char toSendtxt[3][256];

    int numrcv;
    char buffer[MAXBUFLEN];

    strcpy( toSendtxt[0], "GET http://localhost:8080/example00/HitTime?userid=1207&date=20004/06/11%2008:30:00 HTTP/1.1\r\n" );
    strcpy( toSendtxt[1], "Host: localhost:8080\r\n" );
    strcpy( toSendtxt[2], "\r\n" );

    /* initialize the Windows Socket DLL */
    status=WSAStartup(MAKEWORD(1, 1), &Data);
    if (status != 0)
        cerr << "ERROR: WSAStartup unsuccessful"
            << endl;

    /* convert IP address into in_addr form */
    destAddr=inet_addr(DEST_IP_ADDR);
    /* copy destAddr into sockaddr_in structure */
    memcpy(&destSockAddr.sin_addr,
        &destAddr, sizeof(destAddr));
    /* specify the port portion of the address */
    destSockAddr.sin_port=htons(PORT);
    /* specify the address family as Internet */
    destSockAddr.sin_family=AF_INET;

    /* create a socket */
    destSocket=socket(AF_INET, SOCK_STREAM, 0);
    if (destSocket == INVALID_SOCKET)
    {
        cerr << "ERROR: socket unsuccessful" << endl;
        status=WSACleanup();
        if (status == SOCKET_ERROR)
            cerr << "ERROR: WSACleanup unsuccessful"
                << endl;
        return(1);
    }

    cout << "Trying to connect to IP Address: "
        << DEST_IP_ADDR << endl;

    /* connect to the server */
    status=connect(destSocket,
        (LPSOCKADDR) &destSockAddr,
        sizeof(destSockAddr));
    if (status == SOCKET_ERROR)
    {
        cerr << "ERROR: connect unsuccessful" << endl;
        status=closesocket(destSocket);
        if (status == SOCKET_ERROR)
            cerr << "ERROR: closesocket unsuccessful"
                << endl;
        status=WSACleanup();
        if (status == SOCKET_ERROR)
            cerr << "ERROR: WSACleanup unsuccessful"
                << endl;
        return(1);
    }

    cout << "Connected..." << endl;

    int idx = 0;
    while(1)
    {
    Sleep(1000);
        cout << "Sending..." << endl;
        numsnt=send(destSocket, toSendtxt[idx],
            strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET);
        if (numsnt != (int)strlen(toSendtxt[idx]) + 1)
        {
            cout << "Connection terminated" << endl;
            status=closesocket(destSocket);
            if (status == SOCKET_ERROR)
                cerr << "ERROR: closesocket unsuccessful"
                    << endl;
            status=WSACleanup();
            if (status == SOCKET_ERROR)
                cerr << "ERROR: WSACleanup unsuccessful"
                    << endl;
            return(1);
        }
    idx++;
    if(idx>2){
        break;
    }

    /* Wait before sending the message again */
    //Sleep(4800);
    } /* while */

    return 0;
}

それほど難しいことはしていないはずなのですが...
よろしくお願いします。

No. 3779 # TSURU 2004/06/14 (月) 23:20:59
>> 3771
Servletって、JavaのServletのことですよね?
なぜ、わざわざCのプログラムからServletを起動する必要があるのですか?
そこが分かりません。

No. 3780 # とーりすがり 2004/06/15 (火) 00:03:33
>>3776 yoko
ディレクトリを作成した時にディレクトリ名にスペースとか
コントロールコード(^hとか)が入ってしまったってことはないですか?

とりあえず そのディレクトリ上位の階層でls -l > hoge.lst
としてvi hoge.lst を表示もしくはod -x hoge.lstあたりで
確認されてみてはいかがでしょうか?
外してしたらスミマセン
  

No. 3781 # den 2004/06/15 (火) 08:41:41
>> 3779 TSURU

なぜ、わざわざといわれるとどう答えていいのかわからないのですが。
サーブレットは、起動されるとデータベースに時刻を登録するようにできています。
それでタイムカードのように出社時間と退社時間を記録してゆこうとしているのです。
そのときにわざわざブラウザを立ち上げてフォームのボタンを押してサーブレットを
起動するのは面倒らしいので、スタートアップにEXEをと登録して、
パソコンが起動するとサーブレットを呼び出すようにしようとしています。

という回答でよいでしょうか。
よろしくお願いします。

No. 3782 # den 2004/06/15 (火) 08:44:36
>> 3779 TSURU

ちなみになぜ、Cでやろうとしているかというと、Java だと各パソコンに
JREをインストールしてやらなければならないかなと思っているので
それが面倒なのでCを使おうとしています。

No. 3783 # 68user 2004/06/15 (火) 11:49:45
>>3775 kiyo
> dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか?
FreeBSD の date は 1900 年まででした。他の OS でも、time_t の仕組みに
のっけているなら、同じでしょうね。てゆーか OS 名くらい書きましょうね。

>>3776 yoko
> Solaris(UNIX)でフォルダの削除が行えません。
ファイルの特定方法もいろいろあるので参考にしてください。
    http://www.jp.freebsd.org/QandA/HTML/1671.html

>>3778 den
> ソースを載せます。
どこでどういうふうにエラーになるんですか? 「うまく起動しません」
とはどういう意味ですか? OS は? ブラウザで該当 URL を見ると正しく
記録されるのですか?

…などという点が情報不足なのですよ。期待した結果と実際の結果を書けと
    http://www.hyuki.com/writing/techask.html
にもあったはずです。

ソースをざっと見た感じでは怪しげなところはないように見えますが、
わたしの手元に Windows 開発環境がなくコンパイルできないので、
どなたかコンパイルして検証できる環境をお持ちの方がいらっしゃい
ましたらよろしくお願いします。

>>3779 TSURU
> なぜ、わざわざCのプログラムからServletを起動する必要があるのですか?
C で HTTP クライアントを作るって話なので、別に変ではないです。

No. 3784 # den 2004/06/15 (火) 13:24:16
OS は、クライアント、サーバともに Windows 2000 Professtional 又は Windows XP Professtional です。
Tomcat は、Tomcat/4.1.27 です。

サーブレットに動作したことがわかるようにコンソールへの出力が組み込んであるので
起動したことは、コンソールを見るとわかるようになっています。

ブラウザでサーブレットの URL をたたいた場合は、ちゃんとコンソールへの
出力がでて、起動していることがわかります。

No. 3785 # den 2004/06/15 (火) 13:30:15
>> 3783

HTTP は、ここで改行しないとダメだとかこういう順番でテキストを
送らないとダメだとかどういうルールがあるのでしょうか?

No. 3786 # den 2004/06/15 (火) 15:18:43
>> 3783

改行を入れるようにしたらレスポンスは返すようになってのですが、
やはりサーブレットは起動しません。

OS は、サーバ、クライアントともに Windows 2000 Professtional か Windows XP Professtional です。
Tomcat は、Apache Tomcat/4.1.27 です。

起動するというのは、コンソールに文字が出力されるということです。

ブラウザで同じことをした場合は、ちゃんと起動します。

No. 3787 # den 2004/06/15 (火) 15:19:42
>> 3783

レスポンスは、

HTTP/1.1 505 HTTP Version Not Supported
Content-Type: text/plain
Date: Tue, 15 Jun 2004 06:24:28 GMT
Server: Apache Coyote/1.0
Connection: close

・・・・・・

です。

No. 3788 # den 2004/06/15 (火) 15:30:52
>> 3783

リクエストの2行目の

strcpy( toSendtxt[1], "Host: localhost:8080" );

を削除したらうまく行きました。
どうもありがとうございました。

No. 3789 # 68user 2004/06/15 (火) 15:31:24
>>3786 den
> 改行を入れるようにしたらレスポンスは返すようになってのですが、
全くついていけません。具体的にどこをどういうふうに修正したんですか?

ふと思いましたが、
>>3778 den
> numsnt=send(destSocket, toSendtxt[idx],
> strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET);
この +1 は不要では?

No. 3790 # どら 2004/06/15 (火) 15:34:48
はじめまして。まだ初めて1ヶ月の初心者です。
すいませんがどうしてもエラーメッセージの意味がわからないので、教えていただかないでしょうか?

OSはSolarisの5.8です。

--------------------------------------------------------------------------------
ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS
6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます
。それ以外は無視されます
ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
--------------------------------------------------------------------------------

というものでした。特にldというものがいまいち理解できないのですが、ぜひとも教えてただければと思います。よろしくお願いします。

No. 3791 # den 2004/06/15 (火) 18:28:48
>> 3786

HTTP 1.0 以降では、ヘッダと本文を空行で分けているらしく、その空行が
ないためにレスポンスがないことがわかりました。

その後、HTTP Version Not Supported というレスポンスが返されるだけ
だったのですが、リクエストを "POST <<URL>> HTTP1.1" と空行だけに
したところちゃんとしたレスポンスを返すようになりました。

    

No. 3792 # TSURU 2004/06/15 (火) 20:48:47
>>3783 68user
>C で HTTP クライアントを作るって話なので、別に変ではないです。
いえ、僕は、サーバ上にある、Servletのプロセスを起動する処理を
Cのプログラムの中で実装する話だと思ってしまったので、
おかしいと思ったんですよ。

No. 3793 # TSURU 2004/06/15 (火) 21:00:07
denさんへ

根本的な話をしていいですか?

>>3781 den
の発言を読むかぎりでは、denさんのやりたいことは、
出社時間と退社時間を記録したいということですよね。
それだけのために、なぜサーブレットが必要になるんですか?
そこが分からないんですよ。
出社時間と退社時間を記録するだけだったら、別にサーブレット
を使わなくても、方法はいくらでもありますよね。
どうしてもサーブレットじゃないとだめなんですか?

でも、もうできたんですよね。
だったら、無理に他の方法でやれとは言いませんが、
ただ気になったので、書いてみました。

No. 3794 # TSURU 2004/06/15 (火) 21:57:40
denさんへ

>>3793 TSURU
の書き込みは、べつにあげあしとりとか、意地悪をするために書いたのではありません。
あくまで、単に疑問に思ったことを書いただけですので、くれぐれも誤解なきよう
お願いします。

No. 3795 # den 2004/06/15 (火) 22:24:04
>> 3793

話がややこしくなりそうなのであまり追求しようとは思わないのですが、
サーブレット以外にもやり方はあると思います。

ただインターネットエクスプローラから時間の記録ができたら便利かなと思って
そのようにしました。

でも仮で運用しているとそれでは使いづらいといわれてしまったので、
既存のサーブレットを利用して、C で起動する処理を作って済まそうと
思ったわけです。

サーブレットは、HTTPのリクエストをサーブレットコンテナが受信すれば
起動されるのでサーブレットを起動するには、HTTPクライアントとして
リクエストを送るだけでいいのです。

どうもありがとうございました。

No. 3796 # TSURU 2004/06/15 (火) 22:34:20
>>3795 den
なるほど。
細かい事情は分かりませんが、サーブレットを起動することで
済ませたかった訳ですね。
ゼロから実装するより、既存のもので済ませた方がずっど楽ですからね。
分かりました。

No. 3797 # yoko 2004/06/17 (木) 12:01:46
>>3776 yoko

返事遅くなりました。No.3776 yokoです。
No. 3783 # 68user
No. 3780 # とーりすがり
No. 3777 # TSURU
さん、レスありがとう。
ls -l > hoge.lst で調べるとtest^Mといった(^M)がついていました。
原因は分かりましたが、まだ格闘中です。
rm -r test^M
rm -r 'test^M'
rmdir 'test^M'
でも消えないんですよね。

  rm-r

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

No. 3798 # yoko 2004/06/17 (木) 17:11:08
>>3776 yoko

3776で投稿した yokoです。
rm -r test^Mで消えませんでしたがrm -r test*で消す事ができました。
皆さん、
ありがとうございました。

No. 3799 # kou 2004/06/17 (木) 21:10:06
RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。
それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか?
循環する頻度と公開鍵があれば秘密鍵も分かってしまうのでは・・?

No. 3800 # 68user 2004/06/17 (木) 23:55:01
>>3790 どら
まず、以下の質問に答えてください。

- gcc をインストールしていますか?
- Sun のコンパイラをインストールしていますか? (/opt/SUNWspro/bin/cc などが存在しますか?)
- which cc と which ld の結果は?
- echo $PATH の結果は?
- 「あなたは」どのコンパイラを使ってコンパイルしようとしていますか? (gcc or Sun の cc)
- 実際に使用されていると思われるのはどのコンパイラですか? また、その根拠は?

>>3797 yoko
> ls -l > hoge.lst で調べるとtest^Mといった(^M)が
> ついていました。
^M はエスケープシーケンス \r (0x0d) です。シェルから
入力する場合は
    sh なら
        % rm test(Ctrl-v Ctrl-m)
    tcsh なら
        % rm test(Ctrl-v Ctrl-j)
とします。csh はどっちだか知りません。

ところでなぜ tcsh は Ctrl-j が ^M で、Ctrl-m が ^J
なんでしょうね?

>>3799 kou
> RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。
> それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか?
えーと、そういうことはないんですが、何と説明すればよいか
わかりません。

    秘密鍵: e, n
    公開鍵: d, n
    暗号化: (平文^e)%n
    復号化: (暗号文^d)%n

として、今、平文と e が不明だとします。何をどうすると、
何がどういうふうに循環すると考えておられますか?

なお、(平文^e)%n という操作は単射です。つまり異なる平文が
同じ値になることはありません。

もし数学的に厳密な証明を期待しておられるなら、わたしには
その能力がないので、
      http://www.faireal.net/
での質問をお勧めします。

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