求助:多网卡发送数据包
我最近在写一个程序,需要从指定的网卡发送数据包,本人是菜鸟,对此不熟,希望大侠们能给指条明路,多谢了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我最近在写一个程序,需要从指定的网卡发送数据包,本人是菜鸟,对此不熟,希望大侠们能给指条明路,多谢了。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
>>
>>
>>ifr.ifr_name就是网卡的名字,例如"eth0"。这一段的意思就是设置ifr.ifr_name为发包的设备。
>>
>>
不太明白。这不是获取指定的MAC地址吗?我是想让socket使用指定的网卡发包。能不能再说明白一点?
>>
>>
>>指定网卡发送数据的时候不需要指定网卡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, device, sizeof (ifr.ifr_name) -1);
>> ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '';
>> if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 )
>> {
>> snprintf(err_buf, ERRBUF_SIZE,
>> "SIOCGIFHWADDR: %s", strerror(errno));
>> return -1;
>> }
>>
>>
我写的程序使用raw_socket。是不是将socket通过函数bind绑定指定网卡的IP就能通过该网卡发送数据?
>>
>>
>>如果不想自己写raw_socket,直接使用LibNet就可以了,很好用的程序库。
>>
>>