Фильтрация пакетов UDP с определенного IP - PullRequest
0 голосов
/ 15 июня 2011

У меня есть программа, которая передает (транслирует) и получает UDP-пакеты одновременно, используя pthreads.Что я хочу сделать, это удалить пакеты, которые были отправлены мной.Как я могу это сделать?Мой код приема в настоящее время выглядит следующим образом:

void *receive_thread_body(void *arg)
{
  long msg = 0;

  while(msg<500)
  {
    fd_set socket_set;
    FD_ZERO(&socket_set);
    FD_SET(b_sock,&socket_set);
    struct timeval tm;
    tm.tv_usec = 10;
    tm.tv_sec = 0;

    int ret = select(b_sock+1,&socket_set,0,0,&tm);

    if(ret == -1)
    {
      std::cout<<"select failed";
    }

    if(FD_ISSET(b_sock,&socket_set) != 0)
    {
      int recvStringLen = recvfrom(b_sock, &msg, sizeof(msg), 0, NULL, 0);
      if(recvStringLen < 0)
      {
        std::cout<<"recvfrom failed";
      }
      else
      {
        printf("\t\t\tRX: %d\n",msg);
      }
    }
  }
}

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

Если вы говорите о многоадресной рассылке, отключите параметр IP (V6)? _ MULTICAST_LOOP (который может быть включен по умолчанию), чтобы не получать то, что вы отправляете. Обратите внимание, что это не позволит другим приложениям на том же хосте получать отправленные вами сообщения.

int zero = 0;
err = setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &zero, sizeof zero);

Я не слышал об аналоге для трансляции. Но вещание настолько старое, что в стандарте IPv6 его заменили на Multicast.

2 голосов
/ 15 июня 2011

Вам необходимо заполнить два последних параметра вызова recvfrom - это будет адрес отправителя.

Затем сравните его со списком ваших собственных адресов для совпадений (см. здесь например для соответствующей информации).

Этот метод не зависит от способа отправки - вы можете использовать его в сокетах без соединения или без соединения, и, конечно, в широковещательных или многоадресных (или одноадресных) передачах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...