小编spy*_*dez的帖子

如何在C/C++中接收原始的第2层数据包?

如何在POSIXy C++中接收第2层数据包?数据包只有src和dst MAC地址,类型/长度和自定义格式的数据.它们不是TCP或UDP或IP或IGMP或ARP或其他 - 它们是由硬件人员给我的家庭酿造格式.

socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)永远不会从它回来recvfrom().

我可以发送罚款,无论我在网络堆栈中使用什么选项,我都无法接收.

(平台是VxWorks,但我可以翻译POSIX或Linux或其他......)

接收代码(当前的化身):

 int s;

 if ((s = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) < 0) {
  printf("socket create error.");
      return -1;
 }

   struct ifreq          _ifr;   
   strncpy(_ifr.ifr_name, "lltemac0", strlen("lltemac0"));
   ioctl(s, IP_SIOCGIFINDEX, &_ifr);

   struct sockaddr_ll _sockAttrib;
   memset(&_sockAttrib, 0, sizeof(_sockAttrib));
   _sockAttrib.sll_len      = sizeof(_sockAttrib);
   _sockAttrib.sll_family   = AF_PACKET;
   _sockAttrib.sll_protocol = IFT_ETHER;
   _sockAttrib.sll_ifindex  = _ifr.ifr_ifindex;
   _sockAttrib.sll_hatype   = 0xFFFF;
   _sockAttrib.sll_pkttype  = PACKET_HOST;
   _sockAttrib.sll_halen    = 6;
   _sockAttrib.sll_addr[0]  = 0x00;
   _sockAttrib.sll_addr[1]  = 0x02;
   _sockAttrib.sll_addr[2]  = 0x03;
   _sockAttrib.sll_addr[3]  = 0x12; …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets posix vxworks

10
推荐指数
1
解决办法
5187
查看次数

标签 统计

c ×1

c++ ×1

posix ×1

sockets ×1

vxworks ×1