2011-01-03 40 views

Trả lời

3

Bạn có thể gắn một ổ cắm để một giao diện cụ thể bằng cách sử dụng tùy chọn SO_BINDTODEVICE ổ cắm, tuy nhiên điều này đòi hỏi phải có quyền root.

Cách khác, bạn có thể đặt tùy chọn IP_PKTINFO và sử dụng sendmsg để gửi, đặt in_pktinfo 's ipi_ifindex vào chỉ mục giao diện của bạn.

+0

Bạn không biết: nó là một cách crossplatform? Ví dụ. nó có hoạt động theo cách này trên Windows® không? –

+1

@ Hi-Angel: Tôi chưa thử, nhưng rõ ràng bạn có thể sử dụng [IPPROTO_IP'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586 (v = vs .85) .aspx) Tùy chọn ổ cắm 'IP_UNICAST_IF' trên Windows. Tùy chọn này có một chỉ mục giao diện và cũng nên hoạt động trên các hệ thống Linux hiện tại (được thêm vào năm 2012 và hiện diện trong Linux v3.4). – Hasturkun

+0

Hmm, thú vị ... Tôi không tìm thấy đề cập về tùy chọn trong tài liệu GNU/Linux, nhưng tìm thấy [một lưu ý ngắn] (http://kernelnewbies.org/Linux_3.4) rằng nó đã được thêm vào để giúp dự án WINE. Tôi hy vọng dự án WINE nhận thức được điều đó: D –

7

Sử dụng liên kết. Bạn không thể gửi gói UDP thông qua giao diện không có địa chỉ IP, vì UDP sử dụng Giao thức Internet và Giao thức Internet yêu cầu địa chỉ IP.

+0

Trừ khi bạn gửi chúng dưới dạng gói thô. – nategoose

+0

@nategoose Đó sẽ là gian lận. – Oswald

+1

Ràng buộc không giúp được gì. IP nguồn của gói UDP là chính xác (nghĩa là IP của giao diện mà tôi đang cố gắng gửi đi) nhưng gói chính nó đi từ giao diện mặc định. – jackhab

0

Bạn cần sử dụng tùy chọn socket IP_MULTICAST_IF.

Xem ở đây: Multicast-HOWTO-6.html

+0

Nó sẽ không chỉ hoạt động cho phát đa hướng? (Ngoài ra, dường như yêu cầu một địa chỉ) – Hasturkun

Các vấn đề liên quan