예제 #1
0
    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
예제 #2
0
    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