Provided by: manpages-pt-br_4.18.1-1_all bug

NOME

       raw - 'sockets' IPv4 diretos

SINOPSE

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

DESCRIÇÃO

       Os  'sockets' diretos (não processados) permitem a implementação de novos protocolos sob o
       IPv4. Um 'socket' direto recebe ou envia o datagrama  bruto,  sem  incluir  cabeçalhos  de
       ligação.

       A  camada  IPv4  gera  um  cabeçalho  IP  ao enviar um pacote a menos que se ative a opção
       IP_HDRINCL do 'socket'. Quando ela está habilitada, o pacote deve conter um cabeçalho  IP.
       Um pacote IP que seja recebido terá sempre o cabeçalho IP.

       In  order  to  create  a raw socket, a process must have the CAP_NET_RAW capability in the
       user namespace that governs its network namespace.

       All packets or errors matching the protocol number specified for the raw socket are passed
       to  this  socket.   For  a  list  of  the allowed protocols, see the IANA list of assigned
       protocol    numbers     at     ⟨http://www.iana.org/assignments/protocol-numbers/⟩     and
       getprotobyname(3).

       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.

              ┌──────────────────────────────────────────────────────────────┐
              │Cabeçalhos IP são midificados quando enviados pelo IP_HDRINCL │
              ├────────────────────────────────┬─────────────────────────────┤
              │Soma de verificação do IP       │Sempre preenchido            │
              ├────────────────────────────────┼─────────────────────────────┤
              │Endereço de origem              │Preenchido quando zero       │
              ├────────────────────────────────┼─────────────────────────────┤
              │Packet ID                       │Preenchido quando zero       │
              ├────────────────────────────────┼─────────────────────────────┤
              │Tamanho total                   │Sempre preenchido            │
              └────────────────────────────────┴─────────────────────────────┘
       Se  for especificado IP_HDRINCL e o cabeçalho IP tiver um endereço de destino diferente de
       zero, este endereço é usado para rotear o pacote. Quando for especificado MSG_DONTROUTE  o
       endereço  de  destino  deve  apontar  para uma interface local, caso contrário é feita uma
       consulta à tabela de roteamento, mas as rotas com gateways são ignoradas.

       Se não for especificado IP_HDRINCL as opções do  cabeçalho  IP  podem  ser  ajustadas  nos
       'sockets' diretos com setsockopt(2); ver ip(7) para mais informações.

       Starting  with  Linux  2.2,  all  IP  header fields and options can be set using IP socket
       options.  This means raw sockets are usually needed only for new  protocols  or  protocols
       with no user interface (like ICMP).

       Um pacote recebido é passado para quaisquer 'sockets' diretos que tenham sido atrelados ao
       seu protocolo antes de ser passado para outros manipuladores deste protocolo (ex.  módulos
       de protocolo do kernel).

   Formato de endereço
       For sending and receiving datagrams (sendto(2), recvfrom(2), and similar), raw sockets use
       the standard sockaddr_in address structure defined in ip(7).  The sin_port field could  be
       used  to  specify  the  IP protocol number, but it is ignored for sending in Linux 2.2 and
       later, and should be always set to 0 (see BUGS).  For incoming packets, sin_port is set to
       zero.

   Socket options
       As  opções  de  'sockets'  diretos  podem  ser  ajustadas  com  setsockopt(2) ou lidas com
       getsockopt(2) passando-se o sinalizador designador de família IPPROTO_RAW.

       ICMP_FILTER
              Habilita  um  filtro  especial  para  'sockets'  diretos   ligados   ao   protocolo
              IPPROTO_ICMP. Cada bit deste campo designa um tipo de mensagem ICMP a ser excluída.
              O padrão é não filtrar nenhuma mensagem ICMP.

       Além disso, todas as opções  de  'socket'  IPPROTO_IP  ip(7)  válidas  para  'sockets'  de
       datagrama são suportadas.

   Error handling
       Erros  originários da rede só são passados para o usuário quando o 'socket' está conectado
       ou o sinalizador IP_RECVERR  está  habilitado.  Os  'sockets'  conectados  recebem  apenas
       EMSGSIZE e EPROTO para manter a compatibilidade. Com IP_RECVERR todos os erros de rede são
       enviados para a fila de erros.

