我在我的Linux機器上配置了2個以太網接口。 可以說接口A和接口B.在定義的以太網接口上發送數據包
我在寫一個tcp客戶端套接字程序,需要在定義的接口上發送數據包。
例如。
./client -intf接口A/B
如果輸入是接口A,那麼客戶端僅具有經由接口A和反之亦然發送數據包。
任何人都可以提供一些關於如何實現這一點的提示。
在此先感謝!
我在我的Linux機器上配置了2個以太網接口。 可以說接口A和接口B.在定義的以太網接口上發送數據包
我在寫一個tcp客戶端套接字程序,需要在定義的接口上發送數據包。
例如。
./client -intf接口A/B
如果輸入是接口A,那麼客戶端僅具有經由接口A和反之亦然發送數據包。
任何人都可以提供一些關於如何實現這一點的提示。
在此先感謝!
您可以使用bind()
你叫connect()
之前,您的客戶端套接字綁定到特定的IP地址。您可以使用getifaddrs()
列出接口及其關聯的IP地址。
之前必須做類似的事情,你試過這個嗎? https://austinmarton.wordpress.com/2011/09/14/sending-raw-ethernet-packets-from-a-specific-interface-in-c-on-linux/
我已經看到了這個。我需要更多的信息。如果我不提供接口名稱,我的應用程序必須使用默認路由。如何實現這個我不給接口名稱。? – Saravana
你好,感謝您的輸入。你能否提供更多的信息。 – Saravana
@Saravana:調用'getifaddrs()'來查找從接口名稱到IP地址的映射。使用要使用的接口的IP地址和端口0創建一個'sockaddr_in' /'sockaddr_in6'結構,並在調用'connect()'之前將其傳遞給套接字上的'bind()'。 – caf
非常感謝你的咖啡。所以在綁定中,我們綁定到IP接口的IP地址。但我們應該在哪裏提供實際需要連接的服務器IP? – Saravana