2013-05-10 3 views
0

Мне нужно прослушивать несколько портов UDP и обрабатывать полученные датаграммы как Ethernet-фреймы. Я не могу думать о каком-либо другом решении, кроме создания сокета SOCK_RAW для приема кадров Ethernet, проверить, является ли то, что я получил, датаграммой UDP, а затем извлечь дейтаграмму для идентификации UDP-порта.Получение Ethernet-кадров из UDP-порта

Есть ли лучший способ? Есть ли какой-то сокет, который позволит мне получать дейтаграммы UDP на конкретном порту и все еще обращаться ко всему кадру Ethernet?

ответ

1

Предлагаю вам использовать библиотеку pcap. Это не сложно и переносится между широкими областями систем. Вы можете просто фильтровать и захватывать то, что вы хотите.

Libpcap и WinPcap обеспечивают пакетный захват и фильтрацию двигатели многих открытых источников и коммерческих сетевые инструментов, в том числе протокола анализаторов (анализаторы пакетов), сетевые мониторы, вторжения систем обнаружения сети, трафик-генераторы и сетей -testers.

Другие предложения: libcrafter, который является создателем и декодером высокого уровня. Хотя это только C++.

+1

Это ответ, который вы ищете. Вы не можете получить доступ к кадру без записи драйвера устройства, так как NIC имеет дело со всей информацией заголовка, а затем передает пакет до ядра (т. Е. Ядро даже не видит заголовок, который я не думаю!). Но на самом деле вам не нужен заголовок для получения hte UDP-порта, поскольку он находится в пакете UDP, поскольку порт действительно отличает, к какой программе должен быть отправлен пакет. – Magn3s1um

Смежные вопросы