nopasaran 0.2.109__tar.gz → 0.2.111__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. {nopasaran-0.2.109 → nopasaran-0.2.111}/PKG-INFO +1 -1
  2. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/udp_dns_socket_server.py +36 -20
  3. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/utils.py +2 -2
  4. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran.egg-info/PKG-INFO +1 -1
  5. {nopasaran-0.2.109 → nopasaran-0.2.111}/setup.py +1 -1
  6. {nopasaran-0.2.109 → nopasaran-0.2.111}/LICENSE +0 -0
  7. {nopasaran-0.2.109 → nopasaran-0.2.111}/README.md +0 -0
  8. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/__init__.py +0 -0
  9. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/__main__.py +0 -0
  10. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/controllers/__init__.py +0 -0
  11. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/controllers/controller.py +0 -0
  12. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/controllers/factory.py +0 -0
  13. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/controllers/protocol.py +0 -0
  14. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/decorators.py +0 -0
  15. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/definitions/__init__.py +0 -0
  16. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/definitions/commands.py +0 -0
  17. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/definitions/control_channel.py +0 -0
  18. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/definitions/events.py +0 -0
  19. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/definitions/transitions.py +0 -0
  20. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/errors/__init__.py +0 -0
  21. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/errors/parsing_error.py +0 -0
  22. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/http_2_utils.py +0 -0
  23. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/interpreters/__init__.py +0 -0
  24. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/interpreters/action_interpreter.py +0 -0
  25. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/interpreters/condition_interpreter.py +0 -0
  26. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/interpreters/interpreter.py +0 -0
  27. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/interpreters/transition_interpreter.py +0 -0
  28. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/machines/__init__.py +0 -0
  29. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/machines/action_queue.py +0 -0
  30. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/machines/state_machine.py +0 -0
  31. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/parsers/__init__.py +0 -0
  32. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/parsers/interpreter_parser.py +0 -0
  33. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/parsers/state_machine_parser.py +0 -0
  34. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/__init__.py +0 -0
  35. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/__init__.py +0 -0
  36. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/action_primitives.py +0 -0
  37. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/certificate_primitives.py +0 -0
  38. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/client_echo_primitives.py +0 -0
  39. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/control_channel_primitives.py +0 -0
  40. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/data_channel_primitives.py +0 -0
  41. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/data_manipulation.py +0 -0
  42. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/dns_primitives.py +0 -0
  43. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/event_primitives.py +0 -0
  44. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/http_1_request_primitives.py +0 -0
  45. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/http_1_response_primitives.py +0 -0
  46. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/http_2_client_primitives.py +0 -0
  47. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/http_2_server_primitives.py +0 -0
  48. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/http_simple_client_primitives.py +0 -0
  49. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/https_1_request_primitives.py +0 -0
  50. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/https_1_response_primitives.py +0 -0
  51. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/icmp_primitives.py +0 -0
  52. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/io_primitives.py +0 -0
  53. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/ip_primitives.py +0 -0
  54. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/nested_machine_utils.py +0 -0
  55. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/probing_primitives.py +0 -0
  56. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/replay_primitives.py +0 -0
  57. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/server_echo_primitives.py +0 -0
  58. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/signaling_primitive.py +0 -0
  59. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/tcp_dns_request_primitives.py +0 -0
  60. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/tcp_dns_response_primitives.py +0 -0
  61. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/tcp_primitives.py +0 -0
  62. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/timing_primitives.py +0 -0
  63. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/tls_primitives.py +0 -0
  64. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/udp_dns_request_primitives.py +0 -0
  65. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/udp_dns_response_primitives.py +0 -0
  66. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/action_primitives/udp_primitives.py +0 -0
  67. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/condition_primitives/__init__.py +0 -0
  68. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/condition_primitives/condition_primitives.py +0 -0
  69. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/condition_primitives/variable_comparisons.py +0 -0
  70. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/primitives.py +0 -0
  71. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/transition_primitives/__init__.py +0 -0
  72. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/transition_primitives/assignment_transitions.py +0 -0
  73. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/primitives/transition_primitives/transition_primitives.py +0 -0
  74. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/sniffers/__init__.py +0 -0
  75. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/sniffers/sniffer.py +0 -0
  76. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/__init__.py +0 -0
  77. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/checks.py +0 -0
  78. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/echo_socket_server.py +0 -0
  79. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/http_1_socket_server.py +0 -0
  80. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/http_2_overwrite.py +0 -0
  81. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/http_2_socket_base.py +0 -0
  82. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/http_2_socket_client.py +0 -0
  83. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/http_2_socket_server.py +0 -0
  84. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/https_1_socket_server.py +0 -0
  85. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran/tools/tcp_dns_socket_server.py +0 -0
  86. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran.egg-info/SOURCES.txt +0 -0
  87. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran.egg-info/dependency_links.txt +0 -0
  88. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran.egg-info/entry_points.txt +0 -0
  89. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran.egg-info/requires.txt +0 -0
  90. {nopasaran-0.2.109 → nopasaran-0.2.111}/nopasaran.egg-info/top_level.txt +0 -0
  91. {nopasaran-0.2.109 → nopasaran-0.2.111}/setup.cfg +0 -0
  92. {nopasaran-0.2.109 → nopasaran-0.2.111}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nopasaran
3
- Version: 0.2.109
3
+ Version: 0.2.111
4
4
  Summary: NoPASARAN is an advanced network tool designed to detect, fingerprint, and locate network middleboxes in a unified framework.
5
5
  Home-page: https://github.com/BenIlies/NoPASARAN
