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

关于 python3 运行报错的问题! #1

Closed
jzp820927 opened this issue Oct 27, 2016 · 98 comments
Closed

关于 python3 运行报错的问题! #1

jzp820927 opened this issue Oct 27, 2016 · 98 comments

Comments

@jzp820927
Copy link

jzp820927 commented Oct 27, 2016

环境编码: locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

在你的提示下,我安装了 py3 的 openssl 现在报错变成下面这样了,你再看看:
python3 proxy.py
Traceback (most recent call last):
File "proxy.py", line 53, in
from ProxyHandler import GAEProxyHandler, AutoProxyHandler
File "/root/GotoX/local/ProxyHandler.py", line 38, in
from GAEUpdata import testgaeip
File "/root/GotoX/local/GAEUpdata.py", line 115, in
from GAEFinder import timeToDelay, getgaeip
File "/root/GotoX/local/GAEFinder.py", line 168, in
from HTTPUtil import BaseHTTPUtil
File "/root/GotoX/local/HTTPUtil.py", line 37, in
class SSLConnection(object):
File "/root/GotoX/local/HTTPUtil.py", line 160, in SSLConnection
from makefile import backport_makefile as makefile
ImportError: No module named 'makefile'

你主页上提到的 必须组件:
gevent 1.1.2
pyOpenSSL 16.0.0 及以上
dnslib 0.9.6 及以上
我都已经安装了。。。
不知道是不是还差什么依赖?

pip3 list
cffi (1.8.3)
chardet (2.3.0)
command-not-found (0.3)
cryptography (1.5.2)
devscripts (2.16.2ubuntu3)
dnslib (0.9.6)
gevent (1.1.2)
greenlet (0.4.10)
idna (2.1)
language-selector (0.1)
Magic-file-extensions (0.2)
pip (8.1.2)
pyasn1 (0.1.9)
pycparser (2.16)
pycurl (7.43.0)
pygobject (3.20.0)
pyOpenSSL (16.2.0)
python-apt (1.1.0b1)
python-debian (0.1.27)
python-systemd (231)
requests (2.9.1)
setuptools (28.6.1)
six (1.10.0)
ssh-import-id (5.5)
ufw (0.35)
unattended-upgrades (0.1)
urllib3 (1.13.1)
wheel (0.29.0)

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 27, 2016

忘了放 3.4 的 makefile 兼容代码了。3.5 应该自带,不过我还没有写导入。
你明天再下载一次吧,直接 clone,那个发布不会保持最新。

@jzp820927
Copy link
Author

jzp820927 commented Oct 27, 2016

行吧,其实我都是 git pull 更新的。那就等你的 commit 了。

@jzp820927
Copy link
Author

jzp820927 commented Oct 28, 2016

刚刚 pull 了以后,现在是这个报错,py2 和 py3 都是一样的这个报错,难道是还没更新完?

python3 local/proxy.py
Traceback (most recent call last):
File "local/proxy.py", line 22, in
from common import NetWorkIOError
File "/root/GotoX/local/common/—init—.py", line 17, in
import clogging as logging
ImportError: No module named 'clogging'

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 28, 2016

@jzp820927
proxy.py 第15-19 行被我注释掉了,你去掉试一下。windows没问题...

@jzp820927
Copy link
Author

jzp820927 commented Oct 28, 2016

我把 15-19 注释去掉了,还是这个报错。

python3 local/proxy.py
Traceback (most recent call last):
File "local/proxy.py", line 22, in
from common import NetWorkIOError
File "/root/GotoX/local/common/init.py", line 17, in
import clogging as logging
ImportError: No module named 'clogging'

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 28, 2016

好了,又改了。不知道行不,心里没底。
python 太坑了,版本间有差别还想得通,但是作为脚本语言在不同平台的重要行为居然不一致。
记得从 start.py 启动。

@jzp820927
Copy link
Author

jzp820927 commented Oct 28, 2016

