Как привязать Raw Socket к определенному порту?

В настоящее время я работаю над программированием. Назначение - реализовать клиент, сетевой эмулятор и сервер. Клиент передает пакеты в сетевой эмулятор, а сетевой эмулятор - на сервер. И наоборот. Предпосылкой для назначения является то, что я могу использовать только сырые сокеты. Итак, я создам свои собственные заголовки IP и UDP. Я тестировал свои пакеты с помощью wirehark. Все они правильные и в правильном формате (он правильно их читает).

Еще одно требование состоит в том, чтобы у эмулятора, клиента и сервера были определенные порты, к которым они должны быть привязаны. Теперь я не понимаю, как привязать необработанный сокет к определенному порту. Все мои сырые сокеты получают весь трафик на адрес хоста, к которому они привязаны. Согласно страницам руководства и повсюду в Интернете, включая «Сетевое программирование Unix» Ричарда Стивенса, именно так они и должны работать. Мой учитель не ответил ни на одно из моих писем, и я, вероятно, не смогу спросить его до вторника. Я вижу перед собой два варианта. Сначала я могу использовать libpcap для фильтрации с определенного устройства, а затем выводить в свой сырой сокет. Я чувствую, что это выходит за рамки нашего задания. Или я могу отфильтровать их после того, как получу их из розетки. Очевидно, это связано с большими накладными расходами, поскольку все пакеты копируются / перемещаются через ядро. По крайней мере, я так понимаю (пожалуйста, поправьте меня, если я ошибаюсь).

Итак, мой вопрос: Есть ли у них вариант или что-то, что я могу настроить для этого? Где необработанный сокет будет привязываться к порту? Я пропустил что-то очевидное?

Спасибо за ваше время.

-

5
задан user614885 14 February 2011 в 01:00
поделиться