当前位置: 首页>>代码示例>>Python>>正文


Python common.is_ip函数代码示例

本文整理汇总了Python中shadowsocks.common.is_ip函数的典型用法代码示例。如果您正苦于以下问题:Python is_ip函数的具体用法?Python is_ip怎么用?Python is_ip使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了is_ip函数的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: resolve

	def resolve(self, hostname, callback):
		if type(hostname) != bytes:
			hostname = hostname.encode('utf8')
		if not hostname:
			callback(None, Exception('empty hostname'))
		elif common.is_ip(hostname):
			callback((hostname, hostname), None)
		elif hostname in self._hosts:
			logging.debug('hit hosts: %s', hostname)
			ip = self._hosts[hostname]
			callback((hostname, ip), None)
		elif hostname in self._cache:
			logging.debug('hit cache: %s', hostname)
			ip = self._cache[hostname]
			callback((hostname, ip), None)
		else:
			if not is_valid_hostname(hostname):
				callback(None, Exception('invalid hostname: %s' % hostname))
				return
			arr = self._hostname_to_cb.get(hostname, None)
			if not arr:
				self._hostname_status[hostname] = STATUS_IPV4
				self._send_req(hostname, QTYPE_A)
				self._hostname_to_cb[hostname] = [callback]
				self._cb_to_hostname[callback] = hostname
			else:
				arr.append(callback)
				# TODO send again only if waited too long
				self._send_req(hostname, QTYPE_A)
开发者ID:JustAFakeName,项目名称:ss,代码行数:29,代码来源:asyncdns.py

示例2: _handle_server

    def _handle_server(self):
        server = self._server_socket
        data, r_addr = server.recvfrom(BUF_SIZE)
        ogn_data = data
        if not data:
            logging.debug('UDP handle_server: data is empty')
        if self._stat_callback:
            self._stat_callback(self._listen_port, len(data))
        uid = None
        if self._is_local:
            frag = common.ord(data[2])
            if frag != 0:
                logging.warn('drop a message since frag is not 0')
                return
            else:
                data = data[3:]
        else:
            ref_iv = [0]
            data = encrypt.encrypt_all_iv(self._protocol.obfs.server_info.key, self._method, 0, data, ref_iv)
            # decrypt data
            if not data:
                logging.debug('UDP handle_server: data is empty after decrypt')
                return
            self._protocol.obfs.server_info.recv_iv = ref_iv[0]
            data, uid = self._protocol.server_udp_post_decrypt(data)

        #logging.info("UDP data %s" % (binascii.hexlify(data),))
        if not self._is_local:
            data = pre_parse_header(data)
            if data is None:
                return

        try:
            header_result = parse_header(data)
        except:
            self._handel_protocol_error(r_addr, ogn_data)
            return

        if header_result is None:
            self._handel_protocol_error(r_addr, ogn_data)
            return
        connecttype, addrtype, dest_addr, dest_port, header_length = header_result

        if self._is_local:
            addrtype = 3
            server_addr, server_port = self._get_a_server()
        else:
            server_addr, server_port = dest_addr, dest_port

        if (addrtype & 7) == 3:
            af = common.is_ip(server_addr)
            if af == False:
                handler = common.UDPAsyncDNSHandler((data, r_addr, uid, header_length))
                handler.resolve(self._dns_resolver, (server_addr, server_port), self._handle_server_dns_resolved)
            else:
                self._handle_server_dns_resolved("", (server_addr, server_port), server_addr, (data, r_addr, uid, header_length))
        else:
            self._handle_server_dns_resolved("", (server_addr, server_port), server_addr, (data, r_addr, uid, header_length))
开发者ID:chasenn,项目名称:Shadowsowcks1Click,代码行数:58,代码来源:udprelay.py

示例3: _parse_resolv

 def _parse_resolv(self):
     self._servers = []
     try:
         with open('dns.conf', 'rb') as f:
             content = f.readlines()
             for line in content:
                 line = line.strip()
                 if line:
                     parts = line.split(b' ', 1)
                     if len(parts) >= 2:
                         server = parts[0]
                         port = int(parts[1])
                     else:
                         server = parts[0]
                         port = 53
                     if common.is_ip(server) == socket.AF_INET:
                         if type(server) != str:
                             server = server.decode('utf8')
                         self._servers.append((server, port))
     except IOError:
         pass
     if not self._servers:
         try:
             with open('/etc/resolv.conf', 'rb') as f:
                 content = f.readlines()
                 for line in content:
                     line = line.strip()
                     if line:
                         if line.startswith(b'nameserver'):
                             parts = line.split()
                             if len(parts) >= 2:
                                 server = parts[1]
                                 if common.is_ip(server) == socket.AF_INET:
                                     if type(server) != str:
                                         server = server.decode('utf8')
                                     self._servers.append((server, 53))
         except IOError:
             pass
     if not self._servers:
         self._servers = [('8.8.4.4', 53), ('8.8.8.8', 53)]
     logging.info('dns server: %s' % (self._servers,))
开发者ID:chasenn,项目名称:Shadowsowcks1Click,代码行数:41,代码来源:asyncdns.py

示例4: resolve

 def resolve(self, hostname, callback):
     if type(hostname) != bytes:
         hostname = hostname.encode('utf8')
     if not hostname:
         callback(None, Exception('empty hostname'))
     elif common.is_ip(hostname):
         callback((hostname, hostname), None)
     elif hostname in self._hosts:
         logging.debug('hit hosts: %s', hostname)
         ip = self._hosts[hostname]
         callback((hostname, ip), None)
     elif hostname in self._cache:
         logging.debug('hit cache: %s ==>> %s', hostname, self._cache[hostname])
         ip = self._cache[hostname]
         callback((hostname, ip), None)
     elif any(hostname.endswith(t) for t in self._black_hostname_list):
         callback(None, Exception('hostname <%s> is block by the black hostname list' % hostname))
         return
     else:
         if not is_valid_hostname(hostname):
             callback(None, Exception('invalid hostname: %s' % hostname))
             return
         if False:
             addrs = socket.getaddrinfo(hostname, 0, 0,
                                        socket.SOCK_DGRAM, socket.SOL_UDP)
             if addrs:
                 af, socktype, proto, canonname, sa = addrs[0]
                 logging.debug('DNS resolve %s %s' % (hostname, sa[0]))
                 self._cache[hostname] = sa[0]
                 callback((hostname, sa[0]), None)
                 return
         arr = self._hostname_to_cb.get(hostname, None)
         if not arr:
             if IPV6_CONNECTION_SUPPORT:
                 self._hostname_status[hostname] = STATUS_IPV6
                 self._send_req(hostname, QTYPE_AAAA)
             else:
                 self._hostname_status[hostname] = STATUS_IPV4
                 self._send_req(hostname, QTYPE_A)
             self._hostname_to_cb[hostname] = [callback]
             self._cb_to_hostname[callback] = hostname
         else:
             arr.append(callback)
             # TODO send again only if waited too long
             if IPV6_CONNECTION_SUPPORT:
                 self._send_req(hostname, QTYPE_AAAA)
             else:
                 self._send_req(hostname, QTYPE_A)
开发者ID:days72115,项目名称:lede,代码行数:48,代码来源:asyncdns.py

示例5: resolve

 def resolve(self, hostname, callback):
     """
     域名解析函数
     :param hostname:    待解析的hostname
     :param callback:    解析完成之后执行的回调函数,参数为(result, error)
                         result: (hostname, ip)
                         error: exception
     :return:
     """
     # 不是以字符串形式则转化成字符串
     if type(hostname) != bytes:
         hostname = hostname.encode('utf8')
     # 若hostname为空,抛出异常
     if not hostname:
         callback(None, Exception('empty hostname'))
     # 若hostname为ip,直接使用
     elif common.is_ip(hostname):
         callback((hostname, hostname), None)
     # 若hostname在host文件中,直接调用回调函数
     elif hostname in self._hosts:
         logging.debug('hit hosts: %s', hostname)
         ip = self._hosts[hostname]
         callback((hostname, ip), None)
     # 若hostname在缓存中,直接调用回调函数
     elif hostname in self._cache:
         logging.debug('hit cache: %s', hostname)
         ip = self._cache[hostname]
         callback((hostname, ip), None)
     # 都不满足,需要解析
     else:
         # 域名不合法
         if not is_valid_hostname(hostname):
             callback(None, Exception('invalid hostname: %s' % hostname))
             return
         # 获得解析该hostname对应的回调函数列表
         arr = self._hostname_to_cb.get(hostname, None)
         if not arr:
             # 发出请求报文,同时记录该域名的一些相关信息
             self._hostname_status[hostname] = STATUS_IPV4
             self._send_req(hostname, QTYPE_A)
             # 同时在_hostname_to_cb注册一个{hostname:[callback]}的一对
             # 要hostname因为这个socket可以发出去很多不同hostname的解析请求
             self._hostname_to_cb[hostname] = [callback]
             self._cb_to_hostname[callback] = hostname
         else:
             arr.append(callback)
             # TODO send again only if waited too long
             self._send_req(hostname, QTYPE_A)
开发者ID:ncs19960831,项目名称:shadowsocks-analysis,代码行数:48,代码来源:asyncdns.py

示例6: resolve

    def resolve(self, hostname, callback):
        if type(hostname) != bytes:
            hostname = hostname.encode('utf8')

        # if hostname is None
        if not hostname:
            callback(None, Exception('empty hostname'))

        # or hostname is already a ip
        elif common.is_ip(hostname):
            callback((hostname, hostname), None)

        # or hostname is in hosts file
        elif hostname in self._hosts:
            logging.debug('hit hosts: %s', hostname)
            ip = self._hosts[hostname]
            callback((hostname, ip), None)

        # or hostname is in cache
        elif hostname in self._cache:
            logging.debug('hit cache: %s', hostname)
            ip = self._cache[hostname]
            callback((hostname, ip), None)

        # otherwise, resolve hostname
        else:
            # if hostname is invalid
            if not is_valid_hostname(hostname):
                callback(None, Exception('invalid hostname: %s' % hostname))
                return

            # arr is a list of callbacks
            arr = self._hostname_to_cb.get(hostname, None)

            # if hostname is not linked with any callbacks
            # set default status, send request and link hostname with callback
            if not arr:
                self._hostname_status[hostname] = STATUS_IPV4
                self._send_req(hostname, QTYPE_A)
                self._hostname_to_cb[hostname] = [callback]
                self._cb_to_hostname[callback] = hostname
            # or just end request
            else:
                arr.append(callback)  # meaningless
                # TODO send again only if waited too long
                self._send_req(hostname, QTYPE_A)
开发者ID:whenhecry,项目名称:shadowsocks,代码行数:46,代码来源:asyncdns.py

示例7: _parse_hosts

	def _parse_hosts(self):
		etc_path = '/etc/hosts'
		if 'WINDIR' in os.environ:
			etc_path = os.environ['WINDIR'] + '/system32/drivers/etc/hosts'
		try:
			with open(etc_path, 'rb') as f:
				for line in f.readlines():
					line = line.strip()
					parts = line.split()
					if len(parts) >= 2:
						ip = parts[0]
						if common.is_ip(ip):
							for i in range(1, len(parts)):
								hostname = parts[i]
								if hostname:
									self._hosts[hostname] = ip
		except IOError:
			self._hosts['localhost'] = '127.0.0.1'
开发者ID:JustAFakeName,项目名称:ss,代码行数:18,代码来源:asyncdns.py

示例8: _parse_hosts

 def _parse_hosts(self):
     etc_path = "/etc/hosts"
     if "WINDIR" in os.environ:
         etc_path = os.environ["WINDIR"] + "/system32/drivers/etc/hosts"
     try:
         with open(etc_path, "rb") as f:
             for line in f.readlines():
                 line = line.strip()
                 parts = line.split()
                 if len(parts) >= 2:
                     ip = parts[0]
                     if common.is_ip(ip):
                         for i in range(1, len(parts)):
                             hostname = parts[i]
                             if hostname:
                                 self._hosts[hostname] = ip
     except IOError:
         self._hosts["localhost"] = "127.0.0.1"
开发者ID:RemoteEvilDragon,项目名称:shadowsocks,代码行数:18,代码来源:asyncdns.py

示例9: _parse_resolv

	def _parse_resolv(self):
		self._servers = []
		try:
			with open('/etc/resolv.conf', 'rb') as f:
				content = f.readlines()
				for line in content:
					line = line.strip()
					if line:
						if line.startswith(b'nameserver'):
							parts = line.split()
							if len(parts) >= 2:
								server = parts[1]
								if common.is_ip(server) == socket.AF_INET:
									if type(server) != str:
										server = server.decode('utf8')
									self._servers.append(server)
		except IOError:
			pass
		if not self._servers:
			self._servers = ['8.8.4.4', '8.8.8.8']
开发者ID:JustAFakeName,项目名称:ss,代码行数:20,代码来源:asyncdns.py

示例10: _parse_resolv

 def _parse_resolv(self):
     self._servers = []
     try:
         with open("/etc/resolv.conf", "rb") as f:
             content = f.readlines()
             for line in content:
                 line = line.strip()
                 if line:
                     if line.startswith(b"nameserver"):
                         parts = line.split()
                         if len(parts) >= 2:
                             server = parts[1]
                             if common.is_ip(server) == socket.AF_INET:
                                 if type(server) != str:
                                     server = server.decode("utf8")
                                 self._servers.append(server)
     except IOError:
         pass
     if not self._servers:
         self._servers = ["8.8.4.4", "8.8.8.8"]
开发者ID:RemoteEvilDragon,项目名称:shadowsocks,代码行数:20,代码来源:asyncdns.py


注:本文中的shadowsocks.common.is_ip函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。