16

Fedora 18 と avahi コマンド ライン ツール (バージョン 0.6.31) を使用しています。

開発中のテスト目的で、avahi-resolve-host-name を使用してサブネット上のユニットの IP アドレスを検出します。Wireshark でリクエストとレスポンスを監視します。要求と応答が 1 回成功すると、それ以上の要求は Wireshark に表示されなくなりますが、ツールは引き続き IP アドレスを返します。コンピュータ/avahiデーモン/何かが結果を「キャッシュ」している可能性はありますか?

質問: avahi-resolve-host-name の呼び出しごとにリクエスト パケットを送信したいと考えています。これは可能ですか?

理由: いわば「誤検知」が発生しています。「test1.local」を解決しようとすると、結果の IP が取得されますが、ユニットはこの IP に配置されなくなりました。リクエストを毎回送信して、間違った IP アドレスでユニットが表示されるのを回避できるようにします。

4

2 に答える 2

7

あなたの質問に答えるのが少し遅れているようですが、他の誰かがこれに出くわした場合に備えて、一般的な回答を残しておきます.

私の答えは avahi-0.6.32_rc に基づいています。


コンピュータ/avahiデーモン/何かが結果を「キャッシュ」している可能性はありますか?

はい、avahi-daemon は検索結果をキャッシュしています。これは機能に明示的にリストされていないようですが、avahi-daemon(8)マンページには次のヒントがあります。

デーモン [...] は、ローカル プログラムが avahi-daemon が維持する mDNS レコード キャッシュを利用するための 2 つの IPC API を提供します。


avahi-resolve-host-name の EVERY CALL でリクエスト パケットを送信したいと考えています。これは可能ですか?

はい、そうです。関連するオプションはcache-entries-max(からavahi-daemon.conf(5)):

cache-entries-max=インターフェイスごとにキャッシュされるリソース レコードの数を指定する符号なし整数を取ります。値を大きくすると、大規模な LAN で mDNS が正しく機能しますが、メモリ消費量も増加します。

目的の効果を得るには、次のように設定するだけです。

cache-entries-max=0

これにより、キャッシュが完全に無効になり、リクエストごとに avahi-daemon が MDNS パケットを再発行するように強制されるため、それらを監視できるようになります。

ただし、これにより、通常の使用では avahi がほとんど役に立たなくなることにも注意してください。avahi-daemon はルックアップ パケットを発行しますが、結果を保存することができず、avahi-resolve-host-name(他のコマンドライン ツール、nss-mdns、D-Bus API などと同様に) のすべての呼び出しが失敗します。

于 2016-01-04T13:34:31.943 に答える
7

私は自分でこの問題に遭遇し、構成を変更する必要のない解決策を見つけました。単純にデーモン ( avahi-daemon --kill) を強制終了すると、キャッシュがフラッシュされるようです。私は Ubuntu 18.04 を使用していますが、デーモンは自動的に再起動されます。他のディストリビューションで強制終了後に実行されていない場合は、avahi-daemon --daemonize.

avahi デーモンを強制終了するには root が必要なため、場合によってはこれが最適なオプションではないことに注意してください。

于 2019-01-05T14:50:09.477 に答える