def test_register():
    if WinDivert.is_registered():
        WinDivert.unregister()
    while WinDivert.is_registered():
        time.sleep(0.01)  # pragma: no cover
    assert not WinDivert.is_registered()
    WinDivert.register()
    assert WinDivert.is_registered()
def test_register():
    if WinDivert.is_registered():
        WinDivert.unregister()
    while WinDivert.is_registered():
        time.sleep(0.01)  # pragma: no cover
    assert not WinDivert.is_registered()
    WinDivert.register()
    assert WinDivert.is_registered()
def test_unregister():
    w = WinDivert("false")
    w.open()
    WinDivert.unregister()
    time.sleep(0.1)
    assert WinDivert.is_registered()
    w.close()
    # may not trigger immediately.
    while WinDivert.is_registered():
        time.sleep(0.01)  # pragma: no cover
def test_unregister():
    w = WinDivert("false")
    w.open()
    WinDivert.unregister()
    time.sleep(0.1)
    assert WinDivert.is_registered()
    w.close()
    # may not trigger immediately.
    while WinDivert.is_registered():
        time.sleep(0.01)  # pragma: no cover
Exemple #5
0
 def test_register(self):
     """
     Tests DLL registration
     """
     d = WinDivert().register()
     assert d.is_registered()
     assert os.path.abspath(d.dll_path) == DEFAULT_DLL_PATH
Exemple #6
0
 def test_register(self):
     """
     Tests DLL registration
     """
     w = WinDivert(self.dll_path)
     w.register()
     self.assertTrue(w.is_registered())
Exemple #7
0
 def test_register(self):
     """
     Tests DLL registration
     """
     w = WinDivert(self.dll_path)
     w.register()
     self.assertTrue(w.is_registered())
Exemple #8
0
 def test_register(self):
     """
     Tests DLL registration
     """
     d = WinDivert(self.dll_path).register()
     self.assertTrue(d.is_registered())
     self.assertEquals(os.path.abspath(d.dll_path),
                       os.path.abspath(self.dll_path))
Exemple #9
0
 def test_register(self):
     """
     Tests DLL registration
     """
     d = WinDivert(self.dll_path).register()
     self.assertTrue(d.is_registered())
     self.assertEquals(os.path.abspath(d.dll_path),
                       os.path.abspath(self.dll_path))
Exemple #10
0
def testRegister():
	''' Attempt to register WinDivert '''

	dll_path3 = r"c:\Python276\lib\site-packages\pydivert-0.0.2-py2.7.egg\lib\1.1\amd64\WinDivert.dll"
	driver_path = r"c:\Python276\lib\site-packages\pydivert-0.0.2-py2.7.egg\lib\1.1\amd64"
	
	os.chdir(driver_path)

	handle = WinDivert(dll_path3)
	print "HANDLE:", handle
	handle.register()
	print "REGISTERED:", handle.is_registered()
Exemple #11
0
class PacketSniffer(QObject):
    ''' A class to sniff packets and alter them '''
    interface = None
    countPacketsCaptured = 0
    _filter="ip and (ip.DstAddr == %s or ip.SrcAddr == %s)"
    dropOutbound = False
    dropInbound = False

    def __init__(self, parent, server_ip=None, dll=None, running=True, priority=1000):
        ''' consructor, set variables '''
        super(PacketSniffer, self).__init__(parent)

        # Store reference to parent for emiting
        self.parent = parent

        # Store server IP determined earlier
        self.server_ip = server_ip

        # Build dll path
        if dll is None:
            if is_python_64bit() and is_windows_64bit():
                version = "amd64"
            elif not is_python_64bit() and not is_windows_64bit():
                version = "x86"
            else:
                raise InterpreterArchitectureMisMatch
            self.dll = os.path.abspath(os.path.join("assets","libs","WinDivert",version,"WinDivert.dll")).replace('\\','\\\\')
        else:
            self.dll = dll

        # Executing Flag
        self.running = running

        # Listen Packet Priority
        self.priority = priority

        # Build sniffer object
        self.interface = WinDivert(self.dll)

        # Build Packet Decryption Class
        self.tcp = TCP(self)

        # Build our session for http requests we make
        self.session = requests.Session()
        self.session.headers.update({'User-Agent': 'CMO3D', 'Accept': 'application/text'}) # TODO: Compare to what is actually being sent in Wireshark

    def stop(self):
        ''' Stop Execution '''
        self.running = False

    def register(self):
        ''' register pyDivert with the system '''

        if self.interface is not None and is_elevated_priv():
            self.interface.register()
        else:
            raise RequireElevatedPrivileges

    def isRegistered(self):
        ''' Bool. Is our sniffer properly registered '''

        if self.interface is not None:
            return self.interface.is_registered()
        else:
            return False

    def listen(self):
        ''' Core listen loop. Listen on interface for packets '''

        # Listen Packet Filter
        if self.server_ip is not None:
            self.filter = self._filter % (self.server_ip, self.server_ip)
        else:
            raise TargetServerIPNotSet

        if self.interface is not None and self.isRegistered():
            with Handle(self.interface, filter=self.filter, priority=self.priority, flags=1024) as handle:
                while self.running:

                    # Read in Packet
                    packet = handle.receive()

                    # Note the new packet
                    self.countPacketsCaptured += 1

                    # Parse Packet Payload (data)
                    payload = hexlify(packet.payload)

                    # Log IP headers
                    log.debug("[Packet]{}:{}:{}".format(packet.dst_addr, packet.dst_port, payload))

                    # Determine flow direction
                    self.outbound = False
                    if packet.meta.is_outbound():
                        self.outbound = True
                    
                    # Decode Packet, emit
                    if len(payload) is not 0:
                        self.tcp.checkPacket(payload)

                    # Send Packet on its way, if allowed
                    if self.outbound and not self.dropOutbound:
                        handle.send(packet)
                    elif not self.outbound and not self.dropInbound:
                        handle.send(packet)

                    
                handle.close()