Skip to content
This repository has been archived by the owner on Jan 17, 2021. It is now read-only.

Commit

Permalink
add XX-Mini python3
Browse files Browse the repository at this point in the history
  • Loading branch information
xyuanmu committed Apr 1, 2016
1 parent b7ca037 commit d36df4c
Show file tree
Hide file tree
Showing 64 changed files with 4,382 additions and 1,090 deletions.
115 changes: 111 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,117 @@
# XX-Mini

下载地址:https://git.io/XX-Mini

## 软件说明
* 源码提取自 [XX-Net](https://github.com/XX-net/XX-Net) 项目,精简 web UI、php_proxy 以及 x_tunnel 等功能,只保留 gae_proxy 功能
* 源码取自 [XX-Net](https://github.com/XX-net/XX-Net) 项目,精简 web UI、php_proxy 以及 x_tunnel 等功能,只保留 gae_proxy 以及自动扫描IP功能
* 用户数据保存到 data 目录,运行软件后会自动生成,支持 manual.ini 配置文件,自定义IP段 ip_range.txt。
* 代码为 Linux 版本,欢迎提交 commit,提交代码后一段时间内会同步到 Windows 版本提供下载。
* idea 来自 [XX-Net#2301](https://github.com/XX-net/XX-Net/issues/2301),模块简单,未部署谷歌appid者请慎重使用!如果熟悉 GoAgent 和 XX-Net 会很快上手。

## 使用说明
### Windows:
* 下载 Windows 版本解压后,双击运行 goagent.exe 等待一段时间扫描IP(半小时左右)
* 当有足够IP的时候右键点击系统托盘 goagent 图标 - 设置 IE 代理,选择 `http://127.0.0.1:8086/proxy.pac`
* 接下来即可使用IE进行翻墙,但公共appid不允许观看视频和下载
* 双击 addto-startup.js 脚本可以添加开机启动项

### Linux:
* 下载 Linux 版本解压后,打开终端,定位到 XX-Mini 目录,输入 `python proxy.py` 等待一段时间扫描IP
* 之后设置浏览器代理为:127.0.0.1,端口:8087,支持pac自动代理的设置为 `http://127.0.0.1:8086/proxy.pac`
* 接下来即可使用浏览器翻墙,但公共appid不允许观看视频和下载
* 在 XX-Mini 目录,输入 `python addto-startup.py` 可以添加系统启动项

### egg 文件打包方法:
* 将pythonlib文件夹里的文件打包成 pythonlib.zip 压缩包
* 修改压缩包后缀 zip 为 egg 即可

### proxy.ini 配置文件说明:
```ini
[listen]
;监听地址,如果需要允许局域网/公网使用,设为0.0.0.0即可,若共享pac此项必须设置为 0.0.0.0
ip = 127.0.0.1
;默认使用8087作为代理端口,如有需要可以修改
port = 8087
;启动后是否隐藏 goagent 窗口,0为隐藏(最小化至托盘),1为显示
visible = 0

[gae]
;添加你自己的appid,多个用竖线 | 分隔
appid =
;appid密码,无可不填
password =

;类似于系统 hosts 功能,指定各网站连接方式为 direct(直接通过IP连接) 或 gae(通过gae连接)
[hosts]
;表示直接通过IP连接 www.google.com,但非 www 开头的不使用直连
www.google.com = direct
;前面加 . 表示只要匹配域名即使用 gae 模式
.commondatastorage.googleapis.com = gae


;下载分流,建议使用默认值
[autorange]
;线程数,当观看视频不流畅可适当增加
threads = 8
;分块大小,如果IP质量好可以修改 maxsize 为更大的数值
maxsize = 524288
waitsize = 1048576
bufsize = 65536

;pac 自动配置脚本
[pac]
;是否启用
enable = 1
;监听地址,如果需要允许局域网/公网使用,设为0.0.0.0,同时设置 [listen] ip = 0.0.0.0 否则无效
ip = 127.0.0.1
;默认使用8086作为代理端口,如有需要可以修改
port = 8086
;pac 文件名
file = proxy.pac
;是否开启广告拦截模式
admode = 1
;广告拦截规则订阅地址
adblock = https://easylist-downloads.adblockplus.org/easylistchina.txt
;被墙网站规则订阅地址
gfwlist = https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
;更新时间,以秒计算
expired = 86400

;前置代理
[proxy]
;是否启用,改为1启用
enable = 0
;代理类型,支持 HTTP HTTPS SOCK4 SOCK5
type = HTTP
host = 127.0.0.1
port = 8888
user =
passwd =

[google_ip]
;开启 IPv6 选项,1开启,0关闭,慎重!
use_ipv6 = 0
;自动调整扫描线程数
auto_adjust_scan_ip_thread_num = 1;
;扫描线程数,默认50,若出现网络连接缓慢可改小一点
max_scan_ip_thread_num = 50
;谷歌IP上限,超过则剔除延时高的IP
max_good_ip_num = 3000
;IP连接时间间隔,出现连接不稳定可适当调整
ip_connect_interval = 8
;单个IP连接数,建议别改,容易使IP失效
max_links_per_ip = 1

;连接设置,一般无需修改
[connect_manager]
;最大连接线程
https_max_connect_thread = 10
;最小连接池数值
https_connection_pool_min = 5
;最大连接池数值
https_connection_pool_max = 50

## 版本下载:
* Windows: https://github.com/xyuanmu/XX-Mini/releases
* Linux: https://codeload.github.com/xyuanmu/XX-Mini/zip/1.0
;设置成 1 会在data目录生成日志文件 local.log,便调试用
[system]
log_file = 0
```
107 changes: 41 additions & 66 deletions goagent-gtk.py
Original file line number Diff line number Diff line change
@@ -1,73 +1,48 @@
#!/usr/bin/env python2
#!/usr/bin/env python3
# coding:utf-8
# Contributor:
# Phus Lu <phus.lu@gmail.com>

__version__ = '1.6'

GOAGENT_LOGO_DATA = """\
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
AAAASUVORK5CYII="""
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"""

import sys
import os
Expand Down Expand Up @@ -116,7 +91,7 @@ def drop_desktop():
Name=GoAgent GTK
Comment=GoAgent GTK Launcher
Categories=Network;Proxy;
Exec=/usr/bin/env python "%s"
Exec=/usr/bin/env python3 "%s"
Icon=%s/goagent-logo.png
Terminal=false
StartupNotify=true
Expand All @@ -143,7 +118,7 @@ def should_visible():

class GoAgentGTK:

command = ['/usr/bin/env', 'python', 'proxy.py']
command = ['/usr/bin/env', 'python3', 'proxy.py']
message = u'GoAgent已经启动,单击托盘图标可以最小化'
fail_message = u'GoAgent启动失败,请查看控制台窗口的错误信息。'

Expand All @@ -154,7 +129,7 @@ def __init__(self, window, terminal):
self.window.connect('delete-event',self.delete_event)
self.terminal = terminal

for cmd in ('python2.7', 'python27', 'python2'):
for cmd in ('python3.5', 'python35', 'python3'):
if os.system('which %s' % cmd) == 0:
self.command[1] = cmd
break
Expand Down
Binary file removed lib/OpenSSL/SSL.so
Binary file not shown.
45 changes: 0 additions & 45 deletions lib/OpenSSL/__init__.py

This file was deleted.

Binary file removed lib/OpenSSL/crypto.so
Binary file not shown.
Binary file removed lib/OpenSSL/rand.so
Binary file not shown.
9 changes: 0 additions & 9 deletions lib/OpenSSL/version.py

This file was deleted.

Loading

0 comments on commit d36df4c

Please sign in to comment.