6
6
  Author: Ilies Benhabbour
@@ -2,6 +2,7 @@ import socket
2
2
  from dnslib import DNSRecord, RR, QTYPE, A, CNAME, MX, TXT, NS, SOA, PTR, AAAA, SRV, DS, RRSIG, NSEC, DNSKEY
3
3
  from nopasaran.definitions.events import EventNames
4
4
  import logging
5
+ import time
5
6
 
6
7
  class UDPDNSSocketServer:
7
8
  def __init__(self):
@@ -18,31 +19,46 @@ class UDPDNSSocketServer:
18
19
  self.sock.settimeout(timeout)
19
20
  logging.info(f"Waiting for UDP packets on port {self.sock.getsockname()[1]} with timeout {timeout} seconds")
20
21
 
21
- try:
22
- data, client_addr = self.sock.recvfrom(512) # max size of a DNS UDP packet
23
- logging.debug(f"Received {len(data)} bytes from {client_addr}")
22
+ start_time = time.time()
24
23
 
25
- logging.debug("Parsing DNS query...")
26
- parsed_query = DNSRecord.parse(data)
27
- logging.info(f"Parsed query:\n{parsed_query.toZone()}")
24
+ while True:
25
+ try:
26
+ remaining_time = timeout - (time.time() - start_time)
27
+ if remaining_time <= 0:
28
+ logging.warning("Timeout reached while waiting for a valid DNS query.")
29
+ return {"received": None}, EventNames.TIMEOUT.name
28
30
 
29
- logging.debug("Building DNS response...")
30
- response = self.build_response(parsed_query, response_spec)
31
+ self.sock.settimeout(remaining_time)
32
+ data, client_addr = self.sock.recvfrom(512) # max size of a DNS UDP packet
33
+ logging.debug(f"Received {len(data)} bytes from {client_addr}")
31
34
 
32
- logging.debug("Sending DNS response...")
33
- self.send_dns_response(client_addr, response)
34
- logging.info("DNS response sent successfully.")
35
+ logging.debug("Parsing DNS query...")
36
+ parsed_query = DNSRecord.parse(data)
35
37
 
36
- return {
37
- "received": str(parsed_query.q)
38
- }, EventNames.REQUEST_RECEIVED.name
38
+ # Check if query section is empty
39
+ if not parsed_query.questions:
40
+ logging.debug("Received DNS packet with no query section. Continuing to wait...")
41
+ continue
39
42
 
40
- except socket.timeout:
41
- logging.warning("Timeout reached with no packet received.")
42
- return {"received": None}, EventNames.TIMEOUT.name
43
- except Exception as e:
44
- logging.error(f"Error while handling DNS query: {e}", exc_info=True)
45
- return {"received": None}, EventNames.ERROR.name
43
+ logging.info(f"Parsed query:\n{parsed_query.toZone()}")
44
+
45
+ logging.debug("Building DNS response...")
46
+ response = self.build_response(parsed_query, response_spec)
47
+
48
+ logging.debug("Sending DNS response...")
49
+ self.send_dns_response(client_addr, response)
50
+ logging.info("DNS response sent successfully.")
51
+
52
+ return {
53
+ "received": str(parsed_query.q)
54
+ }, EventNames.REQUEST_RECEIVED.name
55
+
56
+ except socket.timeout:
57
+ logging.warning("Timeout reached while waiting for a valid DNS query.")
58
+ return {"received": None}, EventNames.TIMEOUT.name
59
+ except Exception as e:
60
+ logging.error(f"Error while handling DNS query: {e}", exc_info=True)
61
+ return {"received": None}, EventNames.ERROR.name
46
62
 
47
63
  def build_response(self, query_record, response_spec=None):
48
64
  qname = str(query_record.q.qname)
@@ -458,7 +458,7 @@ def send_tcp_dns_query(server_ip, server_port, domain, query_type="A"):
458
458
 
459
459
  logging.debug("Received response data")
460
460
  parsed_response = DNSRecord.parse(response_data)
461
- result["response"] = str(parsed_response).replace("\n", "")
461
+ result["response"] = str(parsed_response).replace("\n", "").replace(";;", "")
462
462
  return result
463
463
 
464
464
  except Exception as e:
@@ -511,7 +511,7 @@ def send_udp_dns_query(server_ip, server_port, domain, query_type="A"):
511
511
 
512
512
  logging.debug("Received UDP response")
513
513
  parsed_response = DNSRecord.parse(response_data)
514
- result["response"] = str(parsed_response).replace("\n", "")
514
+ result["response"] = str(parsed_response).replace("\n", "").replace(";;", "")
515
515
  return result
516
516
 
517
517
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nopasaran
3
- Version: 0.2.109
3
+ Version: 0.2.111
4
4
  Summary: NoPASARAN is an advanced network tool designed to detect, fingerprint, and locate network middleboxes in a unified framework.
5
5
  Home-page: https://github.com/BenIlies/NoPASARAN
6
6
  Author: Ilies Benhabbour
@@ -13,7 +13,7 @@ with open(requirements_file, "r") as f:
13
13
  # Version will automatically be updated when pushed on the main branch
14
14
  setup(
15
15
  name="nopasaran",
16
- version='0.2.109',
16
+ version='0.2.111',
17
17
  author="Ilies Benhabbour",
18
18
  author_email="ilies.benhabbour@kaust.edu.sa",
19
19
  description="NoPASARAN is an advanced network tool designed to detect, fingerprint, and locate network middleboxes in a unified framework.",
File without changes
File without changes
File without changes