68user's page 掲示板

Prev< No. 4379〜4380> Next  [最新発言に戻る] [過去ログ一覧]
No. 4379 # 68user 2005/11/10 (木) 20:19:47
>>4374 DNS勉強中
ありがとうございます。

以前も length では、というご指摘をいただいたのですが、RFC などの
一次資料を見つけられずにいます。
    http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=4283
    http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=4293

この件に関する一次資料をご存知でしょうか?

>>4375 DNS勉強中
> 分からないのは【DNS query 送信時にごみデータが後ろに大量に付く】事です。

> sendto(s, (const char *)&DNS_Send, sizeof(DNS_Send), 0, (struct sockaddr *)&server, sizeof(server)) < 0) {
sizeof(DNS_Send) バイトを送信しているのがまずいので、必要なバイト数分だけ
送信すればよいと思います。この例なら送信バイト数は

    (DNS_Send.QUERIES - &DNS_Send.id + count + 4) バイト

ですかね? (自信なし) まぁこれだと汚いので、質問数や長さを保持する変数を
追加した方がよいと思います。

あとは struct DNS_Packet のパディングが心配です (実際は id や flag は
short なのでほとんどの環境では問題ないと思いますが)。わたしなら
    struct DNS_Query {
        ....
    };
    struct DNS_Question {
        short id
        short flag;
        short QDCOUNT;
        short ANCOUNT;
        short NSCOUNT;
        short ARCOUNT;
      struct DNS_Query *q;
    };
    struct DNS_Packet {
        char data[1000];
        int length;
    };
として (命名は適当)、問い合わせ内容を DNS_Question に構築し、送信時に
DNS_Packet にコピーして send すると思います。といっても、わたしのソースの方
では全く実践できていないですけれども。

ところで、全体的にはかなり読みやすいと思うんですが、このソースのライセンスを
教えてください。要は、これを修正したものを、わたしのページに C のサンプル
コードとして記載することは可能でしょうか? ということです。


>>4378 Yuusuke
一般ユーザで展開したときに他ユーザの所有者でファイルを作成できてしまうと、
適当な tar ファイルをでっちあげれば他のユーザのファイルを自由に作成できる
ことになってしまうので、普通の UNIX ではできません。

root で展開するのもひとつの方法ですが、Solaris では /etc/system で
    rstchown=0
と設定することで一般ユーザが chown できるようになります (セキュリティを
犠牲にするので、わたしはしません)。そうしておけば、一般ユーザが tar xfp
すると、他ユーザが所有するファイルを作成できるかもしれません (試してません)。

No. 4380 # DNS勉強中 2005/11/11 (金) 01:20:02
>>4379 68userさん
ご返答をいただきありがとうございます。

length の件ですが、もうしわけありませんが一次資料は存じておりません。
今回のプログラムで私が一次資料として利用したのが、
こちらのサイトということもありまして(^^;。

それとごみデータの件ですが、おっしゃりたいことは分かりました
(まだソース上では試しておりませんが)。
送信するデータ量で調整すると言う発想は出てきませんでした。
明日にでもその部分は組めそうな気がします。
どうもありがとうございます。

後、構造体の中に構造体を書くスタイルも勉強になりました。
このスタイルを取り入れた形で動かせるよう努力してみたいと思います。

それとライセンスの件ですが、このソースの中に書かれている関数
( make_domain, parse_response, get_domain )や
出力結果を見ていただければ分かるかと思いますが、
resolver-1.pl を C に移植しようとしたものがこのソースです。
移植作業自体は私が行いました。
もっとも pack とかの動作をどうやって C で再現すればよいのか等
わからない事が多かったので、
resolver-1.pl の出力結果や etherealの結果から
自分なりに解釈して組んでいる部分はありますので、
完全移植は出来ておりません。

そのため、このサイトで有効利用していただけるのでしたらありがたいです。
私がこのサイトから学んだことを還元できればうれしいですし、
修正したソースを見て勉強させていただけたらと思います。

とりあえず自分で組んだソースなので、
現在このソースが抱えている内部的な問題とか分かる範囲で明日まとめてみます。
実際にソースを読んでいただいているようですが、
情報を提供しないよりは、提供した方が良いかなと思いますので。

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