File: packet.7

package info (click to toggle)
manpages-es 1.24a-6
  • links: PTS
  • area: main
  • in suites: potato
  • size: 4,256 kB
  • ctags: 7
  • sloc: makefile: 66; sh: 62
file content (349 lines) | stat: -rw-r--r-- 9,518 bytes parent folder | download
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
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
.\" Permission is granted to distribute possibly modified copies
.\" of this page provided the header is included verbatim,
.\" and in case of nontrivial modification author and date
.\" of the modification is added to the header.
.\" $Id: packet.7,v 1.7 1999/06/12 10:11:38 freitag Exp $
.\"
.\" Translated on Sun Jul 4 1999 by Juan Piernas <piernas@ditec.um.es>
.\"
.TH PACKET  7 "29 abril 1999" "Pgina man de Linux" "Manual del Porgramador de Linux" 
.SH NONBRE
packet, PF_PACKET \- Interfaz de paquetes a nivel de dispositivo. 
.\" si, esto es horrible.
.SH SINOPSIS
.nf
.B #include <sys/socket.h>
.br
.B #include <features.h>	/* para el nmero de versin de glibc */
.br
.B #if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1 
.br
.B #include <netpacket/packet.h>
.br
.B #include <net/ethernet.h>	/* los protocolos de nivel 2 */
.br
.B #else
.br
.B #include <asm/types.h>
.br
.B #include <linux/if_packet.h>
.br
.B #include <linux/if_ether.h>	/* los protocolos de nivel 2 */ 
.br
.B #endif
.sp
.PP
.BI "packet_socket = socket(PF_PACKET, int " socket_type ", int "protocol ); 
.fi
.SH DESCRIPCIN
Los conectores de paquetes (packet sockets) se usan para recibir o enviar
paquetes directos (raw) en el nivel del manejador de dispositivo (Nivel 2 de
OSI). Permiten al usuario implementar mdulos de protocolo en el espacio de
usuario por encima de la capa fsica.

.I socket_type
es o bien
.B SOCK_RAW 
para paquetes directos incluyendo la cabecera del nivel de enlace o bien
.B SOCK_DGRAM
para paquetes preparados con la cabecer del nivel de enlace eliminada. La
informacin de la cabecera del nivel de enlace est disponible en un formato
comn en una estructura
.BR sockaddr_ll . 
.I protocol 
es el protocolo IEEE 802.3 con los bytes en orden de red. Vea el fichero
cabecera 
.B <linux/if_ether.h> 
para una lista de los protocolos permitidos. Cuando se asigna a
.I protocol
el valor
.BR htons(ETH_P_ALL) ,
se reciben todos los protocolos.
Todos los paquetes de entrada con el tipo de protocolo indicado se pasarn
al conector de paquetes antes de que sean pasados a los protocolos
implementados dentro del ncleo.
 
Slo los procesos con uid efectivo 0 o la capacidad
.B CAP_NET_RAW
pueden abrir conectores de paquetes.

Los paquetes
.B SOCK_RAW
se pasan a y desde el manejador de dispositivo sin ningn cambio en los
datos del paquete. Cuando se recibe un paquete, la direccin todava se
analiza y se pasa en una estructura de direccin
.B sockaddr_ll
estndar. Cuando se transmite un paquete, el buffer proporcionado por el
usuario debe contener la cabecera de la capa fsica. A continuacin, ese
paquete se encola sin modificar en la tarjeta de red de la interfaz
definida por la direccin de destino.
.B SOCK_RAW
es similar pero no compatible con el obsoleto
.B SOCK_PACKET
de la versin 2.0 de Linux.

.B SOCK_DGRAM
opera en un nivel ligeramente superior. Se elimina la cabecera fsica antes
de que el paquete se pase al usuario. Los paquetes enviados a travs de un
conector de paquetes
.B SOCK_DGRAM
obtienen una cabecera adecuada de la capa fsica segn la informacin de la
direccin de destino
.BR sockaddr_ll ,
antes de ser encolados.

