X



DNSで使用しているプロトコルを教えてください。

0001SAMCO
垢版 |
02/03/27 00:20ID:zfvFheF8
DNSを引くのに使用しているプロトコル(そこで流れている情報)について
知っている人がいれば教えていただけないでしょうか?

nslookup等で、
ls -d yahoo.co.jp
とかすると、yahoo.co.jp ドメインのすべてのアドレスが出てきますよね?
あれを、nslookupっていうコマンドを経由しないで使う方法はないでしょうか?
具体的には
telnet ??????? 53
としてどんなコマンドを打ち込めば目的のアドレスを知ることができるかが
知りたいです。

わかる人、書いてあるアドレス何でも結構です。教えてください
0002 
垢版 |
02/03/27 00:35ID:???
わからん。すまん。
ってかいま、誰もいないみたい。気長に待ってくれ。
00031
垢版 |
02/03/27 00:38ID:sGBtlGBo
了解です。
自分で作ってる簡易SMTPサーバで必要なだけなので
気長に待つことにします。
0004いえろ
垢版 |
02/03/27 01:27ID:???
RFC883に書いてあったと思う。
所で自前で書いてるの?
簡単に正引き・逆引きできるコンポーネントないのかなぁ・・
いやOSが何で何使ってコード書いてるがわからんのだがw
(VBとかは勘弁してくれよ)
0005
垢版 |
02/03/27 02:43ID:???
ちょっと待て。
DNSで使ってるのはudpだぞ。
telnetで出せるのはtcpだ。
ついでに言うと、nslookup で、ls コマンドを使うと
流れるのは transfer 通常の名前引きは query
最近は特定のサーバにしかtransferを許さないのが普通。

あと、正引き、逆引きを簡単に行うなら、
socket の(windowsならwinsock)
gethostbyaddr, getaddrbyhost関数を使うのが
普通だぞ?

なんか知識が大幅にずれてないか? それでsmtpサーバ作る
つもりなのか?
00061
垢版 |
02/03/27 15:27ID:kIWBEv4r
使ってるOSはWindows2000 Proで、VC6を使ってます。

最近はプロバイダのSMTPサーバが、自前のネットワークのみから
しか反応しないので、それの橋渡しをするSMTPサーバを
つくれないかな?と考えました。

メール送信部分は、相手のサーバを探して(ここがDNSのとこ)
コネクション張って、
HELO
MAIL FROM: ???
RCPT TO: ???
DATA
???
.

で送れたと思うのですが、名前を引くところに関しては
さっぱりわからなくて質問をしました。
0007ぱおぱお
垢版 |
02/03/28 04:44ID:wtogeemc
>5
別にTCPでもいいじゃん。
まー,コストの高いから普段使うのはイヤだけどね。

>1
DNSはASCIIベースのプロトコルじゃないので,普通にやるとtelnetじゃあ無理だ。
RFCを資料にするなら,RFC1035 引く方が良いぞ。
RFC883 では,肝心のMXについて触れられていない。

RFC調べたことなさそうだから,こういうのも教えてやろう。
http://www.csl.sony.co.jp/rfc/
一般的なプロトコルについては,まずSTDの一覧を探すのがいいぞ。

頑張れ。
00081
垢版 |
02/03/28 21:44ID:TQLnYYGJ
>7
ありがとう御座います。出来ました。解決です。
あと、resolverで検索をしていたので見つからなかったみたいです。
素直にdomainで検索をすれば良かったです(DNSじゃ出てこないし)。
0009ぱおぱお
垢版 |
02/03/29 19:01ID:O6tCsMJO
残念。(>ε<)
Winsockにはresolverが実装されていない。

