指定網絡卡,socket傳送

2021-09-05 19:09:03 字數 924 閱讀 5960

我們在可程式設計路由器上的openwrt(基於linux)做資料**

路由器有兩個資料出口,做冗餘傳送。

## 可以該命令檢視本地路由器表

route -n

多層結構,即資料出口外還有路由器裝置提供上層的資料出口,資料目的位址不是當前網段

因此,需要將socket與網絡卡進行繫結傳送資料

使用libpcap的 pcap_sendpacket 或者 原始套接字(raw socket) 可以達到目的,但需要自行組織「mac幀、ip報頭、udp報頭」。由於網路層具備資料報的分包能力,自行實現且與已有網路系統適配非常困難。

這裡採用了將socket繫結在網絡卡上的方案

參考了這篇部落格的內容

雙網絡卡伺服器socket程式設計指定客戶端通訊網卡

其中的第一種方法比較適合我們,我們實際使用如下

#include

struct ifreq ifr;

char networkinte***ce=

"enp0s31f6";

memset

(&ifr,

0x00

,sizeof

(ifr));

strncpy

(ifr.ifr_name, networkinte***ce, networkinte***ce)

;int err =

setsockopt

(udp_fd, sol_socket, so_bindtodevice,

(char*)

&ifr,

sizeof

(ifr)

);

需要注意的是,setsockopt()的執行需要root許可權

多網絡卡指定網絡卡傳送資料

環境 2個網絡卡,分別在不同網路環境。區域網一 閘道器 10.9.16.254 區域網二 閘道器 10.9.24.1 電腦位址2 10.9.24.88 如下 include stdafx.h include include pragma comment lib,ws2 32.lib includev...

多網絡卡指定網絡卡傳送資料

環境 2個網絡卡,分別在不同網路環境。區域網一 閘道器 10.9.16.254 區域網二 閘道器 10.9.24.1 電腦位址2 10.9.24.88 如下 include stdafx.h include include pragma comment lib,ws2 32.lib include ...

socket檔案傳送

include include pragma comment lib,ws2 32.lib define ipaddr 172.26.145.2 define port 3574 class socket socket bool windowinit else sock stream 提供有序的 可...