nopasaran 0.2.92__tar.gz → 0.2.94__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 (86) hide show
  1. {nopasaran-0.2.92 → nopasaran-0.2.94}/PKG-INFO +1 -1
  2. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/dns_primitives.py +25 -22
  3. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran.egg-info/PKG-INFO +1 -1
  4. {nopasaran-0.2.92 → nopasaran-0.2.94}/setup.py +1 -1
  5. {nopasaran-0.2.92 → nopasaran-0.2.94}/LICENSE +0 -0
  6. {nopasaran-0.2.92 → nopasaran-0.2.94}/README.md +0 -0
  7. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/__init__.py +0 -0
  8. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/__main__.py +0 -0
  9. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/controllers/__init__.py +0 -0
  10. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/controllers/controller.py +0 -0
  11. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/controllers/factory.py +0 -0
  12. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/controllers/protocol.py +0 -0
  13. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/decorators.py +0 -0
  14. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/definitions/__init__.py +0 -0
  15. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/definitions/commands.py +0 -0
  16. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/definitions/control_channel.py +0 -0
  17. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/definitions/events.py +0 -0
  18. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/definitions/transitions.py +0 -0
  19. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/errors/__init__.py +0 -0
  20. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/errors/parsing_error.py +0 -0
  21. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/http_2_utils.py +0 -0
  22. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/interpreters/__init__.py +0 -0
  23. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/interpreters/action_interpreter.py +0 -0
  24. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/interpreters/condition_interpreter.py +0 -0
  25. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/interpreters/interpreter.py +0 -0
  26. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/interpreters/transition_interpreter.py +0 -0
  27. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/machines/__init__.py +0 -0
  28. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/machines/action_queue.py +0 -0
  29. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/machines/state_machine.py +0 -0
  30. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/parsers/__init__.py +0 -0
  31. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/parsers/interpreter_parser.py +0 -0
  32. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/parsers/state_machine_parser.py +0 -0
  33. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/__init__.py +0 -0
  34. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/__init__.py +0 -0
  35. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/action_primitives.py +0 -0
  36. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/certificate_primitives.py +0 -0
  37. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/client_echo_primitives.py +0 -0
  38. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/control_channel_primitives.py +0 -0
  39. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/data_channel_primitives.py +0 -0
  40. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/data_manipulation.py +0 -0
  41. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/event_primitives.py +0 -0
  42. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/http_1_request_primitives.py +0 -0
  43. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/http_1_response_primitives.py +0 -0
  44. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/http_2_client_primitives.py +0 -0
  45. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/http_2_server_primitives.py +0 -0
  46. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/http_simple_client_primitives.py +0 -0
  47. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/https_1_request_primitives.py +0 -0
  48. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/https_1_response_primitives.py +0 -0
  49. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/icmp_primitives.py +0 -0
  50. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/io_primitives.py +0 -0
  51. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/ip_primitives.py +0 -0
  52. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/nested_machine_utils.py +0 -0
  53. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/probing_primitives.py +0 -0
  54. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/replay_primitives.py +0 -0
  55. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/server_echo_primitives.py +0 -0
  56. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/signaling_primitive.py +0 -0
  57. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/tcp_primitives.py +0 -0
  58. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/timing_primitives.py +0 -0
  59. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/tls_primitives.py +0 -0
  60. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/action_primitives/udp_primitives.py +0 -0
  61. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/condition_primitives/__init__.py +0 -0
  62. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/condition_primitives/condition_primitives.py +0 -0
  63. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/condition_primitives/variable_comparisons.py +0 -0
  64. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/primitives.py +0 -0
  65. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/transition_primitives/__init__.py +0 -0
  66. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/transition_primitives/assignment_transitions.py +0 -0
  67. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/primitives/transition_primitives/transition_primitives.py +0 -0
  68. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/sniffers/__init__.py +0 -0
  69. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/sniffers/sniffer.py +0 -0
  70. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/__init__.py +0 -0
  71. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/checks.py +0 -0
  72. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/echo_socket_server.py +0 -0
  73. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/http_1_socket_server.py +0 -0
  74. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/http_2_overwrite.py +0 -0
  75. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/http_2_socket_base.py +0 -0
  76. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/http_2_socket_client.py +0 -0
  77. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/http_2_socket_server.py +0 -0
  78. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/tools/https_1_socket_server.py +0 -0
  79. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran/utils.py +0 -0
  80. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran.egg-info/SOURCES.txt +0 -0
  81. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran.egg-info/dependency_links.txt +0 -0
  82. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran.egg-info/entry_points.txt +0 -0
  83. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran.egg-info/requires.txt +0 -0
  84. {nopasaran-0.2.92 → nopasaran-0.2.94}/nopasaran.egg-info/top_level.txt +0 -0
  85. {nopasaran-0.2.92 → nopasaran-0.2.94}/setup.cfg +0 -0
  86. {nopasaran-0.2.92 → nopasaran-0.2.94}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nopasaran
