2014-04-05 8 views
2

Каков самый простой/самый короткий/простой способ читать пакеты с уровня данных (MAC) на Linux?Прочитайте пакеты уровня данных (MAC) в Linux

Может ли кто-нибудь дать нам фрагмент кода о том, как это сделать?

Зачем нам это нужно? Мы разрабатываем сетевую камеру, в которой гигабитный чип реализует только уровень канала передачи данных. Поскольку у нас нет ресурсов для реализации стека IP, нам необходимо обмениваться пакетами, используя только MAC-адрес.

ответ

2

Вот фрагмент кода, я искал:

#include <stdio.h> 
#include <stdlib.h> 

#include <sys/socket.h> 
#include <linux/if_packet.h> 
#include <linux/if_ether.h> 
#include <linux/if_arp.h> 


int main() 
{ 
     int s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); 
     if (s == -1) 
     { 
      printf("Error while creating socket. Aborting...\n"); 
      return 1; 
     } 

     void* buffer = (void*)malloc(ETH_FRAME_LEN); 
     while(1) 
     { 
      int receivedBytes = recvfrom(s, buffer, ETH_FRAME_LEN, 0, NULL, NULL); 
      printf("%d bytes received\n", receivedBytes); 
      int i; 
      for (i = 0; i < receivedBytes; i++) 
      { 
       printf("%X ", ((unsigned char*)buffer)[i]); 
      } 
      printf("\n"); 
     } 
     return 0; 
}