def processPacket(self, packet, *args, **kwargs): tcpPkt = self.agent.extract(packet) if tcpPkt is None: return None if not self.matches(packet, *args, **kwargs): return None for f in self.filters: packet = f.packetIn(packet) conn = self.getConnection(packet, *args, **kwargs) if not conn: return None conn = self.processTcpPkt(conn, packet, tcpPkt) if not conn or conn.closed: return None conn = self.processTcpData(conn, packet, tcpPkt, *args, **kwargs) _tcpPkt = self.getReply(packet, *args, **kwargs) if _tcpPkt is None: return None resp = self.agent.buildStandardTcpResponse( packet, _tcpPkt, payload=_tcpPkt.next, ipId=None if not conn.ipId else conn.ipId + 1 ) if conn.ipId is None: ipId = Ipv4Agent.extractId(resp) if ipId == 0: ipId = randint(0, 2 ** 16 - 1) conn.ipId = ipId conn.ipId += 1 return resp
def processPacket(self, packet, *args, **kwargs): tcpPkt = self.agent.extract(packet) if tcpPkt is None: return None if not self.matches(packet, *args, **kwargs): return None for f in self.filters: packet = f.packetIn(packet) if self.agent.isRst(tcpPkt) and not self.my_first_syn_acked: self.doConnectionFailure() return self.processTcpPkt(packet, tcpPkt) self.processTcpData(packet, tcpPkt, *args, **kwargs) _tcpPkt = self.getReply(packet, *args, **kwargs) if _tcpPkt is None: return None resp = self.agent.buildStandardTcpResponse( packet, _tcpPkt, payload=_tcpPkt.next, ipId=None if not self.ipId else self.ipId ) if self.ipId is None: ipId = Ipv4Agent.extractId(resp) if ipId == 0: ipId = randint(0, 2 ** 16 - 1) del randint self.ipId = ipId self.ipId += 1 return resp