- 论坛徽章:
- 0
|
机子装了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 |
|