当前位置: 技术问答>linux和unix
RAW socket不就收广播包
来源: 互联网 发布时间:2016-11-16
本文导语: 本帖最后由 dreamqiang121 于 2011-03-24 09:30:42 编辑 我的需求是这样的,两个系统通信,使用原始socket,第一次时,需要发广播包,来确定对端的mac地址,从而建立起通信。下面是代码片段:其中ETH_P_PRIVATE_TC这个宏是我自...
struct sockaddr_ll bindaddr = {0};
socketfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_PRIVATE_TC));
if(socketfd == -1)
{
errmsg("epon_server_init(): create socket failed!(%s)n", strerror(errno));
return -1;
}
if(0 == (ifindex = get_if_index(socketfd, g_vars.ifname)))
{
errmsg("epon_server_init(): get_if_index failed n");
close(socketfd);
return -1;
}
bindaddr.sll_family = PF_PACKET;
bindaddr.sll_protocol = htons(ETH_P_PRIVATE_TC);
bindaddr.sll_ifindex = ifindex;
if (-1 == bind(socketfd, (struct sockaddr *)&bindaddr, sizeof(bindaddr)))
{
errmsg("epon_server_init(): bind failed(%s)n", strerror(errno));
close(socketfd);
return -1;
}
可是这样做,就是收不到mac地址是全f的广播包!初学者,望高手解答!
|
Raw socket只能访问到IP层, 你要接收数据链路层的ARP, 必须用packet socket.
程序代码参见: http://blog.csdn.net/wenxy1/archive/2005/08/24/464168.aspx
程序代码参见: http://blog.csdn.net/wenxy1/archive/2005/08/24/464168.aspx