DNSで使用しているプロトコルを教えてください。
DNSを引くのに使用しているプロトコル(そこで流れている情報)について 知っている人がいれば教えていただけないでしょうか? nslookup等で、 ls -d yahoo.co.jp とかすると、yahoo.co.jp ドメインのすべてのアドレスが出てきますよね? あれを、nslookupっていうコマンドを経由しないで使う方法はないでしょうか? 具体的には telnet ??????? 53 としてどんなコマンドを打ち込めば目的のアドレスを知ることができるかが 知りたいです。 わかる人、書いてあるアドレス何でも結構です。教えてください わからん。すまん。 ってかいま、誰もいないみたい。気長に待ってくれ。 了解です。 自分で作ってる簡易SMTPサーバで必要なだけなので 気長に待つことにします。 RFC883に書いてあったと思う。 所で自前で書いてるの? 簡単に正引き・逆引きできるコンポーネントないのかなぁ・・ いやOSが何で何使ってコード書いてるがわからんのだがw (VBとかは勘弁してくれよ) ちょっと待て。 DNSで使ってるのはudpだぞ。 telnetで出せるのはtcpだ。 ついでに言うと、nslookup で、ls コマンドを使うと 流れるのは transfer 通常の名前引きは query 最近は特定のサーバにしかtransferを許さないのが普通。 あと、正引き、逆引きを簡単に行うなら、 socket の(windowsならwinsock) gethostbyaddr, getaddrbyhost関数を使うのが 普通だぞ? なんか知識が大幅にずれてないか? それでsmtpサーバ作る つもりなのか? 使ってるOSはWindows2000 Proで、VC6を使ってます。 最近はプロバイダのSMTPサーバが、自前のネットワークのみから しか反応しないので、それの橋渡しをするSMTPサーバを つくれないかな?と考えました。 メール送信部分は、相手のサーバを探して(ここがDNSのとこ) コネクション張って、 HELO MAIL FROM: ??? RCPT TO: ??? DATA ??? . で送れたと思うのですが、名前を引くところに関しては さっぱりわからなくて質問をしました。 >5 別にTCPでもいいじゃん。 まー,コストの高いから普段使うのはイヤだけどね。 >1 DNSはASCIIベースのプロトコルじゃないので,普通にやるとtelnetじゃあ無理だ。 RFCを資料にするなら,RFC1035 引く方が良いぞ。 RFC883 では,肝心のMXについて触れられていない。 RFC調べたことなさそうだから,こういうのも教えてやろう。 http://www.csl.sony.co.jp/rfc/ 一般的なプロトコルについては,まずSTDの一覧を探すのがいいぞ。 頑張れ。 >7 ありがとう御座います。出来ました。解決です。 あと、resolverで検索をしていたので見つからなかったみたいです。 素直にdomainで検索をすれば良かったです(DNSじゃ出てこないし)。 残念。(>ε<) Winsockにはresolverが実装されていない。 ところで,SMTPの方のエラー処理や再送は上手くいった? なかなか繋がらんMXも多いからな。 >9 SMTPの方が先に組みあがっていたので、大丈夫です。 反応が遅いところもあるようですが、今のところ問題なしです。 遅いサーバーに対しては、1つのメールに対し複数のコネクションを張るようにしてあります。 これって、嫌がられそうだけど(笑。 >5 ふと思ったんですが、gethostbyaddr, getaddrbyhostでMX引けましたっけ? 単に25ポートで繋いでも無理だったので、不可能なような気が...。 もし引けるようでしたら、やり方を教えてください。お願いします。 >>10 すこし時間をくだされ。知識の裏取っておく。 >>10 手持ちのソケット本が出払ってた(Kよ返してくれ!)ので ソケット関数で引けたかどうかは未確認…… 引けないってことはないように思うんだが…… UDPで直接送受信する仕組みができてたら、DNSメッセージを 直接やりとりするのも可能か。 説明すると結構繁雑なので、オーム社「マスタリングTCP/IP 応用編」 の第15章5節を参照してください。 >12 > オーム社「マスタリングTCP/IP 応用編」 かなり読んでます。ハイ。でも、意外と内容が薄い...。 RFCの日本語訳が見つからなかったので、英語をヒタスラ読んでますが。 DNSの応答処理が意外と面倒な事になってます。 >>13 DNSの応答処理って DNSから送られてきた応答パケット(とは限らないが)の 受信と解釈のことでしょうか。 オライリーのDNS&BINDの14章2節に、DNS問い合わせと 応答の解析を行うサンプルプログラム(C)が載ってたので 参考になるのでは。 俺はCはよく使わないのでよくわかりませんが(w 14.3にはPerlのNetオブジェクトを使った例もある。 >>15 初級ネットは偽名じゃ。 名前のせいで勘違いして紛れ込んでくる初心者が多いのだが致し方ないことなのだ。 >>14 > 応答の解析を行うサンプルプログラム そんなのが欲しいです...。 やっとこさ、IPまで辿り着ける状態になりましたです。 > Perl は使った事が無いので、全くわかりません。 C/C++かアセンブラかVBしか出来ません。 >>17 素直にオライリー買いましょう。\5000也。 誘導したのは良いが・・・ 結論が出てなかったのか!! つーか 本買えで終わってるとは・・・ なんか質問スレで呼ばれてる? まぁいいか。 RFCを読んでUDPでパケット投げてみました。 ものすごい勢いで誰かが質問に答えますPart30 http://pc.2ch.net/test/read.cgi/hack/1033381894/991-992 に記載されていたパケットダンプは一部分ですので問題の 個所は理解できません。 とりあえず投げるパケットの組み立て。 問い合わせパケット 00 1F :データ長 --ここからヘッダ-- ?? ?? :16ビットの適当なID(乱数でOK) 00 00 :QR=0 OPCODE=0 AA=0 TC=0 RD=0 RA=0 Z=0 RCODE=0 00 01 :質問の数(今回は1個なので1) 00 00 :回答の数=当然0 00 00 :NSレコードの数=0 00 00 :追加部の数=0 --ここから質問部-- 今回の内容は mc.kcom.ne.jp 02 6D 63 :ラベルの長さとmcのキャラコード 04 6B 63 6F 6D :ラベルの長さとkcomのキャラコード 02 6E 65 :ラベルの長さとneのキャラコード 02 6A 70 :ラベルの長さとjpのキャラコード 00 :ドメイン終了=ルートに辿り着いた事を表す 00 0F :MXを問い合わせてます(15) 00 01 :問い合わせクラス 01=IN=インターネット 回答パケット(オフセットが重要なのでオフセット付きです) ※オフセットは10進数です -002: 00 9E :データ長 (オフセットマイナスなので注意!) --ここからヘッダ-- +000: ?? ?? :送ったID(一致を確認すること) +002: ?? ?? :回答時のフラグ(サーバによって変わります) +004: 00 01 :質問の数=質問パケットと一致 +006: 00 01 :回答の数=1個 +008: 00 02 :NSレコードの数=2 +010: 00 04 :追加部の数=4 --ここから質問部のコピー-- +012: 02 6D 63 :ラベルの長さとmcのキャラコード +015: 04 6B 63 6F 6D :ラベルの長さとkcomのキャラコード +020: 02 6E 65 :ラベルの長さとneのキャラコード +023: 02 6A 70 :ラベルの長さとjpのキャラコード +026: 00 :ドメイン終了=ルートに辿り着いた事を表す +027: 00 0F :MXを問い合わせてます(15) +029: 00 01 :問い合わせクラス 01=IN=インターネット --ここから回答部-- +031: C0 0C :Name=Offset+0x0C(12)=0xC000+0x0Cの意味(圧縮) +033: 00 0F :TYPE=15=MXレコード +035: 00 01 :CLASS=1=IN=インターネット +037: 00 01 48 23 :TTL=0x00014823 +041: 00 0A :リソースデータ長 --ここからリソースデータ-- +043: 05 6F 72 69 67 31 :ラベル長(05)と'orig1'のキャラクタ +049: C0 0F : Offset+0x0F(15)(圧縮) ただし、これはヘッダからのオフセット ↓これ以降NSレコードと追加部が続く DNSの回答はいちいちFQDN返してると大変なので一部の文字列を 共有しています。(これをRFCでは圧縮と書いてるみたい) 上記例では +031に名前(ホスト名)を書いても良いのですが、ここに 記載されるべき名前はリソースデータの名前(MX問い合わせの回答)と 一致しますので「そこまでの相対アドレス」を書きます。 このように相対アドレスを書く場合は0xC000+ポインタ値を使います。 0xC0で大丈夫な理由は、1つのラベルは63文字以内と定められている からです。 ポインタはこの値の次を0としますので31+12=43で+043からのラベルと 言うことになります。つまり'orig1'です。 +043から始まるラベルの最後にさらにポインタ0x0Fが有ります。 この様にラベルの最後にあるポインタは「前に定義されたラベル」への ポインタになります。つまり+015から始まるラベル'kcom.ne.jp'です。 +015から始まるラベルは最後がルートで終わってますので連結は終了です。 これでFQDNである'orig1.kcom.ne.jp'を表しています。 +043からも同じ方法で、NSレコードも全く同じ方法です。 >>26 (・∀・)ニヤニヤ あ〜良い所に・・・ >この様にラベルの最後にあるポインタは「前に定義されたラベル」への >ポインタになります この訳あってますかね・・・RFC1035だとちょろっとしか出てこないんです。 >>25 しまった修正 --ここから回答部-- +031: C0 0C :Name=Offset+0x0C(12)=0xC000+0x0Cの意味(圧縮) +033: 00 0F :TYPE=15=MXレコード +035: 00 01 :CLASS=1=IN=インターネット +037: 00 01 48 23 :TTL=0x00014823 +041: 00 0A :リソースデータ長 --ここからリソースデータ-- +043: 00 0A :Preference=10 ←追加 +045: 05 6F 72 69 67 31 :ラベル長(05)と'orig1'のキャラクタ +051: C0 0F : Offset+0x0F(15)(圧縮) ただし、これはヘッダからのオフセット ↓これ以降NSレコードと追加部が続く >27 修正(中央辺り) ポインタはこの値の次を0としますので33+12=45で+043からのラベルと 言うことになります。つまり'orig1'です。 +045から始まるラベルの最後にさらにポインタ0x0Fが有ります。 ちょっとポインタの扱い違うー オフセット+031で書かれる「NAME」は、資源レコードの、 定義対象のレコード名。なのでこの場合は、 mc.kcom.ne.jp が求められます。 それでオフセット値は12、これはヘッダ部のIDからのバイト数なので、 回答パケットのオフセット+012からの記述、つまり質問部で使った mc.kcom.ne.jp を示しています。 また、資源レコードに関しては、まず5文字 'orig1'を記述した後、 オフセット値15を参照であるので、さっき使ったとこの、ちょっと後、 つまり質問部のkcom.ne.jpの部分を示していますね。 オフセットは相対アドレス指定ではなくて絶対アドレス指定ですよん。 追記 mc.kcom.ne.jp. 82884 IN MX 10 orig1.kcom.ne.jp. というレコードの内容がすっかり回答部にあるわけです。 >>31 あ〜やっぱ そうなんですか。帰りながらもしやと思ってました。 RFCに書いてあった相対パターンはいったい何なんだ? >>33 >RFCに書いてあった相対パターンはいったい何なんだ? え? 差し支えなければ引用あるいはポイントを… ここです 4.1.4. Message compression 最後 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 40 | 3 | F | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 42 | O | O | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 44 | 1 1| 20 | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 64 | 1 1| 26 | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 92 | 0 | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ The domain name for F.ISI.ARPA is shown at offset 20. The domain name FOO.F.ISI.ARPA is shown at offset 40; this definition uses a pointer to concatenate a label for FOO to the previously defined F.ISI.ARPA. The domain name ARPA is defined at offset 64 using a pointer to the ARPA component of the name F.ISI.ARPA at 20; note that this pointer relies on ARPA being the last label in the string at 20. The root domain name is defined by a single octet of zeros at 92; the root domain name has no labels. この最後の、 The root domain name isdefined by a single octet of zeros at 92; the root domain name has no labels. オフセット64にフラグ11と26が書いてあり、その先がオフセット92見たいなんです。 これを読んだもんですから、ラベル無し=相対なんじゃないかな?と・・・ でも設定の意味からすると虎さんのが合ってますよね・・・ F.ISI.ARPA のドメインネームは、オフセット20に示されている。 ドメインネーム FOO.F.ISI.ARPA は、オフセット40で示されている。 この定義では、ラベル「FOO」に続けて、以前に定義された F.FOO.ISI.ARPA へのポインタを結合している。 オフセット64で定義されているドメイン名 ARPA は、オフセット20にて 既に定義されている F.ISI.ARPAの構成要素へのポインタを利用して定義 されている。 -注) この ARPA を示すポインタは、オフセット20からの文字列の最後のラベル である ルートドメイン名は、1オクテットの0でオフセット92で定義されている。 ルートドメイン名は、ラベルを持たない。 てな感じなので、やはし相対指定ではないっすね オフセット44に、20とか書いてあって、またオフセット64を 例に出してるから解りにくくなるんだなこれは。 日本語変なのはご容赦 ここで言うルートドメインてのは 末尾の「.」ですね。 あ、続きの説明じゃなかったのか!! つーかオフセット戻せよ〜 了解です。 末尾の.はその昔「いえろ」じゃなかった頃かなった頃 ココで質問したけど答えてもらえなかったなぁ〜(笑 オフセット20からの記述は、このような感じだろうな +0020:01 'F' +0022:03 'ISI' +0026:04 'ARPA' +0031:00 さてと、オフセット44だの64だのでは、事前に定義されてる ドメイン名を使って、ドメイン名を圧縮してあるわけだけれど、 オフセット92では、ルートを再定義している。 理屈に合わないわけじゃないよ。 ポインタは2オクテット、ルート定義は1オクテットで済むから ルートに関しては再定義したほうが低コストなのだ。 ところでこのスレッド一回あげとく? あ゙。わかった・・・ F.ISI.ARPA. FOO.F.ISI.ARPA. ARPA. . の例だったのか・・・ オフセット64の値が26。オフセット64で2オクテット使ってるから66 66+26=92!! ぴったり92だったんですよ・・・ この例がオフセット96とかだったら勘違いしなかったかも(汗 あ、上げてなかったですね。上げますか。 元質問者にはこのスレッドを読んでもらえたのだろうか… 掲示板はTCPじゃなっくって UDPみたいな物なので 気にしないのが一番かと・・・ TTLが2とか3だったので届かなかったんでしょう・・・苦笑 ssdpってどんなプロトコルですか? 初心者なので簡単にお願いします。 Ehternet、IP、HTTPなど、さまざまなプロトコルがありますが、 これらをOSI基本参照モデル7階層(あぷせとねでぶ)に分けろ、といわれると わかりません。どう覚えれば・・・・。 聞くとこはここじゃないよ、という場合言ってください。 OSIはくわしくしらないけど、、、 TCP/IPではレイヤ1〜4と7しか使ってないよ。。 一般的には、 レイヤ7:HTTP、FTP、TELNET等々 レイヤ4:UDP、TCP、ICMP レイヤ3:IP レイヤ2:DLC(ethernet) レイヤ1:UTPケーブル等規定 こんな感じで。。実際に見て覚えるが早いとおもうけど フリーのetherealとかでキャプチャしてみれば? そもそもTCP/IPはOSI参照モデルに準拠して実装されたわけじゃないが。と思うがな。 今ネットをやっていたら急にすべてのページが表示できなくなりました、誰か助けてください!お願いします。ビッグローブです、ルーター、ADSLモデム装備です DNSサーバーってJavaでプログラミングできますか? このソフトでIPアドレスを隠すことは出来ますか? http://www.rikisoft.net/ できれば迷惑メールのプロパティから DNSサーバーのアドレスを使用できるものでいくつか教えてください。 どうかよろしくお願いします。 「Reverse IP」というDNS逆引きサービスをWebアプリで作ってみたいです。 Reverse IP http://www.domaintools.com/reverse-ip/ どうしてかと言うと、レンタルサーバ(XREA等)でアカウントを取るとき、どのサーバがすいているか調べるためです。 バーチャルドメインを使っているレンタルサーバは、1つのIPアドレス(サーバ)に複数のドメイン名がひも付けされています。 http://www.value-domain.com/xreaip.php IPアドレスを1個1個手入力して調べるのは大変だと思いました。 PHPでDNS逆引きのWEBアプリを作ろうとしたら、gethostbyaddr()という関数では思ったような結果が得られませんでした。 http://jp2.php.net/manual/ja/function.gethostbyaddr.php Reverse IPで「210.172.108.229」を検索すると http://www.domaintools.com/reverse-ip/?hostname=210.172.108.229 のように There are 611 domains hosted on this IP address. =611個のドメイン名が対応していると表示されますが、 PHPで <?php $ip = "210.172.108.229"; $hostname = gethostbyaddr($ip); echo $hostname; ?> というスクリプトを実行すると、 s250.xrea.com しか表示されません。 これはDNSが1個しかホスト名を返していないのかもしれませんが、なぜReverse IPでは611個という数字が返されるのか仕組みがわかりません。 どうやったらReverse IPと同じようにバーチャルドメインの数を調べるスクリプトが作れるでしょうか? 経路制御プロトコルを開発する場合,どのようなプロトコルを開発しますか?あなたが最も良いと考えるパケットの配送経路について説明し,その様な経路を設定するためにはどうすればよいかを説明しなさい. ∧,,,∧ ( ・∀・) ほー それで ( : ) し─J ε ⌒ヘ⌒ヽフ ( ( ・ω・) ふむふむ しー し─J 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね 創価氏ね >>1 おめでとう。 本スレッドは10年と350日をかけて ついにネットワーク板の最下層まで辿り着きました。 深度は365です。 DNSの名前解決で、「再帰問合せ(recursive query)」と「反復問合せ(iterative query)」の2種類がありますが、なんで再帰と命名したんだろ?…いまいち、ピンと来ません。 スタブ・リゾルバーから見て、どこが再帰的なんだろう? read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる