pfring не смог перехватить входящие пакеты по Ethernet Raspberry Pi 3 B

Я установил PFRING-6.6.0 (загруженный "pf_ring.ko") на моей машине x86_64 под управлением Ubuntu 14.04, чтобы перехватывать все входящие пакеты на "eth0", чей порт источника или назначения - "2404" (см. Код ниже). и код работает нормально. Следующий код создает сокет pfring с заданным фильтром BPF, и сокет должен захватывать только входящие пакеты "2404"
Но моя проблема в том, что, хотя я установил тот же PFRING на мою машину Raspberry Pi 3 B, на которой работает Ubuntu-mate 16.04, этот код не может перехватить входящие пакеты. (Я изменил имя устройства на "eth0"). эта проблема связана с архитектурой?.. как решить эту проблему?

char *device = "eth0";
pfring *pd;
int main(int argc, char *argv[]) {

               /* hard coaded filters */
              char *bpfFilter "(ip host 10.180.6.105 && ip host 10.180.5.179) && tcp port 2404"; 
               u_int32_t flags = 0;
               int i = 0;
               flags |= PF_RING_REENTRANT;
               flags |= PF_RING_PROMISC;
               flags |= PF_RING_HW_TIMESTAMP;
               flags |= PF_RING_STRIP_HW_TIMESTAMP;
               flags |= PF_RING_CHUNK_MODE;
               flags |= PF_RING_IXIA_TIMESTAMP;

                  pd = pfring_open(device, 256, flags);
                  if (pd == NULL) {
                     fprintf(stderr, "pfring_open error [%s] (pf_ring not loaded or interface %s is down ?)\n",
                      strerror(errno), device);
                     exit(0);
                  } 
                  if ((pfring_set_direction(pd, 1)) != 0)   /* 0=RX+TX, 1=RX only, 2=TX only */     
                     fprintf (stderr, "capture direction not set\n");
                  if ((pfring_set_socket_mode(pd, recv_only_mode)) != 0)
                     fprintf(stderr, "pfring_set_socket_mode unsuccessfull\n");
                  if ((pfring_set_bpf_filter(pd, bpfFilter)) < 0)
                     fprintf(stderr, "pfring_set_bpf_filter unsuccessfull\n");
                  else
                      fprintf(stderr, "set_bpf_filter successfull\n");

                  pfring_set_poll_duration(pd, 500);

                  if (pfring_enable_ring(pd) != 0) {
                     printf("Failed to enable ring :-(\n");
                     pfring_close(pd);     
                  } 
                  while(1) {
                        if ((ret = pfring_is_pkt_available(pd)) == 0) {     
                           printf("No incomming packet %d\n");
                           continue;
                        }
                        if ((ret = pfring_loop(pd[RTUnum], RTUProcesssPacket, (u_char*)&RTUnum, 0)) != 0) {
                           fprintf(stderr, "Failed to capture packet\n");
                           sleep(1);
                        }
                  }  
}

void RTUProcesssPacket(const struct pfring_pkthdr *h,
                       const u_char *packet, const u_char *user_bytes) { 
      log packets into pcap file;
      parse the packet;
      apply IDS rules();
   }

OUTPUT:
(ip host 10.180.6.105 && ip host 10.180.5.179) && tcp port 2404
set_bpf_filter successfull

No incomming packet
No incomming packet
No incomming packet
No incomming packet
No incomming packet

1 ответ

Насколько я понимаю, RPI является 64-битной архитектурой, но Rasian OS только 32-битная

Другие вопросы по тегам