def cksum(self, ip, data="", nx=0): """Calculate the checksum for this ICMPv6 header, outside of a chain.""" p6 = pseudoipv6.pseudoipv6() p6.src = ip.src p6.dst = ip.dst p6.length = len(self.getbytes()) + len(data) if nx: p6.next_header = nx else: p6.next_header = ip.next_header pkt = p6.getbytes() + self.getbytes() + data return ipv4.ipv4_cksum(pkt)
def cksum(self, ip, data = "", nx = 0): """Calculate the checksum for this ICMPv6 header, outside of a chain.""" p6 = pseudoipv6.pseudoipv6() p6.src = ip.src p6.dst = ip.dst p6.length = len(self.getbytes()) + len (data) if nx: p6.next_header = nx else: p6.next_header = ip.next_header pkt = p6.getbytes() + self.getbytes() + data return ipv4.ipv4_cksum(pkt)
def calc_checksum_v6(self, ip6): """Calculate and store the checksum for the TCP segment when encapsulated as an IPv6 payload with the given header.""" from pcs.packets.ipv4 import ipv4 from pcs.packets.pseudoipv6 import pseudoipv6 self.checksum = 0 payload = self._head.collate_following(self) pip6 = pseudoipv6() pip6.src = ip6.src pip6.dst = ip6.dst pip6.next_header = ip6.next_header pip6.length = len(self.getbytes()) + len(payload) tmpbytes = pip6.getbytes() + self.getbytes() + payload self.checksum = ipv4.ipv4_cksum(tmpbytes)
def cksum(self, ip, data = "", nx = 0): """Calculate the checksum for this UDPv6 header, outside of any existing chain.""" from pcs.packets.ipv4 import ipv4 from pcs.packets.pseudoipv6 import pseudoipv6 p6 = pseudoipv6() p6.src = ip.src p6.dst = ip.dst p6.length = len(self.getbytes()) + len(data) if nx: p6.next_header = nx else: p6.next_header = ip.next_header tmpbytes = p6.getbytes() + self.getbytes() + data return ipv4.ipv4_cksum(tmpbytes)
def calc_checksum(self): """Calculate and store the checksum for this ICMPv6 header. ICMPv6 checksums are computed over data payloads and next-headers. The packet must be part of a chain.""" self.checksum = 0 if self._head is not None: payload = self._head.collate_following(self) ip6 = self._head.find_preceding(self, pcs.packets.ipv6) assert ip6 is not None, "No preceding IPv6 header." pip6 = pseudoipv6.pseudoipv6() pip6.src = ip6.src pip6.dst = ip6.dst pip6.next_header = ip6.next_header pip6.length = len(self.getbytes()) + len(payload) tmpbytes = pip6.getbytes() + self.getbytes() + payload else: tmpbytes = self.getbytes() self.checksum = ipv4.ipv4_cksum(tmpbytes)