Por defecto, todos los paquetes del tipo de protocolo especificado se pasan
a un conector de paquetes. Para obtener slo los paquetes de una interfaz
especfica, use
.BR bind (2)
especificando una direccin en una estructura
.B struct sockaddr_ll
para enlazar el conector de paquetes a una interfaz.


.SH TIPOS DE DIRECCIONES
sockaddr_ll es una direccin de la capa fsica independiente del dispositivo.

.RS
.nf
.ta 4n 20n 35n
struct sockaddr_ll
{
	unsigned short	sll_family;	/* Siempre es AF_PACKET */
	unsigned short	sll_protocol;	/* Protocolo de la capa fsica */
	int	sll_ifindex;	/* Nmero de la interfaz */
	unsigned short	sll_hatype;	/* Tipo de cabecera */	
	unsigned char	sll_pkttype;	/* Tipo de paquete */
	unsigned char	sll_halen;	/* Longitud de la direccin */ 
	unsigned char	sll_addr[8];	/* Direccin de la capa fsica */
};
.ta
.fi
.RE

.B sll_protocol 
es el tipo del protocolo ethernet estndar dado en orden de red definido en
el fichero cabecera
.BR linux/if_ether.h .
.B sll_hatype 
es un tipo ARP de los definidos en el fichero cabecera
.BR linux/if_arp.h .
.B sll_pkttype 
contiene el tipo del paquete. Los tipos vlidos son
.B PACKET_HOST
para un paquete aplicado al anfitrin (host) local,
.B PACKET_BROADCAST
para un paquete de difusin de la capa fsica,
.B PACKET_MULTICAST
para un paquete enviado a una direccin multidestino de la capa fsica,
.B PACKET_OTHERHOST
para un paquete destinado a otros anfitriones que ha sido capturado por el
manejador del dispositivo en modo promiscuo y
.B PACKET_OUTGOING
para un paquete originado desde el anfitrin local que es devuelto de
regreso a un conector de paquetes.
.B sll_addr
y
.B sll_halen
contienen la direccin de la capa fsica (por ejemplo, IEEE 802.3) y su
longitud. La interpretacin exacta depende del dispositivo.

.SH OPCIONES DE LOS CONECTORES

Los conectores de paquetes slo se pueden usar para configurar el envo
multidestino de la capa fsica y el modo promscuo. Esto funciona llamando a
.BR setsockopt (2) 
con SOL_PACKET, para un conector de paquetes, y una de las opciones
.B PACKET_ADD_MEMBERSHIP
para aadir un enlace o
.B PACKET_DROP_MEMBERSHIP
para eliminarlo.
Ambas esperan una estructura
.B packet_mreq
como argumento:

.RS
.nf
.ta 4n 20n 35n
struct packet_mreq
{
	int	mr_ifindex;	/* ndice de la interfaz */
	unsigned short	mr_type;	/* accin */
	unsigned short	mr_alen;	/* longitud de la direccin */
	unsigned char	mr_address[8];	/* direccin de la capa fsica */ 
};
.ta
.fi
.RE 

.B mr_ifindex
contien el ndice de la interfaz cuyo estado debe cambiarse.
El parmetro
.B mr_type
indica la accin a realizar.
.B PACKET_MR_PROMISC
habilita la recepcin de todos los paquetes sobre un medio compartido
(conocido normalmente como ``modo promiscuo''),
.B PACKET_MR_MULTICAST 
enlaza el conector al grupo multidestino de la capa fsica indicado en
.B mr_address
y
.BR mr_alen ,
y
.B PACKET_MR_ALLMULTI
configura el conector para recibir todos los paquetes multidestino que
lleguen a la interfaz.

Adems, se pueden usar las ioctls tradicionales,
.BR SIOCSIFFLAGS ,
.B SIOCADDMULTI
y
.BR SIOCDELMULTI ,
para el mismo propsito.


