欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多网卡发送数据包

程序员文章站 2022-03-02 15:27:24
...

方法一:使用libnet,这里就不介绍了。

方法二:使用原始套接字

指定网卡发送数据的时候不需要指定网卡IP,只要设置struct ifreg ifr.ifr_name就可以了。
例如:

struct ifreq ifr;
fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
memset(&ifr, 0, sizeof (ifr));
strncpy(ifr.ifr_name, "eth0", sizeof (ifr.ifr_name) -1);
ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0';
if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 )
{
      snprintf(err_buf, ERRBUF_SIZE, 
                   "SIOCGIFHWADDR: %s", strerror(errno));
      return -1;
}


方法三:bind的时候设置不同网卡的ip
这种情况适用于运行Server端操作,为套接字绑定不同的接口ip,可以接受不同网络[不同ISP]的数据包。
在双线接入主机中,可以使用这种方法来编写程序,来响应不同接口的数据包,而且反应快。

相关标签: Socket