def _handle_local(self, sock): try: data, addr = sock.recvfrom(BUF_SIZE) except (OSError, IOError) as e: logging.error(e) if eventloop.errno_from_exception(e) == errno.ECONNRESET: # just for Windows lol self._rebuild_sockets() return header = asyncdns.parse_header(data) if header: try: req_id = header[0] req = asyncdns.parse_response(data) logging.info('--- request %s', req.hostname) if req.hostname in self._hosts: response = self.build_response(data, self._hosts[req.hostname]) if response: logging.info('%s hit /etc/hosts', req.hostname) self._local_sock.sendto(response, addr) return self._id_to_addr[req_id] = addr for remote_addr in self._remote_addrs: self._remote_sock.sendto(data, remote_addr) except Exception as e: import traceback traceback.print_exc() logging.error(e)
def _handle_remote(self, sock): try: data, addr = sock.recvfrom(BUF_SIZE) except (OSError, IOError) as e: logging.error(e) if eventloop.errno_from_exception(e) == errno.ECONNRESET: # just for Windows lol self._rebuild_sockets() return if data: try: header = asyncdns.parse_header(data) if header: req_id = header[0] res = asyncdns.parse_response(data) logging.info('response %s', res) addr = self._id_to_addr.get(req_id, None) if addr: for answer in res.answers: if answer and answer[0] in GFW_LIST: return self._local_sock.sendto(data, addr) del self._id_to_addr[req_id] except Exception as e: import traceback traceback.print_exc() logging.error(e) if eventloop.errno_from_exception(e) == errno.EACCES: # when we have changed our ip self._rebuild_sockets()
def _handle_local(self, sock): try: data, addr = sock.recvfrom(BUF_SIZE) except (OSError, IOError) as e: logging.error(e) if eventloop.errno_from_exception(e) == errno.ECONNRESET: # just for Windows lol self._rebuild_sockets() return header = asyncdns.parse_header(data) if header: try: req_id = header[0] req = asyncdns.parse_response(data) logging.info('request %s', req.hostname) if req.hostname in self._hosts: response = self.build_response(data, self._hosts[req.hostname]) if response: logging.info('%s hit /etc/hosts', req.hostname) self._local_sock.sendto(response, addr) return self._id_to_addr[req_id] = addr for remote_addr in self._remote_addrs: self._remote_sock.sendto(data, remote_addr) except Exception as e: import traceback traceback.print_exc() logging.error(e)
def _handle_local(self, sock): data, addr = sock.recvfrom(BUF_SIZE) header = asyncdns.parse_header(data) if header: try: req_id = header[0] req = asyncdns.parse_response(data) self._id_to_addr[req_id] = addr self._remote_sock.sendto(data, self._remote_addr) logging.info('request %s', req.hostname) except Exception as e: import traceback traceback.print_exc() logging.error(e)
def _handle_local(self, sock): data, addr = sock.recvfrom(BUF_SIZE) header = asyncdns.parse_header(data) if header: try: req_id = header[0] req = asyncdns.parse_response(data) self._id_to_addr[req_id] = addr data = self._address_to_send + data data = encrypt.encrypt_all(self._config['password'], self._config['method'], 1, data) self._remote_sock.sendto(data, self._remote_addr) logging.info('request %s', req.hostname) except Exception as e: import traceback traceback.print_exc() logging.error(e)
def _handle_remote(self, sock): data, addr = sock.recvfrom(BUF_SIZE) if data: try: header = asyncdns.parse_header(data) if header: req_id = header[0] res = asyncdns.parse_response(data) logging.info('response %s', res) addr = self._id_to_addr.get(req_id, None) if addr: for answer in res.answers: if answer and answer[0] in GFW_LIST: return self._local_sock.sendto(data, addr) del self._id_to_addr[req_id] except Exception as e: import traceback traceback.print_exc() logging.error(e)
def _handle_remote(self, sock): try: data, addr = sock.recvfrom(BUF_SIZE) except (OSError, IOError) as e: logging.error(e) if eventloop.errno_from_exception(e) == errno.ECONNRESET: # just for Windows lol self._rebuild_sockets() return if data: try: header = asyncdns.parse_header(data) if header: req_id = header[0] res = asyncdns.parse_response(data) logging.info('response from %s:%d %s', addr[0], addr[1], res) addr = self._id_to_addr.get(req_id, None) if addr: for answer in res.answers: if answer and answer[0] in GFW_LIST: return if not res.answers: # delay empty results def _send_later(): self._local_sock.sendto(data, addr) self._pending_responses.append( (time.time(), _send_later)) return self._local_sock.sendto(data, addr) del self._id_to_addr[req_id] except Exception as e: import traceback traceback.print_exc() logging.error(e) if eventloop.errno_from_exception(e) == errno.EACCES: # when we have changed our ip self._rebuild_sockets()
def _handle_remote(self, sock): data, addr = sock.recvfrom(BUF_SIZE) if data: try: data = encrypt.encrypt_all(self._config['password'], self._config['method'], 0, data) header_result = parse_header(data) if header_result is None: return None, None addrtype, dest_addr, dest_port, header_length = header_result data = data[header_length:] header = asyncdns.parse_header(data) if header: req_id = header[0] res = asyncdns.parse_response(data) addr = self._id_to_addr.get(req_id, None) if addr: self._local_sock.sendto(data, addr) del self._id_to_addr[req_id] logging.info('response %s', res) except Exception as e: import traceback traceback.print_exc() logging.error(e)