Provided by: manpages-ro_4.27.0-1_all bug

NUME

       raw - socluri Linux IPv4 raw (brute)

SINOPSIS

       #include <sys/socket.h>
       #include <netinet/in.h>
       raw_socket = socket(AF_INET, SOCK_RAW, int protocol);

DESCRIERE

       Soclurile  brute  permit  implementarea  noilor  protocoale IPv4 în spațiul utilizatorului. Un soclu brut
       primește  sau  trimite  diagrama  de  date  brută,  fără  a  include  antetele   nivelului/stratului   de
       legătură(conexiune).

       Stratul IPv4 generează un antet IP atunci când trimite un pachet, cu excepția cazului în care opțiunea de
       soclu  IP_HDRINCL  este activată pe soclu. Atunci când aceasta este activată, pachetul trebuie să conțină
       un antet IP. Pentru recepție, antetul IP este întotdeauna inclus în pachet.

       Pentru a crea un soclu brut, un proces trebuie să aibă capacitatea CAP_NET_RAW  în  spațiul  de  nume  al
       utilizatorului care guvernează spațiul său de nume de rețea.

       Toate  pachetele  sau  erorile  care  corespund  numărului  protocol  specificat  pentru soclul brut sunt
       transmise către acest soclu. Pentru o listă a protocoalelor permise, consultați lista IANA de  numere  de
       protocol atribuite la http://www.iana.org/assignments/protocol-numbers/ și getprotobyname(3).

       Un  protocol  IPPROTO_RAW  implică  activarea  IP_HDRINCL  și  poate  trimite orice protocol IP care este
       specificat în antetul transmis.  Primirea tuturor protocoalelor IP  prin  IPPROTO_RAW  nu  este  posibilă
       utilizând socluri brute.
              ┌─────────────────────────────────────────────────────────────────┐
              │ Câmpurile antetului IP modificate la trimiterea prin IP_HDRINCL │
              ├────────────────────────────┬────────────────────────────────────┤
              │ IP Checksum                │Întotdeauna completat               │
              ├────────────────────────────┼────────────────────────────────────┤
              │ Source Address             │Completat când este zero            │
              ├────────────────────────────┼────────────────────────────────────┤
              │ Packet ID                  │Completat când este zero            │
              ├────────────────────────────┼────────────────────────────────────┤
              │ Lungimea totală            │Întotdeauna completat               │
              └────────────────────────────┴────────────────────────────────────┘

       Dacă  IP_HDRINCL este specificat și antetul IP are o adresă de destinație diferită de zero, atunci adresa
       de destinație a soclului este utilizată  pentru  direcționarea  pachetului.   Atunci  când  se  specifică
       MSG_DONTROUTE,  adresa  de  destinație  trebuie  să se refere la o interfață locală, altfel se efectuează
       oricum o căutare în tabela de direcționare, dar rutele gateway (prin poartă de acces) sunt ignorate.

       Dacă IP_HDRINCL nu este activat, atunci opțiunile antetului IP  pot  fi  activate  pe  socluri  brute  cu
       setsockopt(2); consultați ip(7) pentru mai multe informații.

       Începând  cu  Linux 2.2, toate câmpurile și opțiunile antetului IP pot fi configurate utilizând opțiunile
       soclului IP.  Aceasta înseamnă că soclurile brute sunt de obicei necesare doar  pentru  protocoalele  noi
       sau pentru protocoalele fără interfață utilizator (cum ar fi ICMP).

       Atunci  când  se  primește un pachet, acesta este transmis tuturor soclurilor brute care au fost asociate
       protocolului său înainte de a fi transmis altor gestionari de protocol (de exemplu, modulele de  protocol
       ale nucleului).

   Formatul adreselor
       Pentru  trimiterea și primirea de diagrame de date (sendto(2), recvfrom(2) și altele similare), soclurile
       brute utilizează structura de adrese standard sockaddr_in definită în ip(7). Câmpul sin_port ar putea  fi
       utilizat  pentru  a  specifica numărul protocolului IP, dar este ignorat pentru trimitere în Linux 2.2 și
       ulterior și ar trebui să fie întotdeauna stabilit la 0 (a se vedea  secțiunea  ERORI).  Pentru  pachetele
       primite, sin_port este setat la zero.

   Opțiuni de soclu
       Opțiunile  soclului  brut  pot  fi  stabilite  cu  setsockopt(2) și citite cu getsockopt(2) prin trecerea
       fanionului familiei IPPROTO_RAW.

       ICMP_FILTER
              Activează un filtru special pentru socluri brute asociate protocolului IPPROTO_ICMP. Valoarea  are
              un  bit activat pentru fiecare tip de mesaj ICMP care ar trebui să fie filtrat. Valoarea implicită
              este de a nu filtra niciun mesaj ICMP.

       În plus, sunt acceptate toate opțiunile de soclu ip(7) IPPROTO_IP valabile pentru socluri de diagrame  de
       date.

   Gestionarea erorilor
       Erorile  provenite  din  rețea  sunt  transmise utilizatorului numai atunci când soclul este conectat sau
       fanionul IP_RECVERR este activat.  Pentru soclurile conectate, numai EMSGSIZE și  EPROTO  sunt  transmise
       pentru compatibilitate. Cu IP_RECVERR, toate erorile de rețea sunt salvate în coada de erori.

