私は高度なネットワーク管理に不慣れで、UDPブロードキャストでテストを行いたいので、ループバックインターフェイスのブロードキャストアドレスが必要です。マシンはオフラインです。つまり、ネットワークがありません。
提案されたコメントで1人のユーザーとしてスイッチを購入することなく、ifconfig
を介してそれを達成するにはどうすればよいですか。 Linuxでは、127.255.255.255を使用するだけで、ネットワークやスイッチがなくてもブロードキャストは正常に機能します。ネットワークがある場合は、明らかに255.255.255.255を使用できます。
Linuxでは動作するがos/xでは動作しないことを自分で確認する方法は次のとおりです。
2つの端子を開き、両方に入力します。
nc -u -l 55555
3番目のターミナルを開き、必要に応じてsocatをインストールし、次のように入力します。(netcatがブロードキャストをサポートしていない場合)
echo -n "TEST" | socat - udp-datagram:127.255.255.255:55555,broadcast
両方の端末メッセージを受信していることがわかります。
127.0.0.1で同じ実験を試みた場合、1つの端末だけが期待どおりにメッセージを受け取ります。
OS Xで同じテストを実行しても、同じ動作は見られません。
私が探しているのは、可能であればブロードキャストのソフトウェア回避策です。
マルチキャストを使用できず(ブロードキャストする必要があります)、ネットワーク経由でテストできません(マシンがオフラインです)。
ブロードキャストアドレスを「追加」しません。あなたはトラフィックをネットワークのブロードキャストアドレスに転送します。
ブロードキャストアドレスは完全に仮想的な概念であり、通常の方法でホストに「追加」または割り当てるべきではありません。
上記の規則の例外は、ブロードキャストアドレスが非標準である可能性がある場合に行われるブロードキャストアドレスの指定(
ifconfig broadcast
を使用)です。一般に、ifconfigにbroadcast
オプションを使用する必要がある場合は、何か奇妙なことをしていて、おそらく間違っている...
ブロードキャストを127.0.0.0/8(ローカル/ループバック)ネットワークに送信する場合、理論的には単にトラフィックを127.255.255.255に転送しますが、それを実行しようとすると、ループバックデバイスが原因で機能しないことがわかります。 BROADCAST
トラフィックをサポートしていません。
Macでifconfig lo0
を実行すると、次のような出力が生成されます。
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
nd6 options=1<PERFORMNUD>
フラグフィールドにBROADCAST
がないことに注意してください。
ブロードキャストオプション(アドレス)を指定してデバイスを構成すると、アドレスが無視されます。 BSDまたはLinux(Debian)ボックスも同様に動作し、他のプラットフォームでも同様に動作すると思いますが、十分に検索すると、ループバックデバイスでBROADCAST
フラグを設定できる奇妙なアヒルが見つかる場合があります。
この背後にあるロジックについて説明します このFreeBSDメーリングリストの投稿で 。ブロードキャストを許可しない別の理由については、 このサーバー障害の回答 に関するコメントでも説明されています。これは、MULTICAST
(はが通常サポートされている)を使用する代替案を提案しています。ループバックインターフェイスによる)。
特にテストケースに関して:あなたが見ているものは予期された振る舞いではありません。私はあなたの行動を再現することができましたが、それは非常に限られた状況でのみでした。
Linuxではループバックデバイスでのブロードキャストが実際には機能しないことを示す、より堅牢なテストについては、便利なLinuxマシンで次のテストケースを試してください(私のテストケース:Ubuntu 13.04) :
ループバックインターフェイスで2番目のアドレス(3番目、4番目、5番目-必要な数)を構成します。
各ループバックアドレスでリッスンしているnetcatインスタンスを開始します。 -nc -u -l 127.0.0.1 5555
nc -u -l 127.0.0.2 5555
nc -u -l 127.0.0.3 5555
...等
socat
を使用してブロードキャストテストコマンドを実行しますecho TEST | socat - udp-datagram:127.255.255.255:5555,broadcast
ループバックインターフェイスがBROADCAST
のサポートをアドバタイズしないため、netcatウィンドウのnoneがメッセージ(Expected Behaviorを受信することに注意してください。そのフラグフィールド)、ただし、直接アドレス指定すると(たとえば、echo TEST2 | socat - udp-datagram:127.0.0.2:5555
)、問題なくメッセージを受信します。
ループバックインターフェイスがBROADCAST
(のflags
フィールドで決定できる)をサポートしていない限り、要求している「ソリューション」はどのプラットフォームにも存在しません(または少なくとも機能しないはずです) ifconfig)-あなたが話しているプラットフォームはループバックインターフェースでのブロードキャストのサポートをアドバタイズしないので、あなたはあなたが求めていることをすることができません。