Cómo escribir un complemento de análisis Wireshark para protocolos de cifrado
Sistema operativo: windows 7
wireshark: 1.10.3
lua: 5.1
Preparación
La sintaxis básica de Lua, especialmente la sintaxis relacionada con las operaciones de tabla y los bucles
La documentación de Wireshark, incluida la documentación del usuario y la documentación del desarrollador, se puede encontrar en el sitio web oficial de Wireshark
Tres. La documentación del usuario y la documentación del desarrollador se pueden encontrar en el sitio web oficial de Wireshark
Tres:
Primero definimos un protocolo simple y lo describimos usando la sintaxis del lenguaje C:
p>
1 struct foo
2 {
3 char protocol_type[16] /* solicitar respuesta notificar */
4 char service_type[16] ]; /* Varios tipos de servicios que definimos */
5 unsigned int msg_len; /* La longitud del cuerpo del mensaje*/
6 char msg_content[0]; El contenido del texto principal, dado que la longitud es variable, se define usando este método */
7};
Ahora, podemos usar lua para definir un marco mínimo p>
1 do
2 --[[
3 Crear una nueva estructura de protocolo foo_proto
4 El primer parámetro es el nombre del protocolo, que se reflejará en En el filtro
5 El segundo parámetro es información descriptiva sobre el protocolo y no tiene nada que ver con él
6 --]]
7 local foo_proto = Proto ("foo", "Foo Protocol")
8
9 --[[
10 Defina los campos a continuación
11 --]]
12 local foo_protocol_type = ProtoField.string("foo.prototype", "Protocol Type", base.NONE)
13 local foo_ service_type = ProtoField.string( "foo.servicetype", "Tipo de servicio", base.NONE)
14 local foo_msg_len = ProtoField.uint32("foo.msglen", "Base. Longitud del mensaje", base. DEC)
15 local foo_msg_content = ProtoField.string("foo.msgcontent", "Contenido del mensaje", base.NONE)
16
17 -- Agregar campo al protocolo Medio
18 foo_proto.fields = {
19 foo_protocol_type,
20 foo_service_type,
21 foo_msg_len, p>
22 foo_ msg_content
23 }
24
25 --[[
26 La función principal del El analizador foo se define a continuación. El primer parámetro es el tipo Tvb, que indica los datos que el analizador necesita analizar.
28 El segundo parámetro es el tipo Pinfo.
El tipo del segundo parámetro es Pinfo, que es la información del árbol de análisis del protocolo, incluida la visualización en la interfaz de usuario
29 El tipo del tercer parámetro es TreeItem, que representa el nivel superior del árbol de análisis
30 --]]
31 función foo_proto.dissector(tvb, pinfo. treeitem)
32
33 - - Establecer cierta información de la interfaz de usuario
34 pinfo.cols.protocol:set("FOO")
35 pinfo.cols.info:set("Foo Protocol")
36
37 desplazamiento local = 0
38 tvb_len local = tvb:len()
39
40 - - en el análisis Cree el nodo raíz de foo en el nivel superior del árbol
41 local foo_tree = treeitem: add( foo_proto, tvb:range(offset))
42 p>
43 -- El siguiente paso es agregar nodos secundarios al nodo raíz, es decir, e.
44 -- Tenga en cuenta la importancia de los dos parámetros del método de rango, el el primer parámetro representa el desplazamiento en este momento
45 -- El segundo parámetro representa la ocupación del campo. add(foo_msg_content, tvb:range( offset, foo_content_len))
56 offset = offset+foo_content_len
57
58 end
59
60 -- Condiciones para llamar a Wireshark para registrar complementos de protocolo
60 -- Condiciones para llamar a Wireshark para registrar complementos de protocolo
61 local tcp_tree: add(foo_msg_content, tvb:range( p>61 local tcp_port_table = DissectorTable.get("tcp.port")
62 tcp_port_table:add(12345, foo_proto)
63 fin