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): 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, local, event): remote = self._local_to_remote[local] encryptor = self._local_to_encryptor.get(local, None) if event & eventloop.POLL_ERR: self._destroy(local, remote) elif event & eventloop.POLL_IN: try: data = local.recv(BUF_SIZE) if not data: self._destroy(local, remote) else: if not encryptor: try: req = asyncdns.parse_response(data[2:]) if req: logging.info('request %s', req.hostname) except Exception as e: logging.error(e) encryptor = \ encrypt.Encryptor(self._config['password'], self._config['method']) self._local_to_encryptor[local] = encryptor data = self._address_to_send + data data = encryptor.encrypt(data) remote.send(data) except (OSError, IOError) as e: self._destroy(local, self._local_to_remote[local]) logging.error(e)
def _handle_remote(self, remote, event): local = self._remote_to_local[remote] if event & eventloop.POLL_ERR: self._destroy(local, remote) elif event & eventloop.POLL_OUT: self._loop.modify(remote, eventloop.POLL_IN) self._loop.modify(local, eventloop.POLL_IN) elif event & eventloop.POLL_IN: try: data = remote.recv(BUF_SIZE) if not data: self._destroy(local, remote) else: encryptor = self._local_to_encryptor[local] data = encryptor.decrypt(data) try: res = asyncdns.parse_response(data[2:]) if res: logging.info('response %s', res) except Exception as e: logging.error(e) local.send(data) except (OSError, IOError) as e: self._destroy(local, remote) 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): 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)
def uc_parse_record(d): print(asyncdns.parse_response(d))