Coder Social home page Coder Social logo

falseen / pysocket Goto Github PK

View Code? Open in Web Editor NEW
107.0 10.0 43.0 97 KB

PySocket ,一个通过猴子补丁(monkey patch)动态修改 socket 的项目。在不修改源码的情况下给 socket 增加一些诸如限制客户端数量、前置代理之类的功能。让我们将 Monkey Patch 进行到底吧!

Home Page: https://falseen.github.io/PySocket/

License: Apache License 2.0

Python 100.00%
socket python monkey-patch monkeypatch proxy

pysocket's People

Contributors

huangy10 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pysocket's Issues

把socket.py放进去以后没有起作用

您好,我把Limit_Clients目录下的socket.py放到了shadowsocks的根目录下,然后用sudo ssserver -c /etc/shadowsocks.json -d start -v命令开启shadowsocks,我限制的是10002端口只能有1个ip地址连接,但是看log好像并没有进行限制,而且手机和电脑的确能同时使用10002端口。想问一下这个是什么问题?
shadowsocks.log

关于Limit_Clients udp 在 shadowsocks 下的bug。

安卓端在开启优酷客户端并且开启了udp转发的情况下关闭了ss之后服务端会出现如下错误,但不影响使用。

2017-03-20 02:36:39 DEBUG    send udp response to 192.168.*.*:57525
2017-03-20 02:36:40 ERROR    [Errno 10054]
Traceback (most recent call last):
  File "E:\github\shadowsocks\shadowsocks\../shadowsocks\eventloop.py", line 216
, in run
    handler.handle_event(sock, fd, event)
  File "E:\github\shadowsocks\shadowsocks\../shadowsocks\udprelay.py", line 333,
 in handle_event
    self._handle_server()
  File "E:\github\shadowsocks\shadowsocks\../shadowsocks\udprelay.py", line 151,
 in _handle_server
    data, r_addr = server.recvfrom(BUF_SIZE)
  File "E:\github\shadowsocks\shadowsocks\../socket.py", line 84, in <lambda>
    setattr(self, method_name, types.MethodType(lambda *args, **kwds: new_method
(method, *args, **kwds), self, self))
  File "E:\github\shadowsocks\shadowsocks\../socket.py", line 132, in new_recvfr
om
    return_value = orgin_method(*args, **kwds)
error: [Errno 10054]

目测是优酷客户端的udp连接跟一般的不一样,估计是实现了一个类似tcp的效果。具体原因有空再找吧。

急急急,我是码盲。。。

老哥,你在吗?
15年的版本,限制同一端口连接数没有问题,能够随意切换,不过没有黑白名单功能,所以我试了下17年的版本,问题来了。
用自家网络连接(无论用什么设备和端口),断开后用邻居家网络(或4G)都无法连接原来的端口,重启后还是出现同样的问题。我怀疑是断开的ip地址没有清理成功。请问怎么改代码。。。在线等老哥。。。

【小问题】同一个设备,连着ss server播放Youtube,4G和wifi之间切换会出现中断

刚刚测试了一下我的手机,在4G连接vpn的状态播放视频,然后4G切换成wifi (例如我到家),再wifi切换成4G(例如我下班了),基本没什么问题,棒极了。

4G ---> wifi 在刚刚切换的时候,原来的连接还没有超时,新的wifi请求被干掉了,不过过一会前面的socket被砍掉,接受了新的。完全自动!

wifi ---> 4G 原来的连接一直没超时,新的请求一直失败 ,最后我把Youtube应用关掉重开就好了(当然这很简单,所以说是小问题)。似乎是一个坚挺的google ads的访问一直在那里不死。。。

日志如下
https://gist.github.com/WalkerWalker/6231dc1f583dd2ec16fa923ab77c05d4

谢谢!

使用源码启动的SS服务器如何开机启动

我使用大佬的程序测试成功限制了ip同时连接数,但只能通过python方式打开,我是小白,现在成功用
nohup python /root/shadowsocks/shadowsocks/server.py -c /etc/shadowsocks.json > python.log3 2>&1 &将服务添加到了后台进程,不过不知道怎么将服务添加进开机进程,求大佬帮助

软件根目录在哪

您好,
软件根目录如下:

# which ssserver
/usr/bin/ssserver

还是/etc/init.d/shadowsocks 这个呢?

