2011-01-03 13 views

答えて

3

あなたはSO_BINDTODEVICEソケットオプションを使用して、特定のインターフェイスにソケットをバインドすることができますが、しかし、これには、root権限が必要です。

代わりに、あなたはIP_PKTINFOオプションを設定して、あなたのインターフェイスのインデックスにin_pktinfoipi_ifindexを設定して、送信するためsendmsgを使用することができます。

+0

あなたは知っていますか:それはクロスプラットフォームの方法ですか?例えば。この方法でWindows®上で動作しますか? –

+1

@ハイ・エンジェル:私はそれを試していないが、明らかに['IPPROTO_IP'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs) .85).aspx)Windowsの 'IP_UNICAST_IF'ソケットオプション。このオプションはインタフェースインデックスを取り、現在のLinuxシステム(2012年に追加され、Linux v3.4にも追加されています)でも動作します。 – Hasturkun

+0

うーん、面白いです...私はGNU/Linuxのドキュメントのオプションについて言及していませんでしたが、WINEプロジェクトを支援するために追加された[短いメモ](http://kernelnewbies.org/Linux_3.4)が見つかりました。私はWINEプロジェクトがそれを知っていればいいと思っています:D –

7

バインドを使用します。 UDPはインターネットプロトコルを使用し、インターネットプロトコルはIPアドレスを必要とするため、IPアドレスを持たないインターフェイス経由でUDPパケットを送信することはできません。

+0

生のパケットとして送信しない限り。 – nategoose

+0

@nategooseそれは不正行為になるだろう。 – Oswald

+1

バインドは役に立ちません。 UDPパケットの送信元IPが正しい(つまり、送信しようとしているインターフェイスのIPですが)パケット自体がデフォルトインターフェイスから送信されます。 – jackhab

0

ソケットオプションIP_MULTICAST_IFを使用する必要があります。

こちらをご覧ください:Multicast-HOWTO-6.html

+0

マルチキャストでしか動作しませんか? (また、アドレスが必要と思われる) – Hasturkun

関連する問題