Skip to content

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

Closed
@huangy10

Description

@huangy10

我按照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同样添加到白名单中,则二者都可以使用。

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

Activity

huangy10

huangy10 commented on Jan 8, 2018

@huangy10
ContributorAuthor

排查了源代码,报错位置,在Limit_Clients/sockets.py文件中第123行,故将set_close_timeout 设置为False来暂时回避这个问题。

但是继而发现了另一诡异的问题。在第221行处,self.getpeername()返回的是一个长度为4的turple,前两个是地址和端口,而最后两个是0。这与文档有出入。我这里的python的版本是2.7.12。
暂时将这里修改了解决了这个问题

==== Update
发现了开始说的Invalid argument的问题。在setsockopt设置时,数据打包的格式设置成II在不同系统环境下的表现可能不稳定,替换成LL后解决了这个问题。

falseen

falseen commented on Jan 9, 2018

@falseen
Owner

厉害厉害!!原来是这个原因。我之前也发现了这个问题,但没想明白是怎么回事。

huangy10

huangy10 commented on Jan 10, 2018

@huangy10
ContributorAuthor

@falseen 我创建了一个PR,改动很简单,你抽时间看看?

falseen

falseen commented on Jan 10, 2018

@falseen
Owner

@huangy10 好!目前还有一个问题,我想不到原因。不知你能否找到 ?
#2

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @huangy10@falseen

        Issue actions

          在多账户系统下,黑名单内的端口无法使用 · Issue #14 · falseen/PySocket