.\" -*- coding: UTF-8 -*- '\" t .\" SPDX-License-Identifier: Linux-man-pages-1-para .\" .\" This man page is Copyright (C) 1999 Andi Kleen . .\" .\" $Id: raw.7,v 1.6 1999/06/05 10:32:08 freitag Exp $ .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH raw 7 "31 outubro 2023" "Linux man\-pages 6.06" .SH NOME raw \- 'sockets' IPv4 diretos .SH SINOPSE .nf \fB#include \fP \fB#include \fP \fBraw_socket = socket(AF_INET, SOCK_RAW, int \fP\fIprotocolo\fP\fB);\fP .fi .SH 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. .P A camada IPv4 gera um cabeçalho IP ao enviar um pacote a menos que se ative a opção \fBIP_HDRINCL\fP 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. .P Para criar um socket direto, um processo deve ter a capacidade \fBCAP_NET_RAW\fP no espaço de nomes do usuário que governa seu espaço de nomes de rede. .P Todos os pacotes ou erros relacionados ao número de \fIprotocolo\fP especificado para o socket direto são passados para este socket. Para uma lista dos protocolos atribuídos em .UR http://www.iana.org/assignments/protocol\-numbers/ .UE e \fBgetprotobyname\fP(3). .P Um protocolo de \fBIPPROTO_RAW\fP implica que o \fBIP_HDRINCL\fP está habilitado e é capaz de enviar qualquer protocolo IP que é especificado no cabeçalho passado. Receber de todos os protocolos IP via \fBIPPROTO_RAW\fP não é possível usando sockets diretos. .RS .TS tab(:) allbox; c s l l. Cabeçalhos IP são modificados quando enviados pelo \fBIP_HDRINCL\fP Soma de verificação do IP:Sempre preenchido Endereço de origem:Preenchido quando zero ID do pacote:Preenchido quando zero Tamanho total:Sempre preenchido .TE .RE .P Se for especificado \fBIP_HDRINCL\fP e o cabeçalho IP tiver um endereço de destino diferente de zero, este endereço de destino é usado para rotear o pacote. Quando for especificado \fBMSG_DONTROUTE\fP 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. .P Se não for especificado \fBIP_HDRINCL\fP as opções do cabeçalho IP podem ser ajustadas nos sockets diretos com \fBsetsockopt\fP(2); ver \fBip\fP(7) para mais informações. .P A partir do Linux 2.2, todos as opções e campos de cabeçalho IP podem ser configuradas usando as opções para sockets IP. Isto significa que os sockets diretos normalmente só são necessários para protocolos novos ou protocolos sem interface de usuário, como o ICMP. .P 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). .SS "Formato de endereço" .\" commit f59fc7f30b710d45aadf715460b3e60dbe9d3418 Para enviar e receber datagramas (\fBsendto\fP(2), \fBrecvfrom\fP(2) e similares), os sockets direto usam a estrutura de endereço padrão \fBsockaddr_in\fP definida em \fBip\fP(7). O campo \fBsin_port\fP pode ser usado para especificar o número do protocolo IP, mas é ignorado pelo Linux 2.2 e versões mais novas, e deve ser sempre ajustado para zero (veja BUGS). Para pacotes de entrada. \fBsin_port\fP é definido com zero. .SS "Opções de socket" .\" Or SOL_RAW on Linux As opções de sockets diretos podem ser ajustadas com \fBsetsockopt\fP(2) ou lidas com \fBgetsockopt\fP(2) passando\-se o sinalizador designador de família \fBIPPROTO_RAW\fP. .TP \fBICMP_FILTER\fP Habilita um filtro especial para sockets diretos ligados ao protocolo \fBIPPROTO_ICMP\fP. Cada bit deste campo designa um tipo de mensagem ICMP a ser excluída. O padrão é não filtrar nenhuma mensagem ICMP. .P Além disso, todas as opções de socket \fBIPPROTO_IP\fP \fBip\fP(7) válidas para sockets de datagrama são suportadas. .SS "Tratamento de erros" Erros originários da rede só são passados para o usuário quando o socket está conectado ou o sinalizador \fBIP_RECVERR\fP está habilitado. Os sockets conectados recebem apenas \fBEMSGSIZE\fP e \fBEPROTO\fP para manter a compatibilidade. Com \fBIP_RECVERR\fP todos os erros de rede são enviados para a fila de erros. .SH ERROS .TP \fBEACCES\fP O usuário tentou transmitir para um endereço de broadcast sem que o socket tivesse um sinalizador de broadcast. .TP \fBEFAULT\fP Foi fornecido um endereço de memória inválido. .TP \fBEINVAL\fP Argumento inválido. .TP \fBEMSGSIZE\fP O pacote é grande demais. Ou a pesquisa de MTU do caminho está habilitada (com o sinalizador \fBIP_MTU_DISCOVER\fP) ou o tamanho do pacote excede o máximo de 64\ kB permitido pelo IPv4. .TP \fBEOPNOTSUPP\fP Um sinalizador inválido foi passado para uma chamada de socket (como \fBMSG_OOB\fP). .TP \fBEPERM\fP O usuário não tem permissão para abrir sockets diretos. Apenas processos com ID efetivo de usuário com valor 0 ou o atributo \fBCAP_NET_RAW\fP podem fazer isto. .TP \fBEPROTO\fP Um mensagem ICMP chegou reportando um erro de parâmetros. .SH VERSÕES \fBIP_RECVERR\fP e \fBICMP_FILTER\fP surgiram no Linux 2.2. São extensões Linux e não devem ser usadas em programas portáveis. .P O Linux 2.0 criou alguma compatibilidade "bug a bug" com o BSD no código dos sockets diretos, quandoa opção de socket \fBSO_BSDCOMPAT\fP estava configurada. Desde o Linux 2.2, essa opção não possui mais efeito. .SH NOTAS Por padrão, os sockets diretos fazem a pesquisa de MTU (Unidade Máxima de Transmissão) do caminho. Isso significa que o kernel rastreará o MTU para um endereço IP de destino específico e retornará \fBEMSGSIZE\fP quando uma gravação de pacote direto o exceder. Quando isso acontecer, o aplicativo deverá diminuir o tamanho do pacote. A pesquisa de MTU do caminho também pode ser desativada usando a opção de socket \fBIP_MTU_DISCOVER\fP ou o arquivo \fI/proc/sys/net/ipv4/ip_no_pmtu_disc\fP, consulte \fBip\fP(7) para obter detalhes. Quando desativados, os soquetes brutos fragmentarão os pacotes de saída que excedem o MTU da interface. No entanto, desativá\-lo não é recomendado por motivos de desempenho e confiabilidade. .P Um socket direto pode ser ligado a um endereço local específico usando a chamada \fBbind\fP(2). Caso contrário, todos os pacotes com o protocolo IP especificado são recebidos. Além disso, um socket direto pode ser associado a um dispositivo de rede específico usando \fBSO_BINDTODEVICE\fP; veja \fBsocket\fP(7). .P Um socket \fBIPPROTO_RAW\fP é transmissor apenas. Se você realmente quiser receber todos os pacotes IP, use um socket \fBpacket\fP(7) com o protocolo \fBETH_P_IP\fP. Observe que pacotes de sockets não remontam fragmentos IP, ao contrário dos sockets diretos. .P Se você quiser receber todos os pacotes ICMP de um socket de datagrama, é muitas vezes melhor usar \fBIP_RECVERR\fP neste socket. Veja \fBip\fP(7). .P 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. .P O Linux nunca modifica cabeçalhos enviados pelo usuário, exceto para preencher alguns campos zerados conforme descrito em \fBIP_HDRINCL\fP. Muitas implementações de sockets diretos não se comportam assim. .P Os sockets diretos geralmente são pouco portáveis, devendo ser evitados em programas que se deseje portar. .P Os sockets diretos enviados leem o protocolo IP de \fIsin_port\fP; esta capacidade foi perdida no Linux 2.2. A solução é usar \fBIP_HDRINCL\fP. .SH BUGS Extensões transparentes de proxy não estão incluídas. .P Quando a opção \fBIP_HDRINCL\fP está habilitada os datagramas não serão fragmentados, e ficam limitados ao MTU da interface. .P .\" .SH AUTHORS .\" This man page was written by Andi Kleen. O ajuste do protocolo IP para envio no campo \fIsin_port\fP foi perdido no Linux 2.2. O protocolo que foi atrelado a este socket ou que foi especificado na chamada inicial à \fBsocket\fP(2) é usado sempre. .SH "VEJA TAMBÉM" \fBrecvmsg\fP(2), \fBsendmsg\fP(2), \fBcapabilities\fP(7), \fBip\fP(7), \fBsocket\fP(7) .P \fBRFC\ 1191\fP para pesquisa de MTU do caminho. \fBRFC\ 791\fP e arquivo de cabeçalho \fI\fP para o protocolo IP. .PP .SH TRADUÇÃO A tradução para português brasileiro desta página man foi criada por Paulo César Mendes , André Luiz Fassone e Rafael Fontenelle . . .PP Esta tradução é uma documentação livre; leia a .UR https://www.gnu.org/licenses/gpl-3.0.html Licença Pública Geral GNU Versão 3 .UE ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita. .PP Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para .MT debian-l10n-portuguese@lists.debian.org a lista de discussão de tradutores .ME .