#topicpath *ブロードキャストパケットの受信とユニキャスト再送信 [#i4a9b23a] RIGHT:EBUG 第34回会合 ~ 2010年6月21日、十日町市 ~ 川俣吉広、kaw@on.rim.or.jp **概要 [#m8cd3143] 構内LANを使用して電源設備監視をリモートで行うことになり、 その際に生じたトラブルを表題の方法で解決したもの。 ***システム導入 [#b30c11ae] 電源設備を監視するシステムを導入し、リモートにて監視を行うことになった。 伝送路としては既存の社内ネットワークを使用。 設備メーカーには担当部署経由で事前にネットワーク構成図を提出。 システム導入後、リモートでの監視が行えないとの不具合が発生した。 #ref(BACnet.gif,wrap) このシステムでは、BACnet/IPというプロトコルを使用して通信を行う。 このメーカの実装では、GCS (Global Control Server)や LCS (Local Control Server) から HIS (Human Interface Station) へ データの同報を47808/UDPのブロードキャストパケットで行っている。 ''→ 上の構成では当然他セグメントには伝播しない。'' **ソリューション [#d4a36411] #ref(BACnet-Repeater.gif,wrap) ネットワークを同一セグメントで構成し、VPN上はL2で接続し直すなどの案も出たが、 最終的にはブロードキャストパケットをキャプチャし、ユニキャストに変換して個々のHISに送りつける変換機を作成した。 ***Perlで実装[#eb0acb53] -Net::RawIPを使う&br;&ref(testcode.pl.txt); --pcap APIを使用 --pcap libraryのフィルタリングルールが適用可能。 -Socketを使う&br;&ref(relay_udp_packet.pl.txt); --ソケットオプションで SO_BROADCASTを指定すると、自アドレス宛だけでなく自身の属しているネットワーク宛のブロードキャストパケットも受信できる。 ---- #topicpath