免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2949 | 回复: 5
打印 上一主题 下一主题

求助:多网卡发送数据包 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-28 22:59 |只看该作者 |倒序浏览
我最近在写一个程序,需要从指定的网卡发送数据包,本人是菜鸟,对此不熟,希望大侠们能给指条明路,多谢了。

论坛徽章:
0
2 [报告]
发表于 2006-08-29 22:45 |只看该作者
原帖由 zwhermes 于 2006-8-28 22:59 发表
我最近在写一个程序,需要从指定的网卡发送数据包,本人是菜鸟,对此不熟,希望大侠们能给指条明路,多谢了。

>>
>>
>>如果不想自己写raw_socket,直接使用LibNet就可以了,很好用的程序库。
>>
>>

论坛徽章:
0
3 [报告]
发表于 2006-08-30 19:55 |只看该作者
我写的程序使用raw_socket。是不是将socket通过函数bind绑定指定网卡的IP就能通过该网卡发送数据?

论坛徽章:
0
4 [报告]
发表于 2006-08-31 00:38 |只看该作者
原帖由 zwhermes 于 2006-8-30 19:55 发表
我写的程序使用raw_socket。是不是将socket通过函数bind绑定指定网卡的IP就能通过该网卡发送数据?

>>
>>
>>指定网卡发送数据的时候不需要指定网卡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] = '\0';
>>    if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 )
>>    {
>>        snprintf(err_buf, ERRBUF_SIZE,
>>                "SIOCGIFHWADDR: %s", strerror(errno));
>>        return -1;
>>    }
>>
>>

论坛徽章:
0
5 [报告]
发表于 2006-09-05 23:58 |只看该作者
不太明白。这不是获取指定的MAC地址吗?我是想让socket使用指定的网卡发包。能不能再说明白一点?

论坛徽章:
0
6 [报告]
发表于 2006-09-07 12:19 |只看该作者
原帖由 zwhermes 于 2006-9-5 23:58 发表
不太明白。这不是获取指定的MAC地址吗?我是想让socket使用指定的网卡发包。能不能再说明白一点?

>>
>>
>>ifr.ifr_name就是网卡的名字,例如"eth0"。这一段的意思就是设置ifr.ifr_name为发包的设备。
>>
>>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP