6

mDNS の Go ライブラリの改善を検討しています: https://github.com/davecheney/mdns/

著者と話をしたところ、彼は単に「私にとってはうまくいくようになった」と言っていますが、それは問題なく、オープン ソースの精神の範囲内です。

彼は、Avahi、Bonjour、および dns-sd 検出ツールがエクスポートしたサービスを見つけられないという相互運用性の問題について言及しました。

ポートと単純な名前で単純なサービスを実行するときに、Avahi によって公開されるレコードを理解しようとしています。

私は次の適切なバージョンを期待していました:

dig @localhost .local -t AXFR

Avahi がゾーンをエクスポートする可能性がありますが、私にはうまくいきませんでした (「あなたは間違ったことをしている」という合図!) - 典型的な Avahi サービスによってエクスポートされる最小レコードを理解し、自動的に同じものを調べたいと思います。Lee-Hambleys-Macbook.localmDNS の Go lang サポートを改善できるかもしれない、私のノートブックの Apple 実装からエクスポートされたものです。

他の人が Avahi/Bonjour/mDNS を使用している場合、掘り下げて期待どおりに機能していることを確認するために、どのツールを使用していますか?

#avahi の親切な人たちは、親切にも次のヒントを教えてくれました。

 killall -USR1 avahi-daemon

これにより、そのavahi-daemonゾーン ファイルが にダンプされますsyslog

しかし、理想的には、サーバーにクエリを実行する最善の方法を知りたいのですが、tcpdumpこれも有望に見えますが、ゾーン内にあるすべてのものの完全なダンプではなく、ルックアップされるレコードのみを表示しています:

sudo tcpdump dst port 53
Password:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:43:28.883763 IP 192.168.178.41.50916 > resolver2.opendns.com.domain: 50479+ A? e3191.c.akamaiedge.net. (40)
09:43:29.046201 IP 192.168.178.41.61989 > resolver2.opendns.com.domain: 55378+ PTR? 251.0.0.224.in-addr.arpa. (42)
09:43:29.123784 IP 192.168.178.41.56659 > resolver2.opendns.com.domain: 26471+ A? p05-btmmdns.icloud.com.akadns.net. (51)
09:43:29.819277 IP 192.168.178.41.53504 > resolver2.opendns.com.domain: 32010+ PTR? 220.220.67.208.in-addr.arpa. (45)
09:43:47.379251 IP 192.168.178.41.50916 > resolver2.opendns.com.domain: 50479+ A? e3191.c.akamaiedge.net. (40)
09:43:55.900406 IP 192.168.178.41.60511 > resolver2.opendns.com.domain: 32846+ AAAA? lc22.prod.livefyre.com. (40)
09:44:04.115159 IP 192.168.178.41.50916 > resolver2.opendns.com.domain: 50479+ A? e3191.c.akamaiedge.net. (40)
^C
7 packets captured
3187 packets received by filter
0 packets dropped by kernel
4

1 に答える 1

1

mDNS は、プロトコルの動作方法が原因で、ゾーン転送をサポートしていません。私が知る限り、2つの可能なアプローチがあります:

1)ターゲット (サーバー/サブネット) にクエリを実行して、ブルート フォース アプローチを試します。これは、dig を使用して行うことができます。クエリをマルチキャスト アドレスに送信し、ターゲットをクエリするだけです。

掘る -x 192.168.0.10 -p 5353 @224.0.0.251

mDNS ターゲットの列挙を支援するいくつかのスクリプトとツールも用意されています。いくつかの例は次のとおりです。

2)デーモンにそのゾーン ファイル (または設定) を強制的にダンプさせます。アバヒが従うことはすでにわかっている

killall -USR1 avahi-daemon

Apple の Bonjour には、ダンピング ゾーン情報を実装しないmDNSResponderが含まれています。ただし、同様の利点のためにログを追加できます

SIGUSR1 シグナルは追加のログ記録を切り替えます。警告と通知はデフォルトで有効になっています。

   % sudo killall -USR1 mDNSResponder

このロギングが有効になると、ユーザーはさらに syslog(1) を使用して、プロセスのログ フィルタを変更できます。たとえば、ログ レベル緊急 - デバッグを有効にするには、次のようにします。

   % sudo syslog -c mDNSResponder -d

SIGUSR2 シグナルは、パケットのロギングを切り替えます。

   % sudo killall -USR2 mDNSResponder

SIGINFO シグナルは、内部状態のスナップショットの概要を /var/log/system.log にダンプします。

   % sudo killall -INFO mDNSResponder

また、Wiresharkを使用してプロトコル エラーをデバッグすることもできます。相互運用性エラーを解決するには、これで十分です。

于 2015-05-02T17:09:55.343 に答える