Для необработанных сокетов и libpcap требуется root-доступ (или CAP_NET_ADMIN), поэтому ни у одного из них нет преимущества.
На самом деле подход «сырых сокетов» может быть немного чище, чем подход libpcap, но он требует от вас написания собственного стека TCP с нуля. Поскольку вы почти наверняка не хотите этого делать, я бы порекомендовал подход libpcap.
Другой подход может заключаться в том, чтобы использовать iptables для подсчета пакетов, но он не переносим (требуется Linux) и по-прежнему не устраняет требование корневого доступа.