Подтвердить что ты не робот

Использует ли libpcap исходные сокеты под ними?

Я немного запутался в использовании сырых сокетов и libcap. Может, кто-нибудь из простых указывает на преимущества использования обоих. Я читал несколько ссылок, но это меня путало.

4b9b3361

Ответ 1

"libpcap" и "raw sockets" - это разные темы.

Libpcap - это библиотека захвата пакетов для linux, которая используется для захвата трафика/пакетов, которые проходят через сетевой интерфейс, например eth0.

В окнах библиотека Winpcap делает то же самое.

Сырые сокеты - это функция сокета api, предоставляемая ОС, которая может использоваться для отправки пакетов с заголовками, определенными приложением, а не ОС. Поэтому, используя исходные сокеты, мы можем указать заголовки IP, TCP и отправить пакеты.

Сырые сокеты доступны в Linux с самого начала. В Windows сокеты были доступны только в Windows XP и Windows XP (SP1).

В окнах библиотека winpcap имеет функцию отправки пакетов с произвольным контентом, что означает, что с помощью winpcap в Windows можно использовать функциональность сокетов.

Ответ 2

libpcap использует разные механизмы для разных операционных систем. В Linux он использует исходные или готовые сокеты PF_PACKET, в зависимости от того, знает ли он о типе канального уровня Linux (значение ARPHRD_) для интерфейса и являются ли интерфейсы этого типа канального уровня полезным заголовком канального уровня (интерфейсы PPP дона 't, поэтому вы не можете видеть идентификатор протокола сетевого уровня). На Irix он использует сокеты PF_RAW с протоколом RAWPROTO_SNOOP. В других системах он не использует сырые сокеты вообще.

Необработанные сокеты могут использоваться для ряда целей, таких как отправка и получение необработанных пакетов IPv4 без необходимости беспокоиться о канальном уровне (т.е. они подключаются к IP-уровню, а не к драйверу сетевого устройства). Если вам нужен доступ к необработанному каналу связи, сырые сокеты в большинстве ОС не поддерживают это (Linux и Irix являются очевидными исключениями, как в предыдущем абзаце), но libpcap делает.