Gniazdka niskopoziomowe

Przykłady programów

Większość programów tylko dla użytkownikow uprzywilejowanych.

ethernet-local.c: Podglądanie lokalnych pakietów z warstwy łącza.

ethernet-all.c: Podglądanie wszystkich pakietów z warstwy łącza. Oczywiście tylko dla uprzywilejowanych

Uwagi o gniazdkach surowych

Schorzenie

Z man 7 raw:

,,A protocol of IPPROTO_RAW implies enabled IP_HDRINCL and is able to send any IP protocol that is specified in the passed header. Receiving of all IP protocols via IPPROTO_RAW is not possible using raw sockets.''

Terapia

  1. Otworzyć inne gniazdko z ICMP do czytania.
  2. Otworzyć to gniazdko jako ICMP i ustawić opcję IP_HDRINCL, aby mieć dostęp do nagłówka IP (man 7 ip).
  3. Jeszcze łatwiej: otworzyć to gniazdko jako ICMP i ustawić opcję IP_TTL (jw.).

Niestety nie można zmienić protokołu:

SO_PROTOCOL (since Linux 2.6.32)

Retrieves the socket protocol as an integer, returning a value such as IPPROTO_SCTP. See socket(2) for details. This socket option is read-only.

Za to (od p.Michała Bassy) można robić tak jak ping

  sock = socket(AF_INET, SOCK_DGRAM, 1); /* 1 == ICMP */

Zgodnie z opisem w repozytorium jądra Linuxa domyślnie ta opcja jest wyłączona, ale większość dystrybucji ją włącza (2017: niestety już nie!).