Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IPV6支持问题 #4

Open
ymg5206 opened this issue Mar 27, 2017 · 9 comments
Open

IPV6支持问题 #4

ymg5206 opened this issue Mar 27, 2017 · 9 comments

Comments

@ymg5206
Copy link

ymg5206 commented Mar 27, 2017

当服务器为一个ipv6地址时,会一直 update dns
是不是因为找不到ipv4地址所以才一直这样的啊
或者说,这个项目是不支持ipv6服务器吗
原版的windows客户端是可以支持ipv6的。。。

@hauntek
Copy link
Owner

hauntek commented Mar 27, 2017

目前的项目貌似只支持ipv4,关于ipv6晚点我研究会,估计后续版本会支持。

@hauntek
Copy link
Owner

hauntek commented Mar 27, 2017

或者你修改下代码中的建立远程连接的socket.AF_INET改成socket.AF_INET6 试试

@hauntek
Copy link
Owner

hauntek commented Mar 27, 2017

def connectremote(host, port):
    try:
        host = socket.gethostbyname(host)
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        ssl_client = ssl.wrap_socket(client, ssl_version=ssl.PROTOCOL_SSLv23)
        ssl_client.connect((host, port))
        ssl_client.setblocking(1)
        logger = logging.getLogger('%s:%d' % ('Conn', ssl_client.fileno()))
        logger.debug('New connection to: %s:%d' % (host, port))
    except socket.error:
        return False

    return ssl_client

上面代码改成下面代码试试

def connectremote(host, port):
    try:
        host = socket.gethostbyname(host)
        client = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
        ssl_client = ssl.wrap_socket(client, ssl_version=ssl.PROTOCOL_SSLv23)
        ssl_client.connect((host, port))
        ssl_client.setblocking(1)
        logger = logging.getLogger('%s:%d' % ('Conn', ssl_client.fileno()))
        logger.debug('New connection to: %s:%d' % (host, port))
    except socket.error:
        return False

    return ssl_client

也就是将
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
改成试试
client = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)

@hauntek
Copy link
Owner

hauntek commented Mar 27, 2017

            # 检测控制连接是否连接.
            if mainsocket == False:
                ip = dnsopen(host)
                if ip == False:
                    logging.info('update dns')
                    time.sleep(10)
                    continue
                mainsocket = connectremote(ip, port)
                if mainsocket == False:
                    logging.info('connect failed...!')
                    time.sleep(10)
                    continue

然后再把这段代码改成下面的

            # 检测控制连接是否连接.
            if mainsocket == False:
                mainsocket = connectremote(host, port)
                if mainsocket == False:
                    logging.info('connect failed...!')
                    time.sleep(10)
                    continue

因为 socket.gethostbyname() 不支持ipv6所以我们就去掉它
删除源码中的所有 host = socket.gethostbyname(host)

这样就可以连接上ipv6服务器了,我刚刚测试可以。

@hauntek
Copy link
Owner

hauntek commented Mar 27, 2017

image
ipv6服务器地址,测试结果

@ymg5206
Copy link
Author

ymg5206 commented Mar 28, 2017

谢谢作者,试了一下 是可以连了 我放路由挂几天 试试稳定性
再次感谢作者的开发

对了,试了用pyinstaller 可以编译windows客户端
有可能利用这个做一个win下的gui么,支持输入域名 端口 之类的 。
如果想做 需要哪方面的知识呢 小白一个 /(ㄒoㄒ)/~~

@rikonaka
Copy link

@ymg5206 QT(邪恶)

@Cragsman
Copy link

Cragsman commented Jul 4, 2017

很好用,从此家里的nas可以在任何地点访问了

@hauntek
Copy link
Owner

hauntek commented Jul 26, 2019

@ymg5206 现已支持Ipv4/Ipv6双栈

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants