多網卡發送數據包
方法一:
使用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]的數據包
在雙線接入主機中,可以使用這種方法來編寫程序,來相應不同接口的數據包,而且反應快。
使用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]的數據包
在雙線接入主機中,可以使用這種方法來編寫程序,來相應不同接口的數據包,而且反應快。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.