tutorial para mac latest kali instalar descargar python scapy

python - para - ¿Cómo calcular un paquete de suma de comprobación sin enviarlo?



scapy python 3 (4)

Agrega este parche a scapy / packet.py:

+ def checksum_silent(self): + """ + Internal method that recalcs checksum without the annoying prints + **AFTER old checksums are deleted.** + """ + + for f in self.fields_desc: + if isinstance(f, ConditionalField) and not f._evalcond(self): + continue + fvalue = self.getfieldval(f.name) + if isinstance(fvalue, Packet) or (f.islist and f.holds_packets and type(fvalue) is list): + fvalue_gen = SetGen(fvalue,_iterpacket=0) + for fvalue in fvalue_gen: + fvalue.checksum_silent() + if self.payload: + self.payload.checksum_silent()

Luego, en lugar de llamar a pkt.show2() , simplemente llame a esta función pkt.checksum_silent() . (Recuerde hacer primero del pkt[IP].chksum y del pkt[UDP].chksum , etc.) como se muestra en la respuesta anterior.

Esta función debe ser más rápida y silenciosa. (También puede haber cosas adicionales para recortar; pirateé este código y solo lo probé para asegurarme de que estaba en silencio con la suma de comprobación correcta).

Estoy usando scapy, y quiero crear un paquete y calcular su ''suma de comprobación sin enviarlo. ¿Hay una manera de hacerlo?

Gracias.


De hecho, la función show2() calcula la suma de comprobación para usted, pero también imprime el contenido del paquete una vez que termina con su trabajo. Sin embargo, show2() tiene un pequeño parámetro útil llamado dump . La fuente lo describe como tal:

: param dump: determina si imprime o devuelve el valor de la cadena

Entonces, al configurar dump=True , puede evitar la molesta salida que la función proporciona de manera predeterminada y aún así obtener los cálculos que desee.


También he intentado evitar show2 () porque imprime el paquete. He encontrado en la fuente una mejor solución:

del packet.chksum packet = packet.__class__(str(packet))

Este código regenera el paquete con la suma de comprobación correcta sin ninguna impresión y, en realidad, es lo que show2 () se ejecuta en segundo plano antes de imprimir.


.chksum eliminar el valor .chksum del paquete después de crearlo; entonces llama .show2()

>>> from scapy.layers.inet import IP >>> from scapy.layers.inet import ICMP >>> from scapy.layers.inet import TCP >>> target = "10.9.8.7" >>> ttl = 64 >>> id = 32711 >>> sport = 2927 >>> dport = 80 >>> pak = IP(dst=target, src = "100.99.98.97", ttl=ttl, flags="DF", id=id, len=1200, chksum = 0)/TCP(flags="S", sport=sport, dport=int(dport), options=[(''Timestamp'',(0,0))], chksum = 0) >>> del pak[IP].chksum >>> del pak[TCP].chksum >>> pak.show2() ###[ IP ]### version = 4L ihl = 5L tos = 0x0 len = 1200 id = 32711 flags = DF frag = 0L ttl = 64 proto = tcp chksum = 0x9afd src = 100.99.98.97 dst = 10.9.8.7 /options / ###[ TCP ]### sport = 2927 dport = www seq = 0 ack = 0 dataofs = 8L reserved = 0L flags = S window = 8192 chksum = 0x2c0e urgptr = 0 options = [(''Timestamp'', (0, 0)), (''EOL'', None)] >>>