Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.1.1 & Your IP : 3.149.249.113
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
lib /
python3 /
dist-packages /
twisted /
test /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2024-11-28 06:59
__init__.py
475
B
-rw-r--r--
2022-02-07 13:12
cert.pem.no_trailing_newline
1.38
KB
-rw-r--r--
2022-02-07 13:12
crash_test_dummy.py
549
B
-rw-r--r--
2022-02-07 13:12
ignore_test_failure.py
30.72
KB
-rw-r--r--
2024-11-22 17:49
iosim.py
17.74
KB
-rw-r--r--
2022-02-07 13:12
key.pem.no_trailing_newline
1.67
KB
-rw-r--r--
2022-02-07 13:12
mock_win32process.py
1.27
KB
-rw-r--r--
2022-02-07 13:12
myrebuilder1.py
151
B
-rw-r--r--
2022-02-07 13:12
myrebuilder2.py
151
B
-rw-r--r--
2022-02-07 13:12
plugin_basic.py
901
B
-rw-r--r--
2022-02-07 13:12
plugin_extra1.py
392
B
-rw-r--r--
2022-02-07 13:12
plugin_extra2.py
550
B
-rw-r--r--
2022-02-07 13:12
process_cmdline.py
123
B
-rw-r--r--
2022-02-07 13:12
process_echoer.py
214
B
-rw-r--r--
2022-02-07 13:12
process_fds.py
984
B
-rw-r--r--
2022-02-07 13:12
process_getargv.py
234
B
-rw-r--r--
2022-02-07 13:12
process_getenv.py
268
B
-rw-r--r--
2022-02-07 13:12
process_linger.py
297
B
-rw-r--r--
2022-02-07 13:12
process_reader.py
178
B
-rw-r--r--
2022-02-07 13:12
process_signal.py
220
B
-rw-r--r--
2022-02-07 13:12
process_stdinreader.py
739
B
-rw-r--r--
2022-02-07 13:12
process_tester.py
779
B
-rw-r--r--
2022-02-07 13:12
process_tty.py
130
B
-rw-r--r--
2022-02-07 13:12
process_twisted.py
1.15
KB
-rw-r--r--
2022-02-07 13:12
proto_helpers.py
1.34
KB
-rw-r--r--
2022-02-07 13:12
reflect_helper_IE.py
60
B
-rw-r--r--
2022-02-07 13:12
reflect_helper_VE.py
81
B
-rw-r--r--
2022-02-07 13:12
reflect_helper_ZDE.py
48
B
-rw-r--r--
2022-02-07 13:12
server.pem
4.34
KB
-rw-r--r--
2022-02-07 13:12
ssl_helpers.py
1.61
KB
-rw-r--r--
2022-02-07 13:12
stdio_test_consumer.py
1.14
KB
-rw-r--r--
2022-02-07 13:12
stdio_test_halfclose.py
2
KB
-rw-r--r--
2022-02-07 13:12
stdio_test_hostpeer.py
1.06
KB
-rw-r--r--
2022-02-07 13:12
stdio_test_lastwrite.py
1.13
KB
-rw-r--r--
2022-02-07 13:12
stdio_test_loseconn.py
1.55
KB
-rw-r--r--
2022-02-07 13:12
stdio_test_producer.py
1.45
KB
-rw-r--r--
2022-02-07 13:12
stdio_test_write.py
902
B
-rw-r--r--
2022-02-07 13:12
stdio_test_writeseq.py
894
B
-rw-r--r--
2022-02-07 13:12
test_abstract.py
3.35
KB
-rw-r--r--
2022-02-07 13:12
test_adbapi.py
25.56
KB
-rw-r--r--
2022-02-07 13:12
test_amp.py
107.92
KB
-rw-r--r--
2022-02-07 13:12
test_application.py
33.34
KB
-rw-r--r--
2022-02-07 13:12
test_compat.py
17.75
KB
-rw-r--r--
2022-02-07 13:12
test_context.py
1.43
KB
-rw-r--r--
2022-02-07 13:12
test_cooperator.py
20.84
KB
-rw-r--r--
2022-02-07 13:12
test_defer.py
121.86
KB
-rw-r--r--
2022-02-07 13:12
test_defgen.py
10.38
KB
-rw-r--r--
2022-02-07 13:12
test_dict.py
1.49
KB
-rw-r--r--
2022-02-07 13:12
test_dirdbm.py
6.69
KB
-rw-r--r--
2022-02-07 13:12
test_error.py
8.72
KB
-rw-r--r--
2022-02-07 13:12
test_factories.py
4.46
KB
-rw-r--r--
2022-02-07 13:12
test_fdesc.py
7.28
KB
-rw-r--r--
2022-02-07 13:12
test_finger.py
1.85
KB
-rw-r--r--
2022-02-07 13:12
test_formmethod.py
3.87
KB
-rw-r--r--
2022-02-07 13:12
test_ftp.py
126.96
KB
-rw-r--r--
2022-02-07 13:12
test_ftp_options.py
2.63
KB
-rw-r--r--
2022-02-07 13:12
test_htb.py
3.08
KB
-rw-r--r--
2022-02-07 13:12
test_ident.py
6.56
KB
-rw-r--r--
2022-02-07 13:12
test_internet.py
45.38
KB
-rw-r--r--
2022-02-07 13:12
test_iosim.py
8.7
KB
-rw-r--r--
2022-02-07 13:12
test_iutils.py
13.31
KB
-rw-r--r--
2022-02-07 13:12
test_lockfile.py
14.98
KB
-rw-r--r--
2022-02-07 13:12
test_log.py
35.23
KB
-rw-r--r--
2022-02-07 13:12
test_logfile.py
17.47
KB
-rw-r--r--
2022-02-07 13:12
test_loopback.py
13.99
KB
-rw-r--r--
2022-02-07 13:12
test_main.py
2.12
KB
-rw-r--r--
2022-02-07 13:12
test_memcache.py
24.69
KB
-rw-r--r--
2022-02-07 13:12
test_modules.py
17.02
KB
-rw-r--r--
2024-11-22 17:49
test_monkey.py
5.39
KB
-rw-r--r--
2022-02-07 13:12
test_paths.py
69.31
KB
-rw-r--r--
2022-02-07 13:12
test_pcp.py
12.23
KB
-rw-r--r--
2022-02-07 13:12
test_persisted.py
13.09
KB
-rw-r--r--
2022-02-07 13:12
test_plugin.py
24.79
KB
-rw-r--r--
2022-02-07 13:12
test_policies.py
32.29
KB
-rw-r--r--
2022-02-07 13:12
test_postfix.py
4.32
KB
-rw-r--r--
2022-02-07 13:12
test_process.py
85.16
KB
-rw-r--r--
2022-02-07 13:12
test_protocols.py
7.16
KB
-rw-r--r--
2022-02-07 13:12
test_randbytes.py
3.19
KB
-rw-r--r--
2022-02-07 13:12
test_rebuild.py
7.15
KB
-rw-r--r--
2022-02-07 13:12
test_reflect.py
23.9
KB
-rw-r--r--
2022-02-07 13:12
test_roots.py
1.6
KB
-rw-r--r--
2022-02-07 13:12
test_shortcut.py
1.92
KB
-rw-r--r--
2022-02-07 13:12
test_sip.py
24.9
KB
-rw-r--r--
2022-02-07 13:12
test_sob.py
5.53
KB
-rw-r--r--
2022-02-07 13:12
test_socks.py
17.09
KB
-rw-r--r--
2022-02-07 13:12
test_ssl.py
22.75
KB
-rw-r--r--
2022-02-07 13:12
test_sslverify.py
113.89
KB
-rw-r--r--
2024-11-22 17:49
test_stateful.py
1.97
KB
-rw-r--r--
2022-02-07 13:12
test_stdio.py
12.43
KB
-rw-r--r--
2022-02-07 13:12
test_strerror.py
5.12
KB
-rw-r--r--
2022-02-07 13:12
test_strports.py
1.67
KB
-rw-r--r--
2022-02-07 13:12
test_task.py
45.26
KB
-rw-r--r--
2022-02-07 13:12
test_tcp.py
64.27
KB
-rw-r--r--
2022-02-07 13:12
test_tcp_internals.py
12.73
KB
-rw-r--r--
2022-02-07 13:12
test_text.py
6.22
KB
-rw-r--r--
2022-02-07 13:12
test_threadable.py
3.26
KB
-rw-r--r--
2022-02-07 13:12
test_threadpool.py
21.44
KB
-rw-r--r--
2022-02-07 13:12
test_threads.py
12.9
KB
-rw-r--r--
2022-02-07 13:12
test_tpfile.py
1.51
KB
-rw-r--r--
2022-02-07 13:12
test_twistd.py
72.04
KB
-rw-r--r--
2022-02-07 13:12
test_twisted.py
6.13
KB
-rw-r--r--
2022-02-07 13:12
test_udp.py
24.43
KB
-rw-r--r--
2022-02-07 13:12
test_unix.py
13.26
KB
-rw-r--r--
2022-02-07 13:12
test_usage.py
22.76
KB
-rw-r--r--
2022-02-07 13:12
testutils.py
5.06
KB
-rw-r--r--
2022-02-07 13:12
Save
Rename
# Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details. """ Whitebox tests for TCP APIs. """ import errno import os import socket try: import resource except ImportError: resource = None # type: ignore[assignment] from unittest import skipIf from twisted.internet import interfaces, reactor from twisted.internet.defer import gatherResults, maybeDeferred from twisted.internet.protocol import Protocol, ServerFactory from twisted.internet.tcp import ( _ACCEPT_ERRORS, EAGAIN, ECONNABORTED, EINPROGRESS, EMFILE, ENFILE, ENOBUFS, ENOMEM, EPERM, EWOULDBLOCK, Port, ) from twisted.python import log from twisted.python.runtime import platform from twisted.trial.unittest import TestCase @skipIf( not interfaces.IReactorFDSet.providedBy(reactor), "This test only applies to reactors that implement IReactorFDset", ) class PlatformAssumptionsTests(TestCase): """ Test assumptions about platform behaviors. """ socketLimit = 8192 def setUp(self): self.openSockets = [] if resource is not None: # On some buggy platforms we might leak FDs, and the test will # fail creating the initial two sockets we *do* want to # succeed. So, we make the soft limit the current number of fds # plus two more (for the two sockets we want to succeed). If we've # leaked too many fds for that to work, there's nothing we can # do. from twisted.internet.process import _listOpenFDs newLimit = len(_listOpenFDs()) + 2 self.originalFileLimit = resource.getrlimit(resource.RLIMIT_NOFILE) resource.setrlimit( resource.RLIMIT_NOFILE, (newLimit, self.originalFileLimit[1]) ) self.socketLimit = newLimit + 100 def tearDown(self): while self.openSockets: self.openSockets.pop().close() if resource is not None: # `macOS` implicitly lowers the hard limit in the setrlimit call # above. Retrieve the new hard limit to pass in to this # setrlimit call, so that it doesn't give us a permission denied # error. currentHardLimit = resource.getrlimit(resource.RLIMIT_NOFILE)[1] newSoftLimit = min(self.originalFileLimit[0], currentHardLimit) resource.setrlimit(resource.RLIMIT_NOFILE, (newSoftLimit, currentHardLimit)) def socket(self): """ Create and return a new socket object, also tracking it so it can be closed in the test tear down. """ s = socket.socket() self.openSockets.append(s) return s @skipIf( platform.getType() == "win32", "Windows requires an unacceptably large amount of resources to " "provoke this behavior in the naive manner.", ) def test_acceptOutOfFiles(self): """ Test that the platform accept(2) call fails with either L{EMFILE} or L{ENOBUFS} when there are too many file descriptors open. """ # Make a server to which to connect port = self.socket() port.bind(("127.0.0.1", 0)) serverPortNumber = port.getsockname()[1] port.listen(5) # Make a client to use to connect to the server client = self.socket() client.setblocking(False) # Use up all the rest of the file descriptors. for i in range(self.socketLimit): try: self.socket() except OSError as e: if e.args[0] in (EMFILE, ENOBUFS): # The desired state has been achieved. break else: # Some unexpected error occurred. raise else: self.fail("Could provoke neither EMFILE nor ENOBUFS from platform.") # Non-blocking connect is supposed to fail, but this is not true # everywhere (e.g. freeBSD) self.assertIn( client.connect_ex(("127.0.0.1", serverPortNumber)), (0, EINPROGRESS) ) # Make sure that the accept call fails in the way we expect. exc = self.assertRaises(socket.error, port.accept) self.assertIn(exc.args[0], (EMFILE, ENOBUFS)) @skipIf( not interfaces.IReactorFDSet.providedBy(reactor), "This test only applies to reactors that implement IReactorFDset", ) class SelectReactorTests(TestCase): """ Tests for select-specific failure conditions. """ def setUp(self): self.ports = [] self.messages = [] log.addObserver(self.messages.append) def tearDown(self): log.removeObserver(self.messages.append) return gatherResults([maybeDeferred(p.stopListening) for p in self.ports]) def port(self, portNumber, factory, interface): """ Create, start, and return a new L{Port}, also tracking it so it can be stopped in the test tear down. """ p = Port(portNumber, factory, interface=interface) p.startListening() self.ports.append(p) return p def _acceptFailureTest(self, socketErrorNumber): """ Test behavior in the face of an exception from C{accept(2)}. On any exception which indicates the platform is unable or unwilling to allocate further resources to us, the existing port should remain listening, a message should be logged, and the exception should not propagate outward from doRead. @param socketErrorNumber: The errno to simulate from accept. """ class FakeSocket: """ Pretend to be a socket in an overloaded system. """ def accept(self): raise OSError(socketErrorNumber, os.strerror(socketErrorNumber)) factory = ServerFactory() port = self.port(0, factory, interface="127.0.0.1") self.patch(port, "socket", FakeSocket()) port.doRead() expectedFormat = "Could not accept new connection ({acceptError})" expectedErrorCode = errno.errorcode[socketErrorNumber] matchingMessages = [ ( msg.get("log_format") == expectedFormat and msg.get("acceptError") == expectedErrorCode ) for msg in self.messages ] self.assertGreater( len(matchingMessages), 0, "Log event for failed accept not found in " "%r" % (self.messages,), ) def test_tooManyFilesFromAccept(self): """ C{accept(2)} can fail with C{EMFILE} when there are too many open file descriptors in the process. Test that this doesn't negatively impact any other existing connections. C{EMFILE} mainly occurs on Linux when the open file rlimit is encountered. """ return self._acceptFailureTest(EMFILE) def test_noBufferSpaceFromAccept(self): """ Similar to L{test_tooManyFilesFromAccept}, but test the case where C{accept(2)} fails with C{ENOBUFS}. This mainly occurs on Windows and FreeBSD, but may be possible on Linux and other platforms as well. """ return self._acceptFailureTest(ENOBUFS) def test_connectionAbortedFromAccept(self): """ Similar to L{test_tooManyFilesFromAccept}, but test the case where C{accept(2)} fails with C{ECONNABORTED}. It is not clear whether this is actually possible for TCP connections on modern versions of Linux. """ return self._acceptFailureTest(ECONNABORTED) @skipIf(platform.getType() == "win32", "Windows accept(2) cannot generate ENFILE") def test_noFilesFromAccept(self): """ Similar to L{test_tooManyFilesFromAccept}, but test the case where C{accept(2)} fails with C{ENFILE}. This can occur on Linux when the system has exhausted (!) its supply of inodes. """ return self._acceptFailureTest(ENFILE) @skipIf(platform.getType() == "win32", "Windows accept(2) cannot generate ENOMEM") def test_noMemoryFromAccept(self): """ Similar to L{test_tooManyFilesFromAccept}, but test the case where C{accept(2)} fails with C{ENOMEM}. On Linux at least, this can sensibly occur, even in a Python program (which eats memory like no ones business), when memory has become fragmented or low memory has been filled (d_alloc calls kmem_cache_alloc calls kmalloc - kmalloc only allocates out of low memory). """ return self._acceptFailureTest(ENOMEM) @skipIf( os.environ.get("INFRASTRUCTURE") == "AZUREPIPELINES", "Hangs on Azure Pipelines due to firewall", ) def test_acceptScaling(self): """ L{tcp.Port.doRead} increases the number of consecutive C{accept} calls it performs if all of the previous C{accept} calls succeed; otherwise, it reduces the number to the amount of successful calls. """ factory = ServerFactory() factory.protocol = Protocol port = self.port(0, factory, interface="127.0.0.1") self.addCleanup(port.stopListening) clients = [] def closeAll(): for client in clients: client.close() self.addCleanup(closeAll) def connect(): client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("127.0.0.1", port.getHost().port)) return client clients.append(connect()) port.numberAccepts = 1 port.doRead() self.assertGreater(port.numberAccepts, 1) clients.append(connect()) port.doRead() # There was only one outstanding client connection, so only # one accept(2) was possible. self.assertEqual(port.numberAccepts, 1) port.doRead() # There were no outstanding client connections, so only one # accept should be tried next. self.assertEqual(port.numberAccepts, 1) @skipIf(platform.getType() == "win32", "Windows accept(2) cannot generate EPERM") def test_permissionFailure(self): """ C{accept(2)} returning C{EPERM} is treated as a transient failure and the call retried no more than the maximum number of consecutive C{accept(2)} calls. """ maximumNumberOfAccepts = 123 acceptCalls = [0] class FakeSocketWithAcceptLimit: """ Pretend to be a socket in an overloaded system whose C{accept} method can only be called C{maximumNumberOfAccepts} times. """ def accept(oself): acceptCalls[0] += 1 if acceptCalls[0] > maximumNumberOfAccepts: self.fail("Maximum number of accept calls exceeded.") raise OSError(EPERM, os.strerror(EPERM)) # Verify that FakeSocketWithAcceptLimit.accept() fails the # test if the number of accept calls exceeds the maximum. for _ in range(maximumNumberOfAccepts): self.assertRaises(socket.error, FakeSocketWithAcceptLimit().accept) self.assertRaises(self.failureException, FakeSocketWithAcceptLimit().accept) acceptCalls = [0] factory = ServerFactory() port = self.port(0, factory, interface="127.0.0.1") port.numberAccepts = 123 self.patch(port, "socket", FakeSocketWithAcceptLimit()) # This should not loop infinitely. port.doRead() # This is scaled down to 1 because no accept(2)s returned # successfully. self.assertEquals(port.numberAccepts, 1) def test_unknownSocketErrorRaise(self): """ A C{socket.error} raised by C{accept(2)} whose C{errno} is unknown to the recovery logic is logged. """ knownErrors = list(_ACCEPT_ERRORS) knownErrors.extend([EAGAIN, EPERM, EWOULDBLOCK]) # Windows has object()s stubs for some errnos. unknownAcceptError = ( max(error for error in knownErrors if isinstance(error, int)) + 1 ) class FakeSocketWithUnknownAcceptError: """ Pretend to be a socket in an overloaded system whose C{accept} method can only be called C{maximumNumberOfAccepts} times. """ def accept(oself): raise OSError(unknownAcceptError, "unknown socket error message") factory = ServerFactory() port = self.port(0, factory, interface="127.0.0.1") self.patch(port, "socket", FakeSocketWithUnknownAcceptError()) port.doRead() failures = self.flushLoggedErrors(socket.error) self.assertEqual(1, len(failures)) self.assertEqual(failures[0].value.args[0], unknownAcceptError)