Inne rodzaje gniazd =================== W rodzinie systemów BSD są gniazdka z rodziny adresowej AF_ROUTE, służące do dodawania i usuwania tras w tablicach trasowania jądra. Mają rodzinę protokołów PF_ROUTE i typ gniazdka SOCK_RAW. Dla warstwy Ethernetowej można używać gniazdek z rodziny AF_PACKET. Można nimi oglądać wszystkie przychodzące komunikaty -- także te, których nie obsługujemy (nie otworzyliśmy dla nich gniazdek). Oczywiście trzeba wtedy mieć uprawnienia roota. Tworząc gniazdko podajemy funkcji socket() jako drugi argument (typ) SOCK_DGRAM lub SOCK_RAW. Tej drugiej używamy, gdy chcemy sami budować nagłówek ramki Ethernetowej. Trzeci argument (protokół) to zwykle ETH_P_IP (inne wartości podano w pliku /usr/include/linux/if_ether.h). Dodatkowo można przełączyć gniazdko w tryb promiscuous, dzięki czemu interfejs pozwoli oglądać ramki nie przeznaczone dla naszego komputera. Przykłady w podkatalogu inne katalogu z programami. W Linuksie jest szersza rodzina AF_NETLINK, służąca do komunikacji z jądrem. Typy protokołów w NETLINK_ROUTE, NETLINK_FIREWALL, NETLINK_NFLOG i NETLINK_ARPD. Gniazdka takie służą do komunikacji asynchronicznej (IPC) między procesami użytkowymi i procesami jądra. Typem gniazdka w wywołaniu socket() może być SOCK_RAW lub SOCK_DGRAM, ponieważ komunikacja jest pakietami. Adres w strukturze sockaddr_nl zawiera unikalny identyfikator, zwykle systemowy identyfikator procesu (PID), czasem wraz z identyfikatorem wątku (np. gdy chcemy otwierać kilka gniazdek). Literatura ---------- Gianluca Insolvibile "The Linux Socket Filter: Sniffing Bytes over the Network", Linux Journal issue 86, 6/2001, str.24-31.