linux通过指定网卡发送 数据,实现方式

在网上找了一大圈, 发现linux通过指定网卡发送 数据,基本有2个途径, 

1, 通过建立SOCKET的时候就绑定网卡,SO_BINDTODEVICE

2.   建立原始套接字。SOCK_RAW, 填充指定网卡的mac地址发送。

依然没有达到我的要求,我的要求是UDP既然是面向无连接的,我只建立一个UDP,不绑定任何IP地址,但是我发送UDP数据的时候指定从某一个网卡发, 这要怎么做呢?

 

#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;


int
main ()
{
        struct sockaddr_ll sll;
        int fd;
        struct ifreq ifr;
        char *dev;

        fd = socket (PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

        dev = "eth0";
        strncpy ((char *)ifr.ifr_name, dev, sizeof(ifr.ifr_name));
        assert (ioctl (fd, SIOCGIFINDEX, &ifr)==0);

        memset (&sll, 0, sizeof(sll));
        sll.sll_family = AF_PACKET;
        sll.sll_protocol = htons (ETH_P_ALL);
        sll.sll_ifindex = ifr.ifr_ifindex;

        assert (bind (fd, (struct sockaddr *)&sll, sizeof(sll))==0);

}

你可能感兴趣的:(linux,tcpip)