Reto de fin de semana - Respuestas

03 de diciembre 2009 por Chris Dejar una respuesta »

Así su ahora Jueves, así que pensé es el momento de publicar las respuestas a desafiar la semana pasada. ;)

En primer lugar, ¿por qué te importa acerca de IPv6, si usted no ha comenzado su despliegue? Me sentí de la misma manera hasta que encontré IPv6 se utiliza como un canal de comunicación encubierta dentro de la red de un cliente. Los datos fueron luego ser empujado a Internet a través de Teredo. Si usted no está familiarizado con la técnica, Scott Hogg tiene algunos puestos excelentes sobre el tema.

Así que incluso si usted no está utilizando IPv6, vale la pena empezar a cortar la cura de la tecnología, así como la observación de que en su red local.

A que revisen, el desafío era:

Escribir un filtro de tcpdump o Windump que capturar todo el tráfico con una dirección IPv6 de origen de 2001: db8:: 10 a 2001: db8:: 20.

Hay un par de advertencias por escrito con este filtro. El que los primeros tratados en el post anterior. El último, que yo sabía, pero nunca pensé que realmente era un problema hasta que comenzó a trabajar con IPv6 muy fuerte, es que tcpdump / Windump sólo le permitirá utilizar 1, 2 o 4 máscaras de bytes. Así que, aunque nos gustaría resolver esto con una declaración inicial de filtro de "ip6 [08:14] =", no podemos, porque estamos limitados a 4 bytes. De hecho, hay una manera de evitar esto, pero voy a volver a ella.

Así que aquí está el filtro que he estado trabajando con:

(Ip6 [08:04] = 0x20010db8 y ip6 [12:04] = 0 y ip6 [16:04] = 0 y (ip6 [20:04]> = 0 × 0010 y ip6 [20:04] <= 0050 ))

Poco largo, pero funciona. Isabel se le ocurrió una solución que es mucho más elegante que la mía:

src neto 2001: db8:: / 122 y ip6 [23]> = 0 × 10 & & ip6 [23] <= 0 × 20

Por lo tanto, comenzando con el formato libpcap, ella es capaz de combinar mis tres primeros estados en uno solo. De no ser una reina de tamaño, pero que hace que su solución es mucho más corta que la mía. En este caso, que es una buena cosa. :)

Eso es todo. Voy a publicar otro de los desafíos de tipo IPv6 mañana.

Puestos relacionados con:

  1. Fin de semana Desafío
  2. Reto de fin de semana - Pista
  3. ICMPv6 Challenge - Respuestas
  4. ICMPv6 Desafío
  5. ICMPv6 Challenge - Sugerencias

Anuncio

5 comentarios

  1. JC ha dicho:

    Chris,
    repican en tarde, pero después, junto con timtowtdi
    ¿Qué tal ...
    "Src net 2001: db8:: / 122 y ((ip6 [23] y 0xE0 == 0) o (ip6 [23] == 0 × 20)) '

  2. Chris dice:

    Actualizar mi respuesta debido a la falta de cafeína:
    src neto 2001: db8:: / 122
    Estamos enmascaramiento en 122 bits. Así se especifica que los bits 33 a 122 son igual a 0.
    ip6 [23] y 0xE0 == 0
    Este filtro dice que los bits 121 a 123 debe ser 0.
    ip6 [23] == 0 × 20
    Este filtro dice 123 bit debe ser 1.

    Así que sólo se centran en el último byte, la declaración dice "bits 121 y 122 debe estar apagado y (123 bits debe estar apagado o 123 bits debe estar encendido)". Esto nos lleva a cerrar, pero lo que si está fuera de 124 bits? Esto podría coincidir con el filtro, pero todavía nos ponen fuera del rango de direcciones especificado.

    • JC ha dicho:

      ok así que para que coincida con el primer mordisco al último byte. (Yo sólo quiero que para que coincida con 1 (que produce 16 a 31) se
      ip6 [23] y F0 == 1
      hacer el truco?

      • Chris dice:

        El filtro:
        ip [23] y F0 == 1
        se verá en los cuatro bits de orden superior y de partido en el bit más bajo * * Para que se establece. En otras palabras, el valor especificado (1) se consideraría un decimal y se encuentra fuera del rango de la máscara. Si se ejecuta el filtro, verá que tcpdump te da un error de sintaxis. : (

        Echemos un vistazo a este último byte en binario para ver si eso hace que el problema sea más fácil.
        Estamos tratando de coincidir con un valor binario de:
        00010000-00100000
        El "src net" parte del filtro se encarga de velar por los dos bits de alto orden (64 y 128) se establecen en 0, por lo que no tiene que preocuparse por ellos.
        El resto de las necesidades de nuestros filtros para verificar:
        1) ¿Es de 32 bits encendidos, con todos los bits de orden inferior apagado (exactamente 00.100.000).

        o ...

        2) ¿Es de 32 bits apagado, encendido de 16 bits, ignorando los bits de orden inferior (rango de valores es 00010000 a 00011111).

        Así que la manera más fácil de filtrar esto es incluir el mayor que y menor que los primitivos. Lo que quiero decir es:
        00010000 <= valor <= 00100000

        Ahora, de regreso a convertir este maleficio y conseguir que:
        0x10 <= valor <= 0x20

        En tcpdump hablar, de escribir esta expresión como:
        ip6 [23]> = 0 × 10 & & ip6 [23] <= 0 × 20

        o:
        ip6 [23]> = 0 × 10 y ip6 [23] <= 0 × 20

        Sentido un poco más?

        • JC ha dicho:

          Tiene sentido sólo quiero ser difícil ;-)
          Estoy tratando de ver si hay una manera de llevar a cabo este enmascaramiento poco uso. Sólo se dio cuenta de mi respuesta anterior, trató de coincidir con un mordisco, no el byte así que aquí va un último intento
          src neto 2001: db8:: / 122 y ((ip6 [23] y 0xF0 = 0 × 10) o (ip6 [23] = 0 × 20)) '

          Así
          ip6 [23] y 0xF0 = 0 × 10 (debe coincidir con decimal 16 - 31) y luego ip6 [23] = 0 × 20 debe coincidir con 32. O es el momento de tirar la toalla?

Deja un comentario