前提・実現したいこと
富士通製電子ペーパーFMV-DPP02を管理するライブラリを作成しています。ネットワーク上で機器を探索するにはmDNSでtcp/dp_fujitsuサービスを検索する必要があり、そのコードをRubyで書いています。
mDNS検索にRuby標準添付のresolvライブラリにあるResolv::MDNS
を使っているのですが、Windows 10(以下、Win10)およびWin10のWindows Subsystem for Linux(以下、WSL)上ではうまく検索できません。対して、仮想上のCentOSでは同じコードでレコードを取得可能であり、なぜ、Win10上では動作しないのかがわかりません。
発生している問題・エラーメッセージ
Win10上では、タイムアウトまで何も検索できず、結果は空になります。CentOS上ではレコードが取得できています。
該当のソースコード
Ruby
1# frozen_string_literal: true 2 3require 'resolv' 4require 'pp' 5 6mdns = Resolv::MDNS.new 7mdns.timeouts = 60 8list = mdns.getresources('_dp_fujitsu._tcp.local.', 9 Resolv::DNS::Resource::IN::PTR) 10pp list
試したこと
Windowsのファイアウォールの受信ルールでWin10上およびWSL上のRubyはプログラム指定で任意の通信を許可しています。送信はブロックしないに設定しています。指定しているプログラムを除けば、メーカー製の正式アプリ(mDNSで検索して接続している)と同じルールです。
ファイアウォールを完全無効にしたとき、一度だけ取得できたときがありましたが、その後再現はしませんでした。なぜ、一度だけ成功できたのか理由はわかりません。
補足情報(FW/ツールのバージョンなど)
【問題が起きる環境】
OS: Windows 10 Pro 1809
Ruby: ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32] (Ruby Installer)
OS: Ubuntu 18.04LTS (Windows Subsystem for Linux、上記のWin10上)
Ruby: ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux] (rbenv installより)
ファイアウォールはWindows標準のファイアウォールです。他にセキュリティソフトウェアはインストールしていません。
【正常な環境】
OS: CentOS 7 (Vagrant + Hyper-V)
Ruby: ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux] (SCL rh-ruby25パッケージ)
※ ネットワークは直接LANと通信できるように「外部」仮想スイッチを作成し、紐付けています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。