1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262
|
.\" -*- nroff -*-
.\" No modifique a primeira linha! Ela informa ao man que o tbl
.\" necessrio. O copyright (C) desta pgina de man de
.\" Andi Kleen <ak@muc.de>. Garante-se permisso para distribuir
.\" cpias - modificadas ou no - desta pgina conqanto este
.\" cabealho seja mantido, e, se houverem modificaes
.\" substanciais, o autor e a data da modificao devem ser
.\" acrescentados ao cabealho.
.\" Favor enviar relatos de bugs, correes e sugestes para <ak@muc.de>
.\" $Id: raw.7,v 1.1 2000/10/20 13:05:11 ricardo Exp $
.TH RAW 7 "2/10/1998" "Pgina de Manual do Linux" "Manual do Programador Linux"
.SH NOME
raw, SOCK_RAW \- Sockets IPv4 raw
.SH SINOPSE
.B #include <sys/socket.h>
.br
.B #include <netinet/in.h>
.br
.BI "raw_socket = socket(PF_INET, SOCK_RAW, int " protocol );
.SH DESCRIO
Sockets raw (no processados) permitem a implementao de novos protocolos sob o IPv4.
Um socket raw recebe ou envia o datagrama bruto, sem incluir cabealhos de link.
A camada IPv4 gera um cabealho IP ao enviar um pacote a menos que se ative a opo
.B IP_HDRINCL
do socket.
Quando ela est habilitada, o pacote deve conter um cabealho IP. Um
pacote IP que seja recebido ter sempre o cabealho IP.
Apenas processos com user id efetivo de 0 ou com capacidade
.B CAP_NET_RAW
podem abrir sockets raw.
Todos os pacotes ou erros relacionados ao nmero de
.I protocolo
especificado
para o socket raw so passados para este socket. Para uma
lista dos protocolos permitidos consulte o RFC 1700 e
.BR getprotobyname (3).
Um protocolo
.B IPPROTO_RAW
implica que o
.B IP_HDRINCL
est habilitado e recebe todos os protocolos IP. transmitir no permitido.
.TS
tab(:) allbox;
c s
l l.
Cabealhos IP so midificados quando enviados pelo IP_HDRINCL
IP Checksum:Sempre preenchido.
Source Address:Preenchido quando zero.
Packet Id:Preenchido quando zero.
Total Length:Sempre preenchido.
.TE
.PP
Se for especificado
.B IP_HDRINCL
e o cabealho IP tiver um endereo de destino diferente
de zero, este endereo usado para rotear o pacote. Quando for especificado
,B MSG_DONTROUTE
o endereo de destino deve apontar para uma interface local, caso contrrio
feita uma consulta tabela de roteamento, mas as rotas com gateways
so ignoradas.
Se no for especificado
.B IP_HDRINCL
as opes do cabealho IP podem ser ajustadas nos socker raw com
.BR setsockopt (2);
Ver
.BR ip (7)
para mais informaes.
No linux 2.2, todos as opes e campos de cabealho IP podem ser configuradas usando
as opes para sockets IP. Isto significa que os sockets raw normalmente s so necessrios para protocolos novos
ou protocolos sem interface de usurio como o ICMP.
Um pacote recebido passado para quaisquer sockets
raw que tenham sido atrelados ao seu protocolo antes de ser passado
para outros handlers deste protocolo (ex. mdulos de protocolo do kernel).
.SH FORMATO DO ENDEREO
Sockets raw usam a estrutura de endereo padro
.B sockaddr_in
definida em
.BR ip (7).
O campo
.B sin_port
pode ser usado para especificar o nmero do protocolo IP, mas
ignorado pelo linux 2.2 e deve ser sempre ajustado
para zero. (ver PROBLEMAS)
O campo
.B sin_port
contm o nmero do protocolo de pacotes recebidos.
Ver a lista de protocolos IP vlidos em
.B <netinet/in.h>
.
.SH OPES DE SOCKET
As opes de sockets raw podem ser ajustadas com
.BR setsockopt (2)
ou lidas com
.BR getsockopt (2)
passando-se o flag designador de famlia
.I SOL_RAW
.
.TP
.B ICMP_FILTER
Habilita um filtro especial para sockets raw ligados ao protocolo
.B IPPROTO_ICMP
Cada bit deste campo designa um tipo de mensagem ICMP a ser excluda.
O default no filtrar nenhuma mensagem ICMP.
.PP
Alm disso, todas as opes de socket
.B SOL_IP
.BR ip (7)
vlidas para sockets de datagrama so suportadas.
.SH NOTAS
Sockets raw fragmentam um pacote cujo tamanho total exceda o MTU da interface
(veja, no entanto, a seo PROBLEMAS).
Uma alternativa mais rpida e em sintonia com a rede implementar a pesquisa
do MTU do caminho na seo
.B IP_PMTU_DISCOVER
do
.BR ip (7).
Um socket raw pode ser ligado a um endereo local especfico usando a chamada
.BR bind (2)
Caso contrrio, todos os pacotes com o protocolo IP especificado so recebidos.
Alm disso, um socket RAW pode ser associado a um dispositivo de rede especfico usando
.B SO_BINDTODEVICE;
Ver
.BR socket (7).
Um socket
.B IPPROTO_RAW
transmissor apenas.
Se voc realmente quiser receber todos os pacotes IP use um socket
.BR packet (7)
com o protocolo
.B ETH_P_IP
. Observe que sockets packet no remontam fragmentos IP, ao contrrio dos sockets raw.
Se voc quiser receber todos os pacotes ICMP de um socket de datagrama, muitas
vezes melhor usar
.B IP_RECVERR
neste socket. Ver
.BR ip (7).
Os sockets raw podem ler todos os protocolos IP no linux, mesmo protocolos
como ICMP ou TCP, que tm um mdulo de protocolo no kernel. Neste caso, os
pacotes so passados tanto para o mdulo do kernel e para o(s) socket(s) raw.
No se deve contar com isso em programas portveis, porque muitas implementaes
de sockets em BSD tm limitaes aqui.
O linux nunca modifica cabealhos enviados pelo usurio, exceto para preencher
alguns campos zerados conforme descrito em
.BR IP_HDRINCL.
Muitas implementaes de sockets raw no se comportam assim.
Os sockets RAW geralmente so pouco portveis, devendo ser evitados em programas
que se deseje portar.
Os sockets raw enviados lem o protocolo de
.B sin_port;
Esta capacidade foi perdida no linux 2.2. A soluo usar
.B IP_HDRINCL.
.SH MANUSEIO DE ERROS
Erros originrios da rede s so passados para o usurio quando o socket
est conectado ou o flag
.B IP_RECVERR
est habilitado. Sockets conectados recebem apenas
.B EMSGSIZE
e
.B EPROTO
para manter a compatibilidade. Com
.B IP_RECVERR
todos os erros de rede so enviados para a fila de erros.
.SH ERROS
.TP
.B EMSGSIZE
O pacote grande demais. Ou a pesquisa de MTU do caminho est habilitada (com o sinalizador
.B IP_PMTU_DISCOVER
) ou o tamanho do pacote excede o mximo de 64KB permitido
pelo IPv4.
.TP
.B EACCES
O usurio tentou transmitir para um endereo de broadcast sem que o socket
tivesse um flag de broadcast.
.TP
.B EPROTO
Um mensagem ICMP chegou reportando um erro de parmetros.
.TP
.B EFAULT
Foi fornecido um endereo de memria invlido.
.TP
.B EOPNOTSUPP
Um flag invlido foi passado para uma chamada de socket (como
.BR MSG_OOB ).
.TP
.B EINVAL
Argumetno invlido.
.TP
.B EPERM
O usurio no tem permisso para abrir sockets raw. Apenas processos
com user if efetivo de 0 ou o atributo
.B CAP_NET_RAW
podem fazer isto.
.SH VERSES
.B IP_RECVERR
e
.B ICMP_FILTER
surgiram no linux 2.2. So extenses linux e no devem ser usadas em
programas portveis.
O linux 2.0 criou alguma compatibilidade 'bug a bug' com o BSD no cdigo dos
sockets raw, que habilitada com o flag SO_BSDCOMPAT. Isto foi retirado do 2.2.
.SH PROBLEMAS
Extenses transparentes de proxy no esto includas.
Quando a opo
.B IP_HDRINCL
est habilitada os datagramas no sero fragmentados, e ficam limitados interface
MTU. Isto uma limitao do linux 2.2.
O ajuste do protocolo IP para envio no campo
.B sin_port
foi perdido no linux 2.2. O protocolo que foi atrelado a este socket ou que
foi especificado na chamada inicial
.BR socket (2)
usado sempre.
.SH AUTORES
Esta pgina foi escrita por Andi Kleen.
.SH "VEJA TAMBM"
.BR ip (7),
.BR socket (7),
.BR recvmsg (2),
.BR sendmsg (2).
.PP
.B RFC1191
para pesquisa do MTU do caminho.
.B RFC791
e o arquivo
.B <linux/ip.h>
para o protocolo IP.
.SH TRADUZIDO POR LDP-BR em 21/08/2000.
\&\fR\&\f(CWPaulo Csar Mendes <drps@ism.com.br> (traduo)\fR
\&\fR\&\f(CWAndr L. Fassone Canova <lonelywolf@blv.com.br> (reviso)\fR
|