ERROS

       EACCES O usuário tentou transmitir para um  endereço  de  broadcast  sem  que  o  'socket'
              tivesse um sinalizador de broadcast.

       EFAULT Foi fornecido um endereço de memória inválido.

       EINVAL Argumento inválido.

       EMSGSIZE
              O  pacote  é  grande demais. Ou a pesquisa de MTU do caminho está habilitada (com o
              sinalizador IP_MTU_DISCOVER) ou o tamanho  do  pacote  excede  o  máximo  de  64 kB
              permitido pelo IPv4.

       EOPNOTSUPP
              Um sinalizador inválido foi passado para uma chamada de 'socket' (como MSG_OOB).

       EPERM  O usuário não tem permissão para abrir 'sockets' diretos. Apenas processos com user
              ID efetivo de 0 ou o atributo CAP_NET_RAW podem fazer isto.

       EPROTO Um mensagem ICMP chegou reportando um erro de parâmetros.

VERSÕES

       IP_RECVERR e ICMP_FILTER surgiram no linux 2.2. São extensões linux e não devem ser usadas
       em programas portáveis.

       Linux  2.0  enabled some bug-to-bug compatibility with BSD in the raw socket code when the
       SO_BSDCOMPAT socket option was set; since Linux  2.2,  this  option  no  longer  has  that
       effect.

NOTAS

       By default, raw sockets do path MTU (Maximum Transmission Unit) discovery.  This means the
       kernel will keep track of the MTU to a specific target IP address and return EMSGSIZE when
       a  raw  packet  write  exceeds it.  When this happens, the application should decrease the
       packet size.  Path MTU discovery can be also turned off using the  IP_MTU_DISCOVER  socket
       option  or  the  /proc/sys/net/ipv4/ip_no_pmtu_disc  file,  see  ip(7)  for details.  When
       turned off, raw sockets will fragment outgoing packets  that  exceed  the  interface  MTU.
       However, disabling it is not recommended for performance and reliability reasons.

       A raw socket can be bound to a specific local address using the bind(2) call.  If it isn't
       bound, all packets with the specified IP protocol are received.  In addition, a raw socket
       can be bound to a specific network device using SO_BINDTODEVICE; see socket(7).

       Um  'socket'  IPPROTO_RAW  é transmissor apenas. Se você realmente quiser receber todos os
       pacotes IP use um 'socket' packet(7)  com  o  protocolo  ETH_P_IP.  Observe  que  'sockets
       packet' não remontam fragmentos IP, ao contrário dos 'sockets' diretos.

       Se  você  quiser receber todos os pacotes ICMP de um 'socket' de datagrama, é muitas vezes
       melhor usar IP_RECVERR neste 'socket'. Ver ip(7).

       Os 'sockets' diretos podem ler todos os protocolos IP no linux, mesmo protocolos como ICMP
       ou  TCP,  que  têm  um  módulo de protocolo no kernel. Neste caso, os pacotes são passados
       tanto para o módulo do kernel e para o(s) 'socket(s)' diretos. Não se deve contar com isso
       em  programas  portáveis,  porque muitas implementações de 'sockets' em BSD têm limitações
       aqui.

       O linux nunca modifica cabeçalhos enviados pelo  usuário,  exceto  para  preencher  alguns
       campos zerados conforme descrito em IP_HDRINCL. Muitas implementações de 'sockets' diretos
       não se comportam assim.

       Raw sockets are generally rather unportable and should be avoided in programs intended  to
       be portable.

       Os 'sockets' diretos enviados lêem o protocolo de sin_port; esta capacidade foi perdida no
       linux 2.2. A solução é usar IP_HDRINCL.

BUGS

       Extensões transparentes de proxy não estão incluídas.

       Quando a opção IP_HDRINCL está habilitada os datagramas não serão  fragmentados,  e  ficam
       limitados à interface MTU.

       O  ajuste  do  protocolo  IP  para  envio  no  campo  sin_port foi perdido no linux 2.2. O
       protocolo que foi atrelado a este 'socket' ou que foi especificado na  chamada  inicial  à
       socket(2) é usado sempre.

VEJA TAMBÉM

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

       RFC 1191  for  path  MTU  discovery.   RFC 791 and the <linux/ip.h> header file for the IP
       protocol.

TRADUÇÃO

       A tradução para português brasileiro desta página man foi criada por  Paulo  César  Mendes
       <drpc@ism.com.br> e André Luiz Fassone <lonely_wolf@ig.com.br>

       Esta  tradução  é  uma  documentação  livre;  leia  a  Licença  Pública Geral GNU Versão 3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ ou posterior para  as  condições  de  direitos
       autorais.  Nenhuma responsabilidade é aceita.

       Se  você  encontrar  algum erro na tradução desta página de manual, envie um e-mail para a
       lista de discussão de tradutores ⟨debian-l10n-portuguese@lists.debian.org⟩.