Фильтрация адреса источника одноадресной рассылки в сокете дейтаграммы - PullRequest
2 голосов
/ 03 августа 2011

Мне нужно выполнить фильтрацию данных на основе исходного одноадресного IPv4-адреса дейтаграмм, поступающих в сокет Linux Linux.

Конечно, всегда можно вручную выполнить фильтрацию на основе информации, предоставленной recvfrom , но мне интересно, может ли быть другой более разумный / эффективный подход (если возможно, без использования libpcap).

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

Если это единственный источник, который вам нужно разрешить, тогда используйте connect(2), и ядро ​​выполнит фильтрацию за вас. В качестве бонуса, подключенные сокеты UDP более эффективны. Это, конечно, не работает для более чем одного источника.

0 голосов
/ 04 августа 2011

Какую долю дейтаграмм вы ожидаете отбросить?Если он очень высокий, то вы можете пересмотреть дизайн своего приложения (например, чтобы отправители не отправляли так много дейтаграмм, которые должны быть отброшены).Если оно не очень высокое, то вам не важно, сколько усилий вы тратите на их удаление.

Предположим, что для отбрасывания пакета требуется столько же времени (времени выполнения), сколько для его обычной обработки;если вы отбрасываете 1% пакетов, вы будете тратить только 1% времени на сброс.Однако, на самом деле, отбрасывание, вероятно, будет намного проще, чем обработка сообщений.

0 голосов
/ 03 августа 2011

Как уже говорилось, NetFilter (брандмауэр Linux) может помочь вам в этом.

Вы также можете использовать параметры UDP xinetd и tcpd для выполнения фильтрации.

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