Я немного запутался в использовании необработанных сокетов и libcap. Может, кто-нибудь в простом указать преимущества использования обоих. Я прочитал несколько ссылок, но это меня смущает.
Использует ли libpcap необработанные сокеты под ними?
Ответы (2)
«libpcap» и «сырые сокеты» — разные темы.
Libpcap — это библиотека захвата пакетов для Linux, которая используется для захвата трафика/пакетов, проходящих через сетевой интерфейс, такой как eth0.
В Windows библиотека Winpcap делает то же самое.
Необработанные сокеты — это функция API сокетов, предоставляемая ОС, которую можно использовать для отправки пакетов с заголовками, определенными приложением, а не ОС. Таким образом, используя необработанные сокеты, мы можем указывать заголовки IP, TCP и отправлять пакеты.
Необработанные сокеты доступны в Linux с незапамятных времен. В Windows необработанные сокеты были доступны только в Windows XP и Windows XP (SP1).
В Windows библиотека winpcap имеет функцию отправки пакетов с произвольным содержимым, а это означает, что функциональность сырых сокетов может быть достигнута с помощью winpcap в Windows.
libpcap использует разные механизмы в разных операционных системах. В Linux он использует необработанные или подготовленные сокеты PF_PACKET, в зависимости от того, знает ли он о типе канального уровня Linux (значение ARPHRD_) для интерфейса и, создают ли интерфейсы этого типа канального уровня полезную ссылку. -заголовок уровня (интерфейсы PPP этого не делают, поэтому вы не можете видеть идентификатор протокола сетевого уровня). В Irix используются сокеты PF_RAW с протоколом RAWPROTO_SNOOP. В других системах он вообще не использует необработанные сокеты.
Необработанные сокеты можно использовать для ряда целей, например, для отправки и получения необработанных пакетов IPv4, не беспокоясь о канальном уровне (т. е. они подключаются к уровню IP, а не к драйверу сетевого устройства). Если вам нужен доступ к уровню необработанных ссылок, необработанные сокеты в большинстве ОС не поддерживают это (Linux и Irix являются очевидными исключениями, как указано в предыдущем абзаце), но libpcap поддерживает.