2011-01-03 12 views

cevap

3

Sen SO_BINDTODEVICE soket seçeneğini kullanarak belirli bir arayüze bir soket bağlayabilir, ancak bu kök ayrıcalıkları gerektirir.

Alternatif olarak, ayar, IP_PKTINFO seçeneğini ayarlayın ve göndermek için sendmsg kullanabilirsiniz in_pktinfo 'ın ipi_ifindex arayüzünüze endeksine.

+0

Bilmiyor musunuz: çapraz platform yolu mu? Örneğin. Windows® üzerinde bu şekilde çalışır mı? –

+1

@ Hi-Angel: Denemedim, ama görünüşe göre ['IPPROTO_IP'] 'i kullanabilirsiniz (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586 (v = vs .85) Windows'da .aspx) 'IP_UNICAST_IF' soket seçeneği. Bu seçenek bir arayüz endeksi alır ve mevcut Linux sistemleri üzerinde de çalışmalıdır (2012'de eklenmiştir ve Linux v3.4'te mevcuttur). – Hasturkun

+0

Hmm, ilginç… GNU/Linux belgelerinde seçenek hakkında bir şey bulamadım, ancak WINE projesine yardımcı olmak için eklendiğini [kısa not] (http://kernelnewbies.org/Linux_3.4) buldu. Umarım WINE projesi bunun farkındadır: D –

7

Bağlantıyı kullanın. UDP paketlerini IP adresi olmayan bir arabirim üzerinden gönderemezsiniz, çünkü UDP Internet Protokolünü kullanır ve Internet Protokolü bir IP adresi gerektirir.

+0

Bunları ham paketler olarak göndermediğiniz sürece. – nategoose

+0

@nategoose Bu hile olurdu. – Oswald

+1

Bind yardımcı olmuyor. UDP paketinin kaynak IP'si doğrudur (yani, göndermeye çalıştığım arabirimin IP adresidir), ancak paketin kendisi varsayılan arabirimden gider. – jackhab