Сначала я думал, что большинство предыдущих ответов не отвечали на вопрос.
После дальнейших размышлений, я думаю, что автор, вероятно, не задает правильный вопрос.
Если вы пишете приложение, вы обычно не думаете о «сборке пакетов». вы просто открываете сокеты, форматируете полезную нагрузку данных, и это стек протоколов, который создает пакеты с вашими данными. Хорошо, если вы используете дейтаграммы, вам нужно определить, сгенерировать и проанализировать ваши полезные нагрузки. Но вы обычно позволяете ядру инкапсулировать его на сетевом уровне (например, добавить заголовок IP) или на канальном уровне (например, добавить кадрирование Ethernet). Вы обычно не используете pcap. Иногда просто упакуйте и распакуйте, и, возможно, достаточно vec.
Если вы пишете необычный пакетный процессор, такой как активный инструмент враждебной атаки, процесс «человек посередине» или устройство формирования трафика, то с большей вероятностью будет «собирать пакеты» и использовать pcap , Может, Net :: Packet и для вас.