Добавьте этот патч в 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()
Затем, вместо вызова pkt.show2()
, просто вызовите эту функцию pkt.checksum_silent()
. (не забудьте сначала выполнить del pkt[IP].chksum
и del pkt[UDP].chksum
и т. Д.) , как показано в предыдущем ответе.
Эта функция должна быть быстрее и молчать.(Могут быть и другие вещи, которые нужно урезать; я взломал этот код вместе и проверил только, чтобы убедиться, что он молчал с правильной контрольной суммой.)