python-ngrok
python-ngrok copied to clipboard
IPV6支持问题
当服务器为一个ipv6地址时,会一直 update dns 是不是因为找不到ipv4地址所以才一直这样的啊 或者说,这个项目是不支持ipv6服务器吗 原版的windows客户端是可以支持ipv6的。。。
目前的项目貌似只支持ipv4,关于ipv6晚点我研究会,估计后续版本会支持。
或者你修改下代码中的建立远程连接的socket.AF_INET改成socket.AF_INET6 试试
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)
# 检测控制连接是否连接.
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服务器了,我刚刚测试可以。
ipv6服务器地址,测试结果
谢谢作者,试了一下 是可以连了 我放路由挂几天 试试稳定性 再次感谢作者的开发
对了,试了用pyinstaller 可以编译windows客户端 有可能利用这个做一个win下的gui么,支持输入域名 端口 之类的 。 如果想做 需要哪方面的知识呢 小白一个 /(ㄒoㄒ)/~~
@ymg5206 QT(邪恶)
很好用,从此家里的nas可以在任何地点访问了
@ymg5206 现已支持Ipv4/Ipv6双栈