原文件分布在 https://gist.github.com/falseen/61861b9fe7fa643479bf ,为了方便管理,特迁移至此。
##功能:限制ss的客户端数量(基于ip判断),理论上也可以用于其他使用了socket模块的python程序。
使用说明:
-
将此文件放在ss根目录中即可生效,不用做其他设置(需要重新运行ss)。
-
修改53、54行的 clean_time 和 ip_numbers 为你想要的数值。
-
如果你的服务器有ipv6,并且你想让ip4和ip6分开限制,则可以设置 only_port 为 False 。
原理:默认情况下,ss在运行的时候会引用系统中的socket文件,但是把这个socket文件放到ss目录之后,ss就会引用这个我们自定义的socket文件。 然后在这个文件中再引用真正的socket包,并在原socket的基础上加以修改,最终ss调用的就是经过我们修改的socket文件了。
所以理论上任何引用了socket包的python程序都可以用这个文件来达到限制连接ip数量的目的。
##说明:
把这个文件放入ss根目录之后,等于是劫持了ss所引用的socket模块。因为python的机制是优先从当前目录引用模块,所以ss自然会引用这个我们自定义的文件。然后我们再在这个文件中引入真正的socket模块,并对原来的 accept 方法加以修改(实际上是加了一层壳),最终ss调用 accept 方法的时候会先调用我们自定义的方法,然后这个方法再调用真正的accept方法,之后根据accept返回的结果判断是否返回结果给 ss。大概就是这样。
有些地方的外网ip在短时间内可能会变动比较频繁,所以ip数量最好设置多一些,以免误伤。