Red de conocimiento informático - Conocimiento informático - Cómo escribir un complemento de análisis Wireshark para protocolos de cifrado

Cómo escribir un complemento de análisis Wireshark para protocolos de cifrado

Plataforma

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

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,

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

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