nopasaran 0.2.109__py3-none-any.whl → 0.2.111__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.
- nopasaran/tools/udp_dns_socket_server.py +36 -20
- nopasaran/utils.py +2 -2
- {nopasaran-0.2.109.dist-info → nopasaran-0.2.111.dist-info}/METADATA +1 -1
- {nopasaran-0.2.109.dist-info → nopasaran-0.2.111.dist-info}/RECORD +8 -8
- {nopasaran-0.2.109.dist-info → nopasaran-0.2.111.dist-info}/LICENSE +0 -0
- {nopasaran-0.2.109.dist-info → nopasaran-0.2.111.dist-info}/WHEEL +0 -0
- {nopasaran-0.2.109.dist-info → nopasaran-0.2.111.dist-info}/entry_points.txt +0 -0
- {nopasaran-0.2.109.dist-info → nopasaran-0.2.111.dist-info}/top_level.txt +0 -0
@@ -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
|
-
|
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
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
30
|
-
|
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
|
-
|
33
|
-
|
34
|
-
logging.info("DNS response sent successfully.")
|
35
|
+
logging.debug("Parsing DNS query...")
|
36
|
+
parsed_query = DNSRecord.parse(data)
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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)
|
nopasaran/utils.py
CHANGED
@@ -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.
|
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,7 +2,7 @@ nopasaran/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
nopasaran/__main__.py,sha256=9dY9M5gbwdR74rBezoSAvQPO3acAVHFA5Kov9KkrXO8,2461
|
3
3
|
nopasaran/decorators.py,sha256=4QcUtZAMYZqNWwv7OsIAhHcec8C_MfxThA8kmUXw1Xo,2941
|
4
4
|
nopasaran/http_2_utils.py,sha256=eQL8uG2USCN5ab2brrYtxcTnYk-g3s_b7v4bZ3YdA-Y,26324
|
5
|
-
nopasaran/utils.py,sha256=
|
5
|
+
nopasaran/utils.py,sha256=OBsdV_NkOjsrt-IxUiEsL6MQ9-AGqaEKOJPE9oEaRlo,16518
|
6
6
|
nopasaran/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
nopasaran/controllers/controller.py,sha256=kh6_ByvSMRiz8o8DgfR00WfylmClVZKdHe1OIcnltp8,7326
|
8
8
|
nopasaran/controllers/factory.py,sha256=e1c6oea4ePiSZcQuAUn-515kjgmBIOqFXQ_78huEXHw,1287
|
@@ -77,11 +77,11 @@ nopasaran/tools/http_2_socket_client.py,sha256=5mmc8FuT2dNVAihbMdvyytVwME_xSc7me
|
|
77
77
|
nopasaran/tools/http_2_socket_server.py,sha256=8W-bxmdoGyK5moxpC87V1EGuZ9jJpIKhokvZrDV84kk,5551
|
78
78
|
nopasaran/tools/https_1_socket_server.py,sha256=ytLVYdH5je4L6ElCKKhhsbU_53gT6QF9l5ym7q5TMmo,8162
|
79
79
|
nopasaran/tools/tcp_dns_socket_server.py,sha256=fZl2ujE3C_1iqyz8qquWnePPAj8n2uzWfk3DUEDlgho,7924
|
80
|
-
nopasaran/tools/udp_dns_socket_server.py,sha256=
|
80
|
+
nopasaran/tools/udp_dns_socket_server.py,sha256=BrtuddDgfeCZEt11IZ9wb1uJO4cW0KtlQahfyVrY9sg,6283
|
81
81
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
|
-
nopasaran-0.2.
|
83
|
-
nopasaran-0.2.
|
84
|
-
nopasaran-0.2.
|
85
|
-
nopasaran-0.2.
|
86
|
-
nopasaran-0.2.
|
87
|
-
nopasaran-0.2.
|
82
|
+
nopasaran-0.2.111.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
83
|
+
nopasaran-0.2.111.dist-info/METADATA,sha256=w6Rc4eHoaI8z17mrzBX4R-zdesq02iY5XFK1lJ1kQy4,5497
|
84
|
+
nopasaran-0.2.111.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
85
|
+
nopasaran-0.2.111.dist-info/entry_points.txt,sha256=LaOz5GlWuMLjzg4KOEB5OVTattCXVW6a4nSW-WQajCw,55
|
86
|
+
nopasaran-0.2.111.dist-info/top_level.txt,sha256=60R1FzpprzU8iiJ1cBMNOA0F083_lYoctFo7pzOpMwY,16
|
87
|
+
nopasaran-0.2.111.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|