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