Como vincular um soquete bruto a uma porta específica?

Atualmente, estou trabalhando em uma tarefa de programação. A atribuição é implementar um cliente, emulador de rede e servidor. O cliente passa pacotes para um emulador de rede e o emulador de rede passa para o servidor. O vice-versa também se aplica. O pré-requisito para a tarefa é que eu possa usar apenas soquetes brutos. Então, eu vou criar meus próprios cabeçalhos IP e UDP. Testei meus pacotes com o wireshark. Eles estão todos corretos e no formato adequado (ele os lê corretamente).

Outro requisito é que o emulador, cliente e servidor tenham portas específicas às quais devem estar vinculados. Agora, não entendo como vincular um soquete bruto a uma porta específica. Todos os meus soquetes brutos recebem todo o tráfego no endereço do host ao qual estão vinculados. De acordo com as páginas de manual e em qualquer outro lugar na Internet, incluindo "Programação de Rede Unix", de Richard Stevens, é assim que eles devem funcionar. Meu professor não respondeu a nenhum dos meus e-mails e provavelmente não vou poder perguntar a ele até terça-feira. Vejo duas opções na minha frente. Primeiro, posso usar a libpcap para filtrar a partir de um dispositivo específico e depois enviar para o meu soquete bruto. Eu acho que isso está fora do escopo de nossa tarefa. Ou posso filtrá-los depois de recebê-los do soquete. Aparentemente, isso tem muita sobrecarga porque todos os pacotes estão sendo copiados / movidos pelo kernel. Pelo menos, esse é o meu entendimento (sinta-se à vontade para me corrigir se estiver errado).

Então, minha pergunta é: é uma opção ou algo que eu possa definir para isso? Onde o soquete bruto será vinculado a uma porta? Perdi algo óbvio?

Obrigado pelo seu tempo.

-

questionAnswers(2)

yourAnswerToTheQuestion