nopasaran 0.2.91__py3-none-any.whl → 0.2.92__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.
@@ -837,15 +837,10 @@ class DNSPrimitives:
837
837
  48: "DNSKEY", 255: "ANY"
838
838
  }
839
839
 
840
- dnsqtypes = dnsatypes # if you meant dnsatypes to cover both
841
-
842
840
  dns_layer = None
843
841
 
844
- # Try to get DNS layer from packet
845
842
  if hasattr(packet, 'haslayer') and packet.haslayer(DNS):
846
843
  dns_layer = packet.getlayer(DNS)
847
-
848
- # Try to parse DNS from Raw if not directly available
849
844
  elif hasattr(packet, 'haslayer') and packet.haslayer('Raw'):
850
845
  try:
851
846
  dns_layer = DNS(packet['Raw'].load)
@@ -869,33 +864,36 @@ class DNSPrimitives:
869
864
  "answers": []
870
865
  }
871
866
 
872
- # Handle DNS question
867
+ # Handle DNS questions
873
868
  if getattr(dns_layer, "qdcount", 0) > 0 and getattr(dns_layer, "qd", None):
874
869
  try:
875
870
  question = dns_layer.qd
876
871
  formatted_response["questions"].append({
877
872
  "qname": question.qname.decode() if isinstance(question.qname, bytes) else question.qname,
878
873
  "qtype": question.qtype,
879
- "qtype_name": dnsqtypes.get(question.qtype, f"Unknown({question.qtype})"),
874
+ "qtype_name": dnsatypes.get(question.qtype, f"Unknown({question.qtype})"),
880
875
  "qclass": question.qclass
881
876
  })
882
877
  except Exception as e:
883
878
  logging.error(f"[Parsing] Failed to parse DNS question: {e}")
884
879
 
885
- # Handle DNS answers
880
+ # Handle DNS answers (support for lists and chained payloads)
886
881
  try:
887
- ans = dns_layer.an if getattr(dns_layer, "ancount", 0) > 0 else None
888
- while ans and isinstance(ans, DNSRR):
882
+ ans = dns_layer.an
883
+ for _ in range(getattr(dns_layer, "ancount", 0)):
884
+ if not isinstance(ans, DNSRR):
885
+ break
889
886
  answer_info = {
890
887
  "rrname": ans.rrname.decode() if isinstance(ans.rrname, bytes) else ans.rrname,
891
888
  "type": ans.type,
892
889
  "type_name": dnsatypes.get(ans.type, f"Unknown({ans.type})"),
893
890
  "rclass": ans.rclass,
894
891
  "ttl": ans.ttl,
895
- "rdata": str(ans.rdata),
892
+ "rdata": ans.rdata.decode() if isinstance(ans.rdata, bytes) else str(ans.rdata),
893
+ "rdlen": getattr(ans, "rdlen", None)
896
894
  }
897
895
  formatted_response["answers"].append(answer_info)
898
- ans = ans.payload if isinstance(ans.payload, DNSRR) else None
896
+ ans = ans.payload
899
897
  except Exception as e:
900
898
  logging.error(f"[Parsing] Failed to parse DNS answers: {e}")
901
899
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nopasaran
3
- Version: 0.2.91
3
+ Version: 0.2.92
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=7j-U47Ni4iUL1349Hc8DbgZeVuiX2BOukTG62XJJIS8,33390
37
+ nopasaran/primitives/action_primitives/dns_primitives.py,sha256=grtwAMKBSUPWX4t-tOMGPejDasS7KVflrUKSSOcfM0A,33371
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.91.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
77
- nopasaran-0.2.91.dist-info/METADATA,sha256=3Ed9icI0ZKY3nZrUcGe4acdjf5oeTqs2nktVf81U_2o,5474
78
- nopasaran-0.2.91.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
79
- nopasaran-0.2.91.dist-info/entry_points.txt,sha256=LaOz5GlWuMLjzg4KOEB5OVTattCXVW6a4nSW-WQajCw,55
80
- nopasaran-0.2.91.dist-info/top_level.txt,sha256=60R1FzpprzU8iiJ1cBMNOA0F083_lYoctFo7pzOpMwY,16
81
- nopasaran-0.2.91.dist-info/RECORD,,
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,,