ERORI-IEȘIRE

       EACCES Utilizatorul  a  încercat  să  trimită  la  o  adresă de difuzare fără a avea fanionul de difuzare
              activat pe soclu.

       EFAULT A fost furnizată o adresă de memorie nevalidă.

       EINVAL Argument nevalid.

       EMSGSIZE
              Pachet prea mare.  Fie Descoperirea MTU a rutei este activată (fanionul de soclu IP_MTU_DISCOVER),
              fie dimensiunea pachetului depășește dimensiunea maximă permisă a pachetului IPv4 de 64 ko.

       EOPNOTSUPP
              Un fanion nevalid a fost pasat unui apel de soclu (cum ar fi MSG_OOB).

       EPERM  Utilizatorul nu are permisiunea de a deschide socluri brute. Numai procesele cu un  ID  utilizator
              efectiv de 0 sau atributul CAP_NET_RAW pot face acest lucru.

       EPROTO A sosit o eroare ICMP care raportează o problemă de parametru.

VERSIUNI

       IP_RECVERR și ICMP_FILTER sunt introduse nou în Linux 2.2. Acestea sunt extensii Linux și nu ar trebui să
       fie utilizate în programe portabile.

       Linux  2.0  a  activat  o  anumită  compatibilitate  bug-to-bug cu BSD în codul de soclu brut atunci când
       opțiunea de soclu SO_BSDCOMPAT a fost activată; începând cu Linux 2.2, această opțiune nu mai  are  acest
       efect.

NOTE

       În  mod  implicit,  soclurile  brute descoperă ruta MTU (Maximum Transmission Unit).  Aceasta înseamnă că
       nucleul va ține evidența MTU către o anumită adresă IP țintă și va returna EMSGSIZE atunci când  scrierea
       unui  pachet  brut  o  depășește.  Atunci  când  se  întâmplă  acest lucru, aplicația ar trebui să reducă
       dimensiunea pachetului.  Descoperirea MTU a rutei poate fi, de asemenea, dezactivată  utilizând  opțiunea
       de  soclu  IP_MTU_DISCOVER  sau  fișierul  /proc/sys/net/ipv4/ip_no_pmtu_disc,  consultați  ip(7)  pentru
       detalii. Atunci când sunt dezactivate, soclurile brute vor fragmenta pachetele de  ieșire  care  depășesc
       MTU-ul  interfeței.  Cu  toate  acestea,  dezactivarea  nu  este recomandată din motive de performanță și
       fiabilitate.

       Un soclu brut poate fi legat la o anumită adresă locală utilizând apelul bind(2). Dacă  nu  este  legată,
       sunt  primite  toate  pachetele cu protocolul IP specificat.  În plus, un soclu brut poate fi legat la un
       anumit dispozitiv de rețea utilizând SO_BINDTODEVICE; consultați socket(7).

       Un soclu IPPROTO_RAW este numai de trimitere.  Dacă doriți cu adevărat să  primiți  toate  pachetele  IP,
       utilizați  un  soclu  packet(7) cu protocolul ETH_P_IP.  Rețineți că soclurile de pachete nu reasamblează
       fragmentele IP, spre deosebire de soclurile brute.

       Dacă doriți să primiți toate pachetele ICMP pentru un soclu de diagrame de date, este adesea mai bine  să
       utilizați IP_RECVERR pe acel soclu; consultați ip(7).

       Soclurile  brute pot atinge toate protocoalele IP în Linux, chiar și protocoale precum ICMP sau TCP, care
       au un modul de protocol în nucleu.  În acest caz, pachetele sunt transmise atât modulului din nucleu, cât
       și soclului (soclurilor) brut(e).  Nu ar trebui să vă bazați pe  acest  lucru  în  programele  portabile,
       multe alte implementări de soclu BSD au limitări aici.

       Linux  nu  modifică  niciodată  antetele transmise de utilizator (cu excepția completării unor câmpuri cu
       zero, așa cum este descris pentru IP_HDRINCL).   Acest  lucru  diferă  de  multe  alte  implementări  ale
       soclurilor brute.

       Soclurile  brute  sunt, în general, destul de neportabile și ar trebui evitate în programele destinate să
       fie portabile.

       Trimiterea pe socluri brute ar trebui să preia protocolul IP din  sin_port;  această  capacitate  a  fost
       pierdută în Linux 2.2. Soluția este de a utiliza IP_HDRINCL.

ERORI

       Extensiile proxy transparente nu sunt descrise.

       Atunci  când opțiunea IP_HDRINCL este activată, diagramele de date nu vor fi fragmentate și sunt limitate
       la MTU-ul interfeței.

       Definirea protocolului IP pentru trimitere în sin_port s-a pierdut în Linux 2.2.  Protocolul  la  care  a
       fost asociat soclul sau care a fost specificat în apelul inițial socket(2) este întotdeauna utilizat.

CONSULTAȚI ȘI

       recvmsg(2), sendmsg(2), capabilities(7), ip(7), socket(7)

       RFC 1191  pentru  descoperirea  MTU a rutei.  RFC 791 și fișierul de antet <linux/ip.h> pentru protocolul
       IP.

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                             raw(7)