簡體   English   中英

如何將多個接口綁定到原始套接字

[英]How to bind multiple interfaces to a raw socket

我打開了一個原始套接字以獲取所有原始數據包:

socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)

當在屬於LAG或綁定成員的接口上接收到數據包時,內核會將數據包發送到用戶應用程序2次。 一個用於實際的物理接口,另一個用於綁定接口。 如何限制內核僅針對我感興趣的接口提起數據包?

我們可以通過將應用程序感興趣的接口綁定到套接字來實現。 但是我不想創建多個套接字(每個接口一個)以避免可伸縮性問題。 是否可以動態地將多個接口綁定到原始套接字?

使用SO_BINDTODEVICE套接字選項綁定到特定接口:

char *iface = "eth0";
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, iface, 4);

在這種情況下,您必須為每個接口創建單獨的套接字。

另一種解決方案是將bind(2)與INADDR_ANY一起使用。

您沒有第三種選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM