nopasaran 0.2.92__py3-none-any.whl → 0.2.94__py3-none-any.whl

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.
@@ -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
@@ -34,7 +34,7 @@ nopasaran/primitives/action_primitives/client_echo_primitives.py,sha256=2Qupem0N
34
34
  nopasaran/primitives/action_primitives/control_channel_primitives.py,sha256=_OMgxLLtaK0vvobwhPvSAJhYCOgn4optcGhXOdgh1Q4,11281
35
35
  nopasaran/primitives/action_primitives/data_channel_primitives.py,sha256=gDnjw76kFeMtDD4Mnv31vsx6xQsxvavsbYr4yhRH_hg,4557
36
36
  nopasaran/primitives/action_primitives/data_manipulation.py,sha256=mt-BNOEIxyvXzHTwRO1ch1DzzYHQK1AduhRs11TOKH4,15450
37
- nopasaran/primitives/action_primitives/dns_primitives.py,sha256=grtwAMKBSUPWX4t-tOMGPejDasS7KVflrUKSSOcfM0A,33371
37
+ nopasaran/primitives/action_primitives/dns_primitives.py,sha256=QvOFYZQVdRs_0i8-L-yjjNOq4tLwCbTDqZYc3I74Mk4,33504
38
38
  nopasaran/primitives/action_primitives/event_primitives.py,sha256=V2FurvbeRy6nAcDne3Xm4Y86bvo5UYpEeUJFos842tY,2699
39
39
  nopasaran/primitives/action_primitives/http_1_request_primitives.py,sha256=ov4OLXyNiWNjJYS0GjHwuRFkS5DLQaAh6P6ETy1r5ng,14562
40
40
  nopasaran/primitives/action_primitives/http_1_response_primitives.py,sha256=0wS61tl1KSAlIkYkPXMjbbnY5LqKzl9UtuoK56S4IHQ,7947
@@ -73,9 +73,9 @@ nopasaran/tools/http_2_socket_client.py,sha256=5mmc8FuT2dNVAihbMdvyytVwME_xSc7me
73
73
  nopasaran/tools/http_2_socket_server.py,sha256=8W-bxmdoGyK5moxpC87V1EGuZ9jJpIKhokvZrDV84kk,5551
74
74
  nopasaran/tools/https_1_socket_server.py,sha256=0mJ_0zCC-7rtvyjehTnm1QJxWx8R4YHkAWRHm2msvL4,9217
75
75
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
- nopasaran-0.2.92.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
77
- nopasaran-0.2.92.dist-info/METADATA,sha256=qdh8BZCslIEOBGYQHXFLZ1_bWUv9sUuegmP0EA6OFqw,5474
78
- nopasaran-0.2.92.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
79
- nopasaran-0.2.92.dist-info/entry_points.txt,sha256=LaOz5GlWuMLjzg4KOEB5OVTattCXVW6a4nSW-WQajCw,55
80
- nopasaran-0.2.92.dist-info/top_level.txt,sha256=60R1FzpprzU8iiJ1cBMNOA0F083_lYoctFo7pzOpMwY,16
81
- nopasaran-0.2.92.dist-info/RECORD,,
76
+ nopasaran-0.2.94.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
77
+ nopasaran-0.2.94.dist-info/METADATA,sha256=h3YEwDi616TkWxvHYO3SAUuGLrR7_HnZlMBb9xVB9co,5474
78
+ nopasaran-0.2.94.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
79
+ nopasaran-0.2.94.dist-info/entry_points.txt,sha256=LaOz5GlWuMLjzg4KOEB5OVTattCXVW6a4nSW-WQajCw,55
80
+ nopasaran-0.2.94.dist-info/top_level.txt,sha256=60R1FzpprzU8iiJ1cBMNOA0F083_lYoctFo7pzOpMwY,16
81
+ nopasaran-0.2.94.dist-info/RECORD,,