Операция привилегированная, а на некоторых платформах она вообще недоступна. На платформе POSIX может потребоваться, чтобы пользователь был в определенной группе, а не обязательно root, на Linux вы можете запустить ls -l
для соответствующего узла устройства, представляющего сетевой интерфейс, чтобы выяснить правильную группу пользователей (это может быть root).
Как правило, вам нужна библиотека захвата пакетов, которая поставляется с драйвером \ модулем пространства ядра, чтобы фактически обойти ее. Примером такой библиотеки является всемогущий libpcap, используемый Wireshark. Есть порты для других систем, включая Windows, которые называются WinPCap.