ところで,SMTPの方のエラー処理や再送は上手くいった?
なかなか繋がらんMXも多いからな。
00101
垢版 |
02/03/30 01:32ID:n1+koA0a
>9
SMTPの方が先に組みあがっていたので、大丈夫です。
反応が遅いところもあるようですが、今のところ問題なしです。
遅いサーバーに対しては、1つのメールに対し複数のコネクションを張るようにしてあります。
これって、嫌がられそうだけど(笑。

>5
ふと思ったんですが、gethostbyaddr, getaddrbyhostでMX引けましたっけ?
単に25ポートで繋いでも無理だったので、不可能なような気が...。
もし引けるようでしたら、やり方を教えてください。お願いします。
0011
垢版 |
02/04/01 11:32ID:???
>>10 すこし時間をくだされ。知識の裏取っておく。
0012
垢版 |
02/04/02 10:54ID:???
>>10
手持ちのソケット本が出払ってた(Kよ返してくれ!)ので
ソケット関数で引けたかどうかは未確認……
引けないってことはないように思うんだが……

UDPで直接送受信する仕組みができてたら、DNSメッセージを
直接やりとりするのも可能か。
説明すると結構繁雑なので、オーム社「マスタリングTCP/IP 応用編」
の第15章5節を参照してください。
00131
垢版 |
02/04/03 15:33ID:AV3ZEb5C
>12
> オーム社「マスタリングTCP/IP 応用編」
かなり読んでます。ハイ。でも、意外と内容が薄い...。
RFCの日本語訳が見つからなかったので、英語をヒタスラ読んでますが。
DNSの応答処理が意外と面倒な事になってます。
0014
垢版 |
02/04/03 15:43ID:???
>>13
DNSの応答処理って
DNSから送られてきた応答パケット(とは限らないが)の
受信と解釈のことでしょうか。

オライリーのDNS&BINDの14章2節に、DNS問い合わせと
応答の解析を行うサンプルプログラム(C)が載ってたので
参考になるのでは。
俺はCはよく使わないのでよくわかりませんが(w
14.3にはPerlのNetオブジェクトを使った例もある。
0015 
垢版 |
02/04/04 11:38ID:???
ここホントに初級ネット板か???
0016 
垢版 |
02/04/07 04:35ID:???
>>15
初級ネットは偽名じゃ。
名前のせいで勘違いして紛れ込んでくる初心者が多いのだが致し方ないことなのだ。
00171
垢版 |
02/04/07 19:29ID:RVpV9bj7
>>14
> 応答の解析を行うサンプルプログラム
そんなのが欲しいです...。
やっとこさ、IPまで辿り着ける状態になりましたです。

> Perl
は使った事が無いので、全くわかりません。
C/C++かアセンブラかVBしか出来ません。
0018
垢版 |
02/04/08 11:26ID:???
>>17 素直にオライリー買いましょう。\5000也。
0019 
垢版 |
02/06/12 16:31ID:???
>>18
第4版は5200円だね。
0021いえろ ◆bT6c9WIwLg
垢版 |
02/10/09 16:59ID:???
誘導したのは良いが・・・ 結論が出てなかったのか!!

つーか 本買えで終わってるとは・・・
0023いえろ ◆bT6c9WIwLg
垢版 |
02/10/09 18:14ID:???
とりあえず投げるパケットの組み立て。

問い合わせパケット

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=インターネット

0024いえろ ◆bT6c9WIwLg
垢版 |
02/10/09 18:37ID:???
回答パケット(オフセットが重要なのでオフセット付きです)
※オフセットは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=インターネット
0025いえろ ◆bT6c9WIwLg
垢版 |
02/10/09 18:37ID:???
--ここから回答部--
+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レコードと追加部が続く
0026
垢版 |
02/10/09 18:50ID:???
一生懸命回答書いてたら遅れを取った。
0027いえろ ◆bT6c9WIwLg
垢版 |
02/10/09 18:59ID:???
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レコードも全く同じ方法です。
0028いえろ ◆bT6c9WIwLg
垢版 |
02/10/09 19:01ID:???
>>26
(・∀・)ニヤニヤ あ〜良い所に・・・

>この様にラベルの最後にあるポインタは「前に定義されたラベル」への
>ポインタになります

この訳あってますかね・・・RFC1035だとちょろっとしか出てこないんです。
0029いえろ ◆bT6c9WIwLg
垢版 |
02/10/09 19:23ID:???
>>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レコードと追加部が続く
0030いえろ ◆bT6c9WIwLg
垢版 |
02/10/09 19:24ID:???
>27 修正(中央辺り)

ポインタはこの値の次を0としますので33+12=45で+043からのラベルと
言うことになります。つまり'orig1'です。
+045から始まるラベルの最後にさらにポインタ0x0Fが有ります。
レスを投稿する


ニューススポーツなんでも実況