3
- Version: 0.2.92
3
+ Version: 0.2.94
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
@@ -3,7 +3,6 @@ import random
3
3
  import string
4
4
  import logging
5
5
  from nopasaran.decorators import parsing_decorator
6
- from scapy.layers.dns import dnsqtypes
7
6
 
8
7
 
9
8
  class DNSPrimitives:
@@ -839,6 +838,7 @@ class DNSPrimitives:
839
838
 
840
839
  dns_layer = None
841
840
 
841
+ # Try to extract DNS layer directly or from Raw
842
842
  if hasattr(packet, 'haslayer') and packet.haslayer(DNS):
843
843
  dns_layer = packet.getlayer(DNS)
844
844
  elif hasattr(packet, 'haslayer') and packet.haslayer('Raw'):
@@ -864,9 +864,9 @@ class DNSPrimitives:
864
864
  "answers": []
865
865
  }
866
866
 
867
- # Handle DNS questions
868
- if getattr(dns_layer, "qdcount", 0) > 0 and getattr(dns_layer, "qd", None):
869
- try:
867
+ # Parse questions
868
+ try:
869
+ if getattr(dns_layer, "qdcount", 0) > 0 and getattr(dns_layer, "qd", None):
870
870
  question = dns_layer.qd
871
871
  formatted_response["questions"].append({
872
872
  "qname": question.qname.decode() if isinstance(question.qname, bytes) else question.qname,
@@ -874,26 +874,29 @@ class DNSPrimitives:
874
874
  "qtype_name": dnsatypes.get(question.qtype, f"Unknown({question.qtype})"),
875
875
  "qclass": question.qclass
876
876
  })
877
- except Exception as e:
878
- logging.error(f"[Parsing] Failed to parse DNS question: {e}")
877
+ except Exception as e:
878
+ logging.error(f"[Parsing] Failed to parse DNS question: {e}")
879
879
 
880
- # Handle DNS answers (support for lists and chained payloads)
880
+ # Parse answers (assuming it's a list or iterable)
881
881
  try:
882
- ans = dns_layer.an
883
- for _ in range(getattr(dns_layer, "ancount", 0)):
884
- if not isinstance(ans, DNSRR):
885
- break
886
- answer_info = {
887
- "rrname": ans.rrname.decode() if isinstance(ans.rrname, bytes) else ans.rrname,
888
- "type": ans.type,
889
- "type_name": dnsatypes.get(ans.type, f"Unknown({ans.type})"),
890
- "rclass": ans.rclass,
891
- "ttl": ans.ttl,
892
- "rdata": ans.rdata.decode() if isinstance(ans.rdata, bytes) else str(ans.rdata),
893
- "rdlen": getattr(ans, "rdlen", None)
894
- }
895
- formatted_response["answers"].append(answer_info)
896
- ans = ans.payload
882
+ answers = dns_layer.an
883
+ if isinstance(answers, list):
884
+ answer_rrs = answers
885
+ else:
886
+ answer_rrs = [answers] # wrap single DNSRR for uniform handling
887
+
888
+ for ans in answer_rrs:
889
+ if isinstance(ans, DNSRR):
890
+ answer_info = {
891
+ "rrname": ans.rrname.decode() if isinstance(ans.rrname, bytes) else ans.rrname,
892
+ "type": ans.type,
893
+ "type_name": dnsatypes.get(ans.type, f"Unknown({ans.type})"),
894
+ "rclass": ans.rclass,
895
+ "ttl": ans.ttl,
896
+ "rdata": ans.rdata.decode() if isinstance(ans.rdata, bytes) else str(ans.rdata),
897
+ "rdlen": getattr(ans, "rdlen", None)
898
+ }
899
+ formatted_response["answers"].append(answer_info)
897
900
  except Exception as e:
898
901
  logging.error(f"[Parsing] Failed to parse DNS answers: {e}")
899
902
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nopasaran
3
- Version: 0.2.92
3
+ Version: 0.2.94
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.92',
16
+ version='0.2.94',
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
File without changes