def cksum(self, ip, data = ""): """Calculate the TCP segment checksum outside of a chain.""" from pcs.packets.ipv4 import ipv4 from pcs.packets.ipv4 import pseudoipv4 from socket import IPPROTO_TCP tmpip = pseudoipv4() tmpip.src = ip.src tmpip.dst = ip.dst tmpip.protocol = IPPROTO_TCP tmpip.length = len(self.getbytes()) + len(data) pkt = tmpip.getbytes() + self.getbytes() + data return ipv4.ipv4_cksum(pkt)
def cksum(self, ip, data=""): """Calculate the TCP segment checksum outside of a chain.""" from pcs.packets.ipv4 import ipv4 from pcs.packets.ipv4 import pseudoipv4 from socket import IPPROTO_TCP tmpip = pseudoipv4() tmpip.src = ip.src tmpip.dst = ip.dst tmpip.protocol = IPPROTO_TCP tmpip.length = len(self.getbytes()) + len(data) pkt = tmpip.getbytes() + self.getbytes() + data return ipv4.ipv4_cksum(pkt)
def cksum(self, ip, data = ""): """Calculate the checksum for this UDPv4 header, outside of a chain.""" from socket import IPPROTO_UDP from pcs.packets.ipv4 import ipv4 from pcs.packets.ipv4 import pseudoipv4 tmpip = pseudoipv4() tmpip.src = ip.src tmpip.dst = ip.dst tmpip.protocol = IPPROTO_UDP tmpip.length = len(self.getbytes()) + len(data) tmpbytes = tmpip.getbytes() + self.getbytes() + data return ipv4.ipv4_cksum(tmpbytes)
def calc_checksum_v4(self, ip): """Calculate and store the checksum for the UDP datagram when encapsulated as an IPv4 payload with the given header.""" #print "udp.calc_checksum_v4()" from pcs.packets.ipv4 import ipv4 from pcs.packets.ipv4 import pseudoipv4 self.checksum = 0 payload = self._head.collate_following(self) pip = pseudoipv4() pip.src = ip.src pip.dst = ip.dst pip.protocol = socket.IPPROTO_UDP pip.length = len(self.getbytes()) + len(payload) tmpbytes = pip.getbytes() + self.getbytes() + payload self.checksum = ipv4.ipv4_cksum(tmpbytes)
def calc_checksum_v4(self, ip): """Calculate and store the checksum for the TCP segment when encapsulated as an IPv4 payload with the given header.""" from pcs.packets.ipv4 import ipv4 from pcs.packets.ipv4 import pseudoipv4 from socket import IPPROTO_TCP self.checksum = 0 payload = self._head.collate_following(self) pip = pseudoipv4() pip.src = ip.src pip.dst = ip.dst pip.protocol = IPPROTO_TCP pip.length = len(self.getbytes()) + len(payload) tmpbytes = pip.getbytes() + self.getbytes() + payload self.checksum = ipv4.ipv4_cksum(tmpbytes)
def tcp_cksum(self, ip, data=""): #TODO: add this method to pcs tcp.py """return tcpv4 checksum""" import struct total = 0 tmpip = ipv4.pseudoipv4() tmpip.src = ip.src tmpip.dst = ip.dst tmpip.reserved = 0 tmpip.protocol = pcs.IPPROTO_TCP tmpip.length = len(self.getbytes()) + len(data) pkt = tmpip.getbytes() + self.getbytes() + data if len(pkt) % 2 == 1: pkt += "\0" for i in range(len(pkt) / 2): total += (struct.unpack("!H", pkt[2 * i:2 * i + 2])[0]) total = (total >> 16) + (total & 0xffff) total += total >> 16 return ~total & 0xffff