@@ -24,9 +24,10 @@ def __getattr__(self, item):
2424 return DomainName (item + '.' + self )
2525
2626
27- D = DomainName ('txt.yourzone.tk.' )
27+ TXT_SIZE = int (250 / 2 )
28+ D = DomainName ('s0i37.ga.' )
2829IP = '10.0.0.1'
29- TTL = 60 * 5
30+ TTL = 1
3031datas = {}
3132socks = {}
3233new_connection = False
@@ -62,50 +63,58 @@ def dns_response(data):
6263
6364 qname = request .q .qname
6465 qn = str (qname )
65- if qn .find (".txt.yourzone.tk" ) != - 1 :
66- if qn .split ("." )[0 ].startswith ("s" ):
67- pos ,size ,data ,sock = qn .split ("." )[:4 ]
68- pos = int (pos [1 :])
69- size = int (size )
70- if size > 0 :
71- data = bytes .fromhex (data )
66+ if qn .find ("s0i37.ga" ) != - 1 :
67+ try :
68+ if qn .split ("." )[1 ].startswith ("s" ):
69+ rand ,pos ,size ,data ,sock = qn .split ("." )[:5 ]
70+ pos = int (pos [1 :])
71+ size = int (size )
72+ if size > 0 :
73+ data = bytes .fromhex (data )
74+
75+ if not sock in datas :
76+ new_connection = True
77+ datas [sock ] = {"size" : None , "input" : {}, "output" : {}, "prev" : None }
78+
79+ if not sock in socks and last_socket :
80+ socks [last_socket ] = sock
81+ last_socket = None
82+
83+ datas [sock ]["size" ] = size
84+ if len (b"" .join (datas [sock ]["input" ].values ())) == pos :
85+ datas [sock ]["input" ][pos ] = data
86+ else :
87+ datas [sock ]["size" ] = - 1
88+ records [DomainName (qn )] = [A ("127.0.0.1" )]
89+ print (f"[*] { qn } " )
7290
73- if not sock in datas :
74- new_connection = True
75- datas [ sock ] = { "size" : None , "input" : {}, "output" : {}}
91+ elif qn . split ( "." )[ 1 ]. startswith ( "r" ) :
92+ rand , pos , sock = qn . split ( "." )[: 3 ]
93+ pos = int ( pos [ 1 :])
7694
7795 if not sock in socks and last_socket :
7896 socks [last_socket ] = sock
7997 last_socket = None
8098
81- datas [sock ]["size" ] = size
82- datas [sock ]["input" ][pos ] = data
83- else :
84- datas [sock ]["size" ] = - 1
85- records [DomainName (qn )] = [A ("127.0.0.1" )]
86- print (f"[*] { qn } " )
87-
88- elif qn .split ("." )[0 ].startswith ("r" ):
89- pos ,sock = qn .split ("." )[:2 ]
90- pos = int (pos [1 :])
91-
92- if not sock in socks and last_socket :
93- socks [last_socket ] = sock
94- last_socket = None
99+ if not sock in datas :
100+ new_connection = True
101+ datas [sock ] = {"size" : None , "input" : {}, "output" : {}, "prev" : None }
102+
103+ if datas [sock ]["size" ] == - 1 :
104+ answer = "-"
105+ elif pos in datas [sock ]["output" ]:
106+ answer = datas [sock ]["output" ][pos ].hex ()
107+ else :
108+ answer = ""
109+ records [DomainName (qn )] = [TXT (answer )]
95110
96- if not sock in datas :
97- new_connection = True
98- datas [sock ] = { "size" : None , "input" : {}, "output" : {}}
111+ if datas [ sock ][ "prev" ] != None and datas [ sock ][ "prev" ] != pos and datas [ sock ][ "prev" ] in datas [ sock ][ "output" ] :
112+ del ( datas [ sock ][ "output" ][ datas [ sock ][ "prev" ] ] )
113+ datas [sock ][ "prev" ] = pos
99114
100- if datas [sock ]["size" ] == - 1 :
101- answer = "-"
102- elif pos in datas [sock ]["output" ]:
103- answer = datas [sock ]["output" ][pos ].hex ()
104- del (datas [sock ]["output" ][pos ])
105- else :
106- answer = ""
107- records [DomainName (qn )] = [TXT (answer )]
108- print (f"[*] { qn } { answer } " )
115+ print (f"[*] { qn } { answer } " )
116+ except Exception as e :
117+ pass
109118
110119 qtype = request .q .qtype
111120 qt = QTYPE [qtype ]
@@ -196,7 +205,6 @@ def tcp_send(sock): # dns_recv
196205def tcp_recv (sock ): # dns_send
197206 global datas , socks
198207 buf = ""
199- FRAG = int (250 / 2 )
200208 while True :
201209 try :
202210 if not buf :
@@ -208,8 +216,8 @@ def tcp_recv(sock): # dns_send
208216 break
209217 if not datas [socks [sock ]]["output" ].keys ():
210218 print (f"[+] <- { buf .hex ()} " )
211- for p in range (0 , len (buf ), FRAG ):
212- datas [socks [sock ]]["output" ][p ] = buf [p :p + FRAG ]
219+ for p in range (0 , len (buf ), TXT_SIZE ):
220+ datas [socks [sock ]]["output" ][p ] = buf [p :p + TXT_SIZE ]
213221 buf = ""
214222 else :
215223 print ("[*] connection closed, no data" )
@@ -225,7 +233,7 @@ def _listen(port):
225233 global last_socket
226234 s = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
227235 s .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
228- s .bind (("0.0 .0.0 " , port ))
236+ s .bind (("172.16 .0.1 " , port ))
229237 s .listen (10 )
230238 while True :
231239 c ,info = s .accept ()
0 commit comments