这个说不通啊,XXNET,XXMINI,这些都是一个版本运行所有平台啊。
还是不行

python start.py
Traceback (most recent call last):
File "start.py", line 7, in
from local import proxy
ImportError: No module named local

python3 start.py
Traceback (most recent call last):
File "start.py", line 7, in
from local import proxy
File "/root/GotoX/local/proxy.py", line 23, in
from common import NetWorkIOError
ImportError: No module named 'common'

python3 local/proxy.py
Traceback (most recent call last):
File "local/proxy.py", line 23, in
from common import NetWorkIOError
File "/root/GotoX/local/common/init.py", line 17, in
from .. import clogging as logging
ValueError: attempted relative import beyond top-level package

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 28, 2016

还好现在就你一人在用,造不成大混乱。
等会儿我一定要开两个分支。

@jzp820927
Copy link
Author

jzp820927 commented Oct 28, 2016

其实用 linux 的挺多的,xxnet 那边经常遇到,可能目前知道你项目的人少,所以就我一个人是 linux。
而且路由器平台的也全部都是 linux,感觉目前很多人都喜欢部署到路由器,所以如果以后用的人多了,linux 肯定是有用户的。

我也觉得你可以开2个分支,专门拿一个分支维护 linux 版,Linux 不需要独立的 py 环境,依赖也很容易安装,整个软件包可以精简为 100-200kb 左右,比 win 小很多。比较适合单独分支维护。

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 28, 2016

ok,这回全部都改了。
你再试一下。

@jzp820927
Copy link
Author

jzp820927 commented Oct 28, 2016

看样子,估计你还得好好研究下了,最开始的版本 py2 运行是没问题的,看看是不是能参考下。
python 的特点就是跨平台,按理说,应该很容易跨平台运行的。

python start.py
Traceback (most recent call last):
File "start.py", line 7, in
from local import proxy
ImportError: No module named local

python3 start.py
Traceback (most recent call last):
File "start.py", line 7, in
from local import proxy
File "/root/GotoX/local/proxy.py", line 23, in
from .common import NetWorkIOError
File "/root/GotoX/local/common/init.py", line 21, in
from .. import clogging as logging
ImportError: cannot import name 'clogging'

python local/proxy.py
Traceback (most recent call last):
File "local/proxy.py", line 23, in
from .common import NetWorkIOError
ValueError: Attempted relative import in non-package

python3 local/proxy.py
Traceback (most recent call last):
File "local/proxy.py", line 23, in
from .common import NetWorkIOError
SystemError: Parent module '' not loaded, cannot perform relative import

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 28, 2016

想问一下上面报错中的 /root 目录就是根目录那个?
你是直接拉到根目录还是怎么回事。

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 28, 2016

ok,l-patch 分支,麻烦你再试一下。

@jzp820927
Copy link
Author

jzp820927 commented Oct 29, 2016

恩,我说下我的系统环境吧。我是 ubuntu server 16.04 ,没有 X-windows,所以更没有桌面。所有操作都是在终端下操作的。

/root 目录就是 根 / 下面的 root 目录,也就是 root 的家目录,因为我是直接 root 用户登录的,所以登录后就直接到这个 root 的家目录 /root 了

具体操作如下。

cd /root
git clone https://github.com/SeaHOH/GotoX
cd GotoX
python3 start.py 或 python3 local/proxy.py

喜讯,捷报,l-patch 分支,可以正常运行了,py2,py3 都正常,通过 start.py 启动。

@jzp820927
Copy link
Author

jzp820927 commented Oct 29, 2016

还有个问题反馈一下,我看主配置文件 Config.ini
[filter]
action = 3
sslaction = 2