一个客户端断开了以后,另一个客户端永远连不上

成功实现了限制某个端口访问不能超过一个,撒花,么么哒!
但是我在电脑上断开连接以后,手机4G也迟迟连不上去,等了10分钟多了也连不上去。服务器上的日志一直是

Mar 19 09:46:39 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:46:39 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:47:14 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:47:14 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:47:26 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:47:26 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:48:15 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:48:15 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:48:40 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:48:40 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:49:18 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:49:18 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:49:34 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:49:34 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:50:59 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:50:59 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:51:17 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:51:17 ERROR    [socket] the server_addrs *:8333 client more then the 1
Mar 19 09:52:06 ip-172-31-12-118.us-west-1.compute.internal python[826]: 2017-03-19 09:52:06 ERROR    [socket] the server_addrs *:8333 client more then the 1

我电脑用的客户端是 shadowsocksX-NG
手机用的是ssrconnect

对了,应该是 more than, 不是 more then

Limit Clients 如何使用?

抱歉我还是比较笨,虽然你写了,但我还是一脸懵逼。。。。

使用说明:1.将此文件放在程序根目录中即可生效,不用做其他设置(需要重新运行程序)。

是把这个socket.py文件下载放到哪里? 还是需要整个git库都拿下来?
我是在aws上开了一个centos的机器,在上面安装了ssserver,配置了/etc/shadowsocks.json

关于 Limit_Clients 在python3下的bug。

# 动态patch类方法
def new_class_method(_class, method_name, new_method):
    method = getattr(_class, method_name)
    info = sys.version_info
    if info[0] >= 3:
        setattr(_class, method_name,
                types.MethodType(lambda *args, **kwds: new_method(method, *args, **kwds), _class))
    else:
        setattr(_class, method_name,
                types.MethodType(lambda *args, **kwds: new_method(method, *args, **kwds), None, _class))

# 自定义 socket 类,可以自定义实例方法或属性。
class new_socket(socket.socket):

    def __init__(self, *args, **kwds):
        super(new_socket, self).__init__(*args, **kwds)


def new_bind(orgin_method, self, *args, **kwds):
    
    # 如果绑定地址是0,那这个 socket 就一定不是和客户端通信的。
    # 此处主要是考虑到shadowsocks服务端在做流量转发的时候会对本地的socket进行绑定。
    if args[0][1] != 0:
        if only_port:
            server_addrs = '*:%s' % args[0][1]
        else:
            server_addrs = '%s:%s' % (args[0][0], args[0][1])
        self._server_addrs = server_addrs
        self._all_client_list.update({server_addrs:{}})
        new_self_method(self, 'recvfrom', new_recvfrom)
    orgin_method(self, *args, **kwds)


new_class_method(socket.socket, 'bind', new_bind)
socket.socket = new_socket

上面的这段代码会把socket的bind方法替换成 new_bind,在python2下运行正常。但是在python3下,new_bind 的 self 参数无法获取到实例本身,反而获取到的是一个 type 类型的 class socket.new_socket 这让我百思不得其解。反复查资料也没得到答案,如果有哪位高手知道的话,烦请告知一下。

在多账户系统下,黑名单内的端口无法使用

我按照https://github.com/shadowsocks/shadowsocks/wiki/Configure-Multiple-Users 中的方法配置了双用户(即双端口)。同时将Limit_Clients下的socket.py文件,放到了/usr/local/bin/目录下。服务器上我只跑了ss,没有其他服务,/usr/local/bin/目录下只有pip和ss的可执行文件。

同时,我将两个端口中一个设置到白名单中,一个添加到黑名单中,如下:

white_list = [1017]
black_list={1018:40}

此时1017端口可以正常使用,但是通过1018则一直无法连接外网,查看ss的日志,发现输出了

[Errno 22] Invalid argument

我测试将1018同样添加到白名单中,则二者都可以使用。

请问以上现象是什么原因呢?

貌似udp有问题

在Linux+SSR的环境(单用户和多用户均相同)下测试发现
使用带hook的TCP会提示Error connecting to SOCKS5 proxy 127.0.0.1:1080: [Errno 101] Network is unreachable,但是sock5是能够连接的
去除hook则TCP连接正常,UDP会被[Errno 22] Invalid argument刷屏(在带hook的情况下也会)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.