Прием пакетов в сырых розетках - PullRequest
1 голос
/ 24 ноября 2011

Я занимаюсь программой сканирования портов в рамках школьного проекта, в котором я использую необработанные сокеты. Мое понимание таково:

При использовании многопоточности с необработанными сокетами каждый pthread НЕ получает копию пакетов, видимых NIC. Следовательно, для обработки всех различных потоков мне понадобится принимающий поток, который передает сообщения в правильный поток.

Это правильно?

РЕДАКТИРОВАТЬ: Моя гипотеза заключается в том, что ОС отправляет пакет только один раз в процесс. Если неправильный пакет получил пакет, пакет может быть пропущен.

1 Ответ

3 голосов
/ 25 ноября 2011

Я думаю, что если вы хотите получать пакеты во всех потоках, вам просто нужно создать отдельный необработанный сокет (с одинаковыми аргументами) в каждом потоке.Я не нашел хорошего ресурса, описывающего это в Linux, но вот как это задокументировано в Windows:

, если на компьютере одновременно открыто несколько сокетов SOCK_RAW,одни и те же дейтаграммы могут быть доставлены на все открытые розетки

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