这个配置是 ,http 默认直连, https 默认直接转发(不修改证书)。
但是我随便访问了一个 https 网站就报错了。我就是想所有 https 都直连。浏览器不用导证书。
报错信息如下:
Exception happened during processing of request from ('192.168.1.2', 49451)
Traceback (most recent call last):
File "/usr/lib/python3.5/socketserver.py", line 625, in process_request_thread
self.finish_request(request, client_address)
File "/root/GotoX/local/proxy.py", line 69, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python3.5/socketserver.py", line 681, in init
self.handle()
File "/usr/lib/python3.5/http/server.py", line 422, in handle
self.handle_one_request()
File "/usr/lib/python3.5/http/server.py", line 410, in handle_one_request
method()
File "/root/GotoX/local/ProxyHandler.py", line 127, in do_CONNECT
self.do_count()
File "/root/GotoX/local/ProxyHandler.py", line 117, in do_count
do_x()
File "/root/GotoX/local/ProxyHandler.py", line 434, in do_FORWARD
hostname = self.set_DNS()
File "/root/GotoX/local/ProxyHandler.py", line 636, in set_DNS
dns[self.host] = dns_resolve(self.host)
File "/root/GotoX/local/common/dns.py", line 26, in dns_resolve
iplist = list(set(socket.gethostbyname_ex(host)[-1]) - GC.DNS_BLACKLIST)
File "/usr/local/lib/python3.5/dist-packages/gevent/_socketcommon.py", line 248, in gethostbyname_ex
return get_hub().resolver.gethostbyname_ex(hostname)
File "/usr/local/lib/python3.5/dist-packages/gevent/resolver_thread.py", line 61, in gethostbyname_ex
return self.pool.apply(_socket.gethostbyname_ex, args)
File "/usr/local/lib/python3.5/dist-packages/gevent/pool.py", line 300, in apply
return self.spawn(func, _args, *_kwds).get()
File "/usr/local/lib/python3.5/dist-packages/gevent/event.py", line 373, in get
return self.get(block=False)
File "/usr/local/lib/python3.5/dist-packages/gevent/event.py", line 363, in get
return self._raise_exception()
File "/usr/local/lib/python3.5/dist-packages/gevent/event.py", line 343, in _raise_exception
reraise(_self.exc_info)
File "/usr/local/lib/python3.5/dist-packages/gevent/hub.py", line 38, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.5/dist-packages/gevent/threadpool.py", line 207, in _worker
value = func(_args, **kwargs)
socket.gaierror: [Errno -2] Name or service not known

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 29, 2016

ActionFilter 里面有一些规则,你可以删除掉。
不过导入证书也没啥影响,证书名称不会与其它证书冲突。
而且 google 必须证书,转发和直连还是有区别,转发也就是隧道代理才不需要证书
最后这个报错我也在苦恼,这是遇到了无法解析的主机名,不影响使用,但是我还没找到方法忽略它。

@jzp820927
Copy link
Author

jzp820927 commented Oct 29, 2016

我看错误提示,好像也是和 DNS 有关。不知道目前解析 是通过什么方式做的,是通过 Config.ini 里面的 [DNS] 这块?还是用的系统的 DNS ?因为我自己搭建有 DNS,是否能把解析交给自己的 DNS 来处理。

我看动作说明:
#动作 | 动作名 | 代码
#拦截 | block | 1
#转发 | forward | 2
#直连 | direct | 3
#GAE 代理 | gae | 4

试了下,sslaction = 2 的时候,就报上面的错,sslaction = 3,会伪造证书,也就是说没有针对 https 的直连动作?
其实我只是想 GAE 代理 http 数据。https 我想通过自己的 DNS 或者 hosts 解析直接连接(相当于 GotoX 对 https 的数据做一个透明的转发,不做任何处理)。所以我想能不能设计一个 https 数据直连的模式。(除了 appspot 通过 data/ip.txt 连接以外)

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 29, 2016

等会儿我会更新配置文件,只带 google 网站规则,其它删掉。
如果你连 google 网站规则都不需要,可以自行删除。
配置中的转发也就是隧道代理,而直连是 GotoX 直连,需要修改数据。
解析就是提交给系统的,但系统中也是配置了自己的 DNS,我也没搞明白,暂时这样。

@jzp820927
Copy link
Author

也就是目前还不能针对 https 做真正的直连?

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 29, 2016

你所说的直连就是我说的转发亦即隧道
你可以在 ActionFilter.ini 中针对 google 修改直连为转发,把注释符换个位置就好了。

[7-direct]
#[7-forward]

@jzp820927
Copy link
Author

还是不行。这样设置根本打不开网页。chrome 显示如下:

www.google.com 网页无法正常运作
www.google.com 未发送任何数据。
ERR_EMPTY_RESPONSE

GotoX 的报错,就是上面那个 DNS 的错误。

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 30, 2016

[7-forward]下面的规则还在吧?这关系到使用的 IP,因为你先前说有 dns 服务和 host 我就没在意,这里的规则也是起到类似 host 文件的作用。
配置文件除了appid 外还修改了哪些?你现在的配置 [dns]/servers应该还是我自己用的 127.0.0.1,可以尝试修改。enable不用开启,或许我该把 servers分开再写个配置项。
还有,我又做了些修改,把 gws 跟一般网站的 ciphers 分开。
然后终于发现那个 DNS 错误怎么回事了,前几天调试时加了一个抛出,然后这几天死活没看见。

@jzp820927
Copy link
Author

jzp820927 commented Oct 30, 2016

ActionFilter.ini 文件规则就是这样,没做任何改动,这就是你默认的规则,7 默认就是用的 forward 转发,有问题吗?
我看 commit ,好像你后来又改了一次规则。把 [7-direct] 的注释放到 [7-forward] 上了。

DNS 那个我看到了,因为我自己也搭建有 DNS ,就是 127.0.0.1,可以让 https 直连,所以 DNS 我没改,就是用来测试走我自己的 DNS 让 https 直连。不过就是报上面的错了。

config 下面就 Config.user.ini 修改了下,其他都没动,具体改动,你看下面。

Config.user.ini 文件的改动,监听的 IP 和端口 改了下,加了认证,和 appid,其他没改动。这个应该是符合原 goagent 格式的
[listen]
ip = 0.0.0.0
auto_port = 8000
gae_port = 8001
username = abc
password = 123

[gae]
appid = appid1|appid2|appid3|appid4|appid5 #appid 换成自己的了,是 goproxy 的 go 服务端

ActionFilter.ini 文件是默认以下内容,没改动
[5-forward]
#转发直连,即隧道代理
.android.com = google_hk
scholar.google.com = google_hk
scholar.google.com. = google_hk
ipv6.

[6-gae]
accounts.google.com
chrome.google.com
.googlevideo.com

#[7-direct]
#代理直连
[7-forward]
#代理转发/隧道
.appspot.com = google_hk
.ggpht.com = google_hk
goo.gl = google_hk
.google.cn = google_hk
.google.com = google_hk
.google.com. = google_hk
.googleapis.com = google_hk
.googlecode.com = google_hk
.googlegroups.com = google_hk
.googlesource.com = google_hk
.googletagservices.com. = google_hk
.googleusercontent.com = google_hk
.google-analytics.com = google_hk
.gstatic.com = google_hk
.youtube.com = google_hk
.ytimg.com = google_hk
.golang.org = google_hk

[8-gae]
#通过 GAE 服务器代理

[9-proxy]
#转发到代理服务器

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 30, 2016

认证的代码我还没有写,我是在3.1.5版基础上改的,所以这个并没有用,但写了应该也不影响,浏览器并没有让你填写用户密码吧。
其它看不出问题,想不通。用这个配置我也无法重现。

@jzp820927
Copy link
Author

是啊,认证确实没用,不过这个是小问题。你的意思是,在 win 上这个配置一切正常?

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 30, 2016

win7没问题,就这个配置。
要不你更新一下,然后就现在这个配置,[dns]/servers 不用本地的,改为 8.8.8.8之类,加个三两个。

@jzp820927
Copy link
Author

那我试试吧

@hcym
Copy link

hcym commented Oct 30, 2016

终于正常运行了

goagent 3.1.18的老货也可以用

速度不慢就是链接反应迟钝,要是能关闭扫描可能改善迟钝

只有一个问题,ubuntu下面手动导入证书无效

只能用--proxy-server="http=127.0.0.1:8086;https=127.0.0.1:8088"
测试的 http

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 30, 2016

Config.ini 里面设置端口,看与你使用的是否一致,两个端口都支持 http 和 https 。
“手动导入证书无效”是指什么?我没用过 linux,如果是导入浏览器只需要输入“http://gotox.net/ca ”就可以,导入系统的话请先下载。
6 分钟检查一次 ip,数目不够了才扫描。我没有一直维持链接,90 秒后就会释放,所以如果不是一直使用的话,每 6 分钟会有 4分半的空档没有保持链接,需要新建。
不知道你改用自己的 ip 没有,链接迟钝还有可能是 ip 的原因,我用的似乎有不少都处于被随机干扰状态。

@SeaHOH
Copy link
Owner

SeaHOH commented Oct 30, 2016

@hcym
才反应过来,你能正常用了。那么 jzp820927 使用的转发方式连 google,麻烦你按照他的配置看看能不能用。

@hcym
Copy link

hcym commented Nov 22, 2016

pyopenssl 等等系统环境都没动,应该最新

放了

怕路径问题,所有目录都放

还是不行,以前就已1个版本可以,系统是1610

现在升到1704也不行了

@jzp820927
Copy link
Author

jzp820927 commented Nov 22, 2016

应该和系统没啥关系,还是运行环境。你的库的版本,和我的不一样。
把你 pip list 命令结果贴出来看看。
看看我的环境:
$ ——> python start.py
——————————————————————————————

  • GotoX 版 本 : 3.3.1 (python/2.7.12 gevent/1.1.2 pyopenssl/16.2.0)
  • GAE APPID : ||||***
  • GAE 远程验证 : 已启用
  • 监 听 地 址 : 自动代理 - 0.0.0.0:8087
  •            GAE 代理 - 0.0.0.0:8086
    
  • 链 接 模 式 : 远程 - TLSv1.2/openssl
  •            本地 - SSLv23/gevent
    
  • 链接 配置集 : ipv4
  • 安 装 证 书 : http://gotox.net/ca
  • 下 载 证 书 : http://gotox.net/ca 加任意字符
    ——————————————————————————————

@SeaHOH
Copy link
Owner

SeaHOH commented Nov 22, 2016

@hcym
项目页有写啊,pyopenssl 至少 16.0,dnslib 也需要安装。
估计虽然系统升级了,但是 py 第三方库却降级或者是恢复默认版本了。

@jzp820927
Copy link
Author

我也觉得是他运行环境的问题,特别是 openssl 和证书有关。

@hcym
Copy link

hcym commented Nov 22, 2016

可能

没用python-pip安装运行环境

就是源里版本,那个正常运行的是1610,版本新

晚上再换个试试

@jzp820927
Copy link
Author

jzp820927 commented Nov 22, 2016

没用python-pip安装运行环境,那你的运行环境哪儿来的?
WIN 系统应该是自带运行环境的,不过 WIN 以外的系统不带运行环境,得自己装才行。

@hcym
Copy link

hcym commented Nov 22, 2016

换了1704的机器 pyopenssl/16.2.0

还是不行

python start.py

  • GotoX 版 本 : 3.3.1 (python/2.7.12+ gevent/1.1.1 pyopenssl/16.2.0)
  • GAE APPID :
  • GAE 远程验证 : 已启用
  • 监 听 地 址 : 自动代理 - 127.0.0.1:8087
  •            GAE 代理 - 127.0.0.1:8086
    
  • 链 接 模 式 : 远程 - TLSv1.2/openssl
  •            本地 - SSLv23/gevent
    
  • 链接 配置集 : ipv4
  • 安 装 证 书 : http://gotox.net/ca
  • 下 载 证 书 : http://gotox.net/ca 加任意字符
    ==================================================================================
    Traceback (most recent call last):
    File "start.py", line 14, in
    proxy.main()
    File "/home/oem/wallproxy/GotoX-master/local/proxy.py", line 257, in main
    CertUtil.check_ca()
    File "/home/oem/wallproxy/GotoX-master/local/CertUtil.py", line 261, in check_ca
    sub_key = crypto.load_publickey(crypto.FILETYPE_PEM, content)
    File "/usr/lib/python2.7/dist-packages/OpenSSL/crypto.py", line 2547, in load_publickey
    _raise_current_error()
    File "/usr/lib/python2.7/dist-packages/OpenSSL/_util.py", line 48, in exception_from_error_queue
    raise exception_type(errors)
    OpenSSL.crypto.Error: [('PEM routines', 'PEM_read_bio', 'no start line')]

@SeaHOH
Copy link
Owner

SeaHOH commented Nov 22, 2016

看不咋懂,麻烦看下 cert 文件夹是否存在这三个文件:
CA.crt
CAkey.pem
subkey.pem

@hcym
Copy link

hcym commented Nov 22, 2016

有这三个文件

也是担心兼容,又删尽再用原版重新生成

@SeaHOH
Copy link
Owner

SeaHOH commented Nov 22, 2016

subkey.pem 里面是否有内容呢?

@jzp820927
Copy link
Author

确实有点诡异,同样的环境,我这边都可以正常运行。

@theratlesnake
Copy link

@SeaHOH 大哥,你这项目可以使用了吗?

@jzp820927
Copy link
Author

一直可以用

@theratlesnake
Copy link

@jzp820927 是不是自动扫描ip的?

@jzp820927
Copy link
Author

@SeaHOH
Copy link
Owner

SeaHOH commented Dec 29, 2016

还是需要自己提供 IP,不支持 IP 段。看项目介绍。

@theratlesnake
Copy link

@SeaHOH 老大,写个教程?

@jzp820927
Copy link
Author

这么简单的东西,还需要教程。

@SeaHOH
Copy link
Owner

SeaHOH commented Dec 29, 2016

大致信息项目首页都可以看到。
详细设置说明都在配置文件中,我觉得勉强写明白了。

@jzp820927
这是连击?

@jzp820927
Copy link
Author

不明觉厉,应该是,从来没遇到过,第一次遇到连击,兴奋ing

@SeaHOH
Copy link
Owner

SeaHOH commented Dec 29, 2016

GoProxy?我也xx了,大雾~~

@jzp820927
Copy link
Author

github 直连没走代理。

@SeaHOH
Copy link
Owner

SeaHOH commented Dec 29, 2016

这样我就放心了。

@theratlesnake
Copy link

@SeaHOH 例如你写的【需事先提供由其它扫描工具取得一个较大的(上万也可)可用 GAE IP 列表以供筛选,放入“data/ip.txt”或“data/ipex.txt”(优先)中,格式为每行一个完整 IP】,就这一步我都不知道怎么搞了

@SeaHOH
Copy link
Owner

SeaHOH commented Dec 29, 2016

data 是文件夹,ip.txt 和 ipex.txt 是可用 GAE IP 列表,自己找 IP 放进去,每行一个。
建议你使用 XX-Net,我这个主要方便自定义代理规则。

@theratlesnake
Copy link

@SeaHOH 上万个ip手动加进去啊,吓人

@SeaHOH
Copy link
Owner

SeaHOH commented Dec 29, 2016

几百个也行,不是有那么多找 IP 的软件么。

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

No branches or pull requests

5 participants