¿Cómo vincular un Raw Socket a un puerto específico?

Actualmente estoy trabajando en una tarea de programación. La tarea es implementar un cliente, un emulador de red y un servidor. El cliente pasa paquetes a un emulador de red y el emulador de red pasa al servidor. Viceversa se aplica también. El requisito previo para la asignación es que solo puedo usar sockets sin procesar. Así que crearé mis propios encabezados IP y UDP. He probado mis paquetes con wireshark. Todos son correctos y en el formato adecuado (los lee correctamente).

Otro requisito es que el emulador, el cliente y el servidor tengan puertos específicos a los que deben estar vinculados. Ahora, no entiendo cómo vincular un socket sin procesar a un puerto específico. Todos mis sockets sin procesar reciben todo el tráfico en la dirección de host a la que están vinculados. Según las páginas del manual, y en cualquier otro lugar de Internet, incluida la "Programación de red Unix" de Richard Stevens, así es como se supone que funcionan. Mi maestro no ha respondido a ninguno de mis correos electrónicos y probablemente no pueda preguntarle hasta el martes. Veo dos opciones frente a mí. Primero puedo usar libpcap para filtrar desde un dispositivo específico y luego enviarlo a mi socket sin procesar. Sin embargo, creo que esto está fuera del alcance de nuestra tarea. O puedo filtrarlos después de recibirlos del zócalo. Aparentemente, esto tiene mucha sobrecarga porque todos los paquetes se están copiando / moviendo a través del núcleo. Al menos, eso es lo que entiendo (no dude en corregirme si estoy equivocado).

Entonces mi pregunta es: ¿Es una opción o algo que puedo configurar para esto? ¿Dónde se conectará el zócalo sin procesar a un puerto? ¿Me he perdido algo obvio?

Gracias por tu tiempo.

-

Respuestas a la pregunta(2)

Su respuesta a la pregunta