免费注册 查看新帖 |

Chinaunix

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

[函数] 求教:sendto函数在不同网卡产生错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-06 11:39 |只看该作者 |倒序浏览
机子装了ubuntu 7.04,有2张网卡,eth0:212.99.38.32,eth1:192.168.0.88
最近学习网络编程,从网上找了个发送arp包的代码,发现指定为eth0时正常,但网卡指定为eth1时,sendto函数就返回错误。不知道为什么?arp包的内容是在192.168.0.0网络内发送arp包。
代码:
/* Create a new socket */
sd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ARP));
if (sd == -1)
{
printf("[ERROR]: socket() failed! return value=%d\n", sd);
return -1;
}

if((ifdev=getdevindex(sd,argv[6]))==-1)
{
printf("[ERROR]: getdevindex failed! return value=%d\n", ifdev);
return -1;
}
/* Setup sockaddr_ll structure */
sll.sll_family = AF_PACKET;
sll.sll_protocol = htons(ETH_P_ARP);
//sll.sll_ifindex = 0x02;
sll.sll_ifindex = ifdev;
//sll.sll_ifindex = 0x03;
sll.sll_hatype = ARPHRD_ETHER;
sll.sll_pkttype = PACKET_OTHERHOST;
sll.sll_halen = ETH_ALEN;
//memcpy(&sll.sll_addr, eth->h_dest, 6);
memcpy(&sll.sll_addr,eth->h_dest,ETH_ALEN);



/* Send our packet */
while(1)
{
ret = sendto(sd, rawPacket, ETH_HLEN+ARP_LEN, 0, (struct sockaddr *) &sll, sizeof(sll));
if (ret == -1)
{
printf("[ERROR]: sendto() failed! return value=%d\n", ret);
perror("sendto");
return -1;
}
}
提示错误:sendto: No buffer space available

论坛徽章:
0
2 [报告]
发表于 2007-06-06 11:48 |只看该作者
please check your eth1 driver works well

论坛徽章:
0
3 [报告]
发表于 2007-06-06 11:48 |只看该作者
应该是发送的速度太快了.

论坛徽章:
0
4 [报告]
发表于 2007-06-06 11:50 |只看该作者

回复 2楼 FreeGnu 的帖子

driver没问题,与其他同网段机子互ping都没问题

论坛徽章:
0
5 [报告]
发表于 2007-06-06 11:54 |只看该作者

回复 3楼 baohuaihuai 的帖子

但我在eth0都没问题?

论坛徽章:
0
6 [报告]
发表于 2007-06-06 12:00 |只看该作者
make sure ping throught eth1?
the error occurs sometimes or always?

论坛徽章:
0
7 [报告]
发表于 2007-06-06 12:03 |只看该作者

回复 6楼 FreeGnu 的帖子

当然是通过eth1  ping。否则不同网段怎么能行
问题一直存在,刚运行就退出

论坛徽章:
0
8 [报告]
发表于 2007-06-06 12:16 |只看该作者
原帖由 baohuaihuai 于 2007-6-6 11:48 发表
应该是发送的速度太快了.

刚刚抓包看了下,可能是这个问题,因为已经有很多发送成功的包。
但不知道为什么,eth0可以持续发送很久,而eth1就不行,马上退出。2张网卡是不同厂家的,难道跟网卡有关?
另外如果想持续发包,while这一段应该怎么改?

[ 本帖最后由 pioul 于 2007-6-6 12:18 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP