socks.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:trip 作者: littlecodersh 项目源码 文件源码
def _write_socks5_address(self, addr):
        host, port = addr
        proxy_type, rdns, _, _, username, password = self.proxy_settings
        family_to_byte = {socket.AF_INET: b"\x01", socket.AF_INET6: b"\x04"}

        for family in (socket.AF_INET, socket.AF_INET6):
            try:
                addr_bytes = socket.inet_pton(family, host)
                yield self.write(family_to_byte[family] + addr_bytes)
                host = socket.inet_ntop(family, addr_bytes)
                yield self.write(struct.pack(">H", port))
                raise gen.Return((host, port))
            except socket.error:
                continue

        if rdns:
            host_bytes = host.encode("idna")
            yield self.write(b"\x03" + chr(len(host_bytes)).encode() + host_bytes)
        else:
            addresses = yield self.resolver.getaddrinfo(host, port, socket.AF_UNSPEC,
                                           socket.SOCK_STREAM,
                                           socket.IPPROTO_TCP,
                                           socket.AI_ADDRCONFIG)

            target_addr = addresses[0]
            family = target_addr[0]
            host = target_addr[4][0]

            addr_bytes = socket.inet_pton(family, host)
            yield self.write(family_to_byte[family] + addr_bytes)
            host = socket.inet_ntop(family, addr_bytes)
        yield self.write(struct.pack(">H", port))
        raise gen.Return((host, port))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号