@@ -105,7 +105,7 @@ def connection_lost(self, exc):
105105 self .server .remove_client (self .client )
106106 self .ping_timeout .cancel ()
107107
108- def _get_messages (self ):
108+ def _get_messages (self ) -> str :
109109 """ Parses out full messages from the buffer.
110110
111111 :return: yields messages
@@ -115,13 +115,20 @@ def _get_messages(self):
115115 self .buffer = spl [1 ]
116116 yield spl [0 ]
117117
118+ def _shortened_buffer (self ) -> str :
119+ short_buffer = self .buffer
120+ if len (short_buffer ) >= 512 :
121+ short_buffer = short_buffer [:500 ] + '...' + short_buffer [- 12 :]
122+
123+ return f'{ short_buffer } ({ len (self .buffer )} bytes)'
124+
118125 def _process_message (self , msg ):
119126 if len (msg ) < 2 :
120127 # This immediatelly kills any client that does not even try to follow the proper
121128 # client protocol
122129 msg = self .buffer if len (self .buffer ) < 512 else self .buffer [:512 ] + '...'
123130 logger .log_server (f'Terminated { self .client .get_ipreal ()} (packet too short): '
124- f'sent { msg } ( { len ( self .buffer ) } bytes) ' )
131+ f'sent { self ._shortened_buffer () } . ' )
125132 self .client .disconnect ()
126133 return False
127134
@@ -175,9 +182,8 @@ def data_received(self, data):
175182 self .buffer = self .buffer .translate ({ord (c ): None for c in '\0 ' })
176183
177184 if len (self .buffer ) > 8192 :
178- msg = self .buffer if len (self .buffer ) < 512 else self .buffer [:512 ] + '...'
179185 logger .log_server (f'Terminated { self .client .get_ipreal ()} (packet too long): '
180- f'sent { msg } ( { len ( self .buffer ) } bytes) ' )
186+ f'sent { self ._shortened_buffer () } . ' )
181187 self .client .disconnect ()
182188 return
183189
@@ -187,14 +193,19 @@ def data_received(self, data):
187193 if not self ._process_message (msg ):
188194 return
189195
190- if not found_message :
196+ if found_message :
197+ return
198+
199+ # Check if valid packet split by evil router on client side
200+ buffer_command = self .buffer .split ('#' )[0 ]
201+ if buffer_command not in self ._net_cmd_dispatcher :
191202 # This immediatelly kills any client that does not even try to follow the proper
192203 # client protocol
193- msg = self .buffer if len (self .buffer ) < 512 else self .buffer [:512 ] + '...'
194204 logger .log_server (f'Terminated { self .client .get_ipreal ()} (packet syntax '
195- f'unrecognized): sent { msg } ( { len ( self .buffer ) } bytes) ' )
205+ f'unrecognized): sent { self ._shortened_buffer () } . ' )
196206 self .client .disconnect ()
197207
208+
198209 def _validate_net_cmd (self , args , * types , needs_auth = True ):
199210 """ Makes sure the net command's arguments match expectations.
200211
0 commit comments