.SH IOCTLS
.B SIOCGSTAMP
se puede usar para recibir la marca de tiempo del ltimo paquete recibido.
El argumento es una esctructura
.B struct timeval.

Adems, todas las ioctls estndares definidas en
.BR netdevice (7)
y 
.BR socket (7)
son vlidas en los conectores de paquetes.

.SH MANEJO DE ERRORES
Los conectores de paquetes no manejan otros errores que los ocurridos al
pasar el paquete al manejador del dispositivo. No poseen el concepto de error
pendiente.

.SH COMPATIBILIDAD
En la versin 2.0 de Linux, la nica forma de obtener un conector de
paquetes era llamando a
.BI "socket(PF_INET, SOCK_PACKET, " protocol )\fR.
Esto todava est soportado pero se desaprueba fuertemente.
La principal diferencia entre los dos mtodos es que
.BR SOCK_PACKET ,
para especificar una interfaz,
usa la antigua
.B struct sockaddr_pkt
que no proporciona independencia de la capa fsica.

.RS
.nf
.ta 4n 20n 35n
struct sockaddr_pkt
{
	unsigned short	spkt_family;
	unsigned char	spkt_device[14];
	unsigned short	spkt_protocol;
};
.ta
.fi
.RE

.B spkt_family 
contiene el tipo del dispositivo,
.B spkt_protocol 
es el tipo del protocolo IEEE 802.3 de los definidos en
.B <sys/if_ether.h>
y
.B spkt_device 
es el nombre del dispositivo dado como una cadena terminada en un nulo, por
ejemplo, eth0.

Esta estructura est obsoleta y no debera usarse en cdigo nuevo.

.SH NOTAS
Se sugiere que los programas transportables usen
.B PF_PACKET
a travs de 
.BR pcap (3),
aunque esto slo cubre un subconjunto de las caractersticas de
.BR PF_PACKET .

.SH ERRORES
.TP
.B ENETDOWN
La interfaz no est activa.

.TP
.B ENOTCONN
No se ha pasado una direccin de interfaz.

.TP
.B ENODEV
Nombre de dispositivo o ndice de interfaz, especificados en la direccin de
interfaz, desconocidos.

.TP
.B EMSGSIZE
El paquete es ms grande que la MTU de la interfaz.

.TP
.B ENOBUFS
No hay suficiente memoria para colocar el paquete.

.TP
.B EFAULT
El usuario ha pasado una direccin de memoria invlida.

.TP
.B EINVAL
Argumento invlido.

.TP
.B ENXIO
La direccin de interfaz contiene un ndice de interfaz ilegal.

.TP
.B EPERM
El usuario no tiene privilegios suficientes para llevar a cabo esta
operacin.

.TP
.B EADDRNOTAVAIL
Se ha pasado una direccin desconocida de grupo multidestino.

.TP
.B ENOENT
No se ha recibido ningn paquete.

.SH VERSIONES
.B PF_PACKET
es una nueva caracterstica de la versin 2.2 de Linux. Las primeras
versiones de Linux slo soportaban 
.B SOCK_PACKET.

.SH FALLOS
glibc 2.1 no posee una macro "define" para 
.B SOL_PACKET.
La solucin sugerida es usar
.RS
.nf
#ifndef SOL_PACKET
#define SOL_PACKET 263
#endif
.fi
.RE
Esto se soluciona en versiones posteriores de glibc. Este problema tampoco
se produce en sistemas libc5.

No se han documentado los filtros de los conectores.

.SH CREDITOS
Esta pgina de manual fue escrita por Andi Kleen con la ayuda de Matthew
Wilcox.

Alexey Kuznetsov implement la caracterstica PF_PACKET de la versin 2.2 de
Linux basndose en el cdigo de Alan Cox y otros.

.SH VASE TAMBIN
.BR ip "(7), " socket "(7), " socket "(2), " raw "(7), " pcap "(3)"

El fichero cabecera 
.BR linux/if_ether.h
para los protocolos de la capa fsica.