V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Ehco1996
V2EX  ›  Python

求教,如何检测 ss 心跳包? 或者如何检测 ss 节点是否连通?

  •  
  •   Ehco1996 · 2017-08-12 15:34:53 +08:00 · 9113 次点击
    这是一个创建于 2690 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近用 django 写了个 sspanel,

    项目在这: https://github.com/Ehco1996/django-sspanel

    Demo: http://www.ehcozone.club

    现在希望能够判断一下 节点的运行状态,并返回检测值,

    现在网上好多资料都没有了,查了好久,貌似需要检测心跳包?

    不太明白相关的知识

    谁能给个思路么?

    第 1 条附言  ·  2017-08-12 16:36:42 +08:00

    已经找到办法了,

    用这条命令就能检测进程是否再运行了。

    ps -ef | grep server.py| grep -v grep | wc -l

    20 条回复    2017-08-13 19:22:17 +08:00
    pqee
        1
    pqee  
       2017-08-12 15:42:24 +08:00 via Android
    都写 sspanel 了这个搞不定不科学呀……怎么和 ssserver 通信的…
    blankme
        2
    blankme  
       2017-08-12 15:46:58 +08:00
    如果是检测进程是否在运行:pgrep ssserver
    如果是检测 ss 能不能用,在监控机上用 sslocal 连你的 ss,然后:proxychains4 curl ifconfig.co

    两者都是不需要深度知识的方法
    Ehco1996
        3
    Ehco1996  
    OP
       2017-08-12 16:07:39 +08:00 via iPhone
    @pqee 前端和 server 是通过数据库通讯的,关于 ss 是如何运行的我还真不太明白...
    Ehco1996
        4
    Ehco1996  
    OP
       2017-08-12 16:18:40 +08:00 via iPhone
    @blankme

    谢谢回复,
    我用的还是 manyuser python 版,
    运行是通过 run.sh 运行人,
    用 ps 一下,检测不到进程....

    我刚去试了 用 pgrep ssserver 也检测不到进程

    请问怎么办?

    感谢!
    zhengxiaowai
        5
    zhengxiaowai  
       2017-08-12 16:30:43 +08:00
    歪个楼,怎么检测流量?
    vh2h
        6
    vh2h  
       2017-08-12 16:33:03 +08:00
    不会,先给顶一个!
    blankme
        7
    blankme  
       2017-08-12 16:35:37 +08:00
    @Ehco1996
    run.sh 里面,在运行之前它会先找到正在运行的 process,然后 kill,再重新启动。(我看到的这个版本是这样的)
    你改改就变成检测是否运行的脚本了,大致是 pgrep python 这样,run.sh 里面做得更详细。
    Ehco1996
        8
    Ehco1996  
    OP
       2017-08-12 16:35:45 +08:00
    @zhengxiaowai user 表里的 u+d 就是流量了


    @blankme 知道怎么做了, 脚本运行的话 进程是 server.py

    用这条命令就行了就能检测到了
    ps -ef | grep server.py| grep -v grep | wc -l

    再次感谢
    zhengxiaowai
        9
    zhengxiaowai  
       2017-08-12 16:49:16 +08:00
    @Ehco1996 我是说你是怎么实现流量统计的

    ps -ef | grep server.py| grep -v grep | wc -l 并不准确,我我有一个 server.py 的脚本启动也会统计进去

    1. 找一下 ss server 启动时候没有存储 pid 的参数
    2. 比较好的方法是利用 supervisor 启动,然后监控 supervisor 的进程
    3. 如果不想用 supervisor 的话,你可自己写一个 daemon 启动然后 fork 子进程出来启动 ss 后台,然后记下 pid
    timothyye
        10
    timothyye  
       2017-08-12 16:55:42 +08:00 via Android
    或者用 lsof 判断 ss 有没有监听端口,有的话表明程序还在运行
    pqee
        11
    pqee  
       2017-08-12 17:58:55 +08:00 via Android
    通过数据库通信……莫非你后端用的不是官方 server ……
    pqee
        12
    pqee  
       2017-08-12 18:01:19 +08:00
    不需要用多用户版,直接用官方的 Python 实现就可以,可以参考: https://github.com/ZhuFaner/shadowsocks-manage-system
    Ehco1996
        13
    Ehco1996  
    OP
       2017-08-12 18:53:55 +08:00
    @blankme
    @timothyye
    谢谢,一会我去试试看

    @pqee
    我用的后端还是破娃的最后一次更新的版本,
    接口用的是 sspanelv2

    也没找到开发的文档,不知道怎么拓展,

    你写得管理系统很棒哎! 不过不会 php,没找到你是怎么检测的
    pqee
        14
    pqee  
       2017-08-12 20:42:09 +08:00 via Android
    @Ehco1996 是直接跟 ssserver 进程进行 udp 数据交换,每次发数据都会收到返回,判断返回就知道是否存活了。
    smileawei
        16
    smileawei  
       2017-08-12 21:40:08 +08:00
    可以开个固定端口。然后监控那个端口在不在 netstat -ntpl |grep 443 |wc -l
    coderfox
        17
    coderfox  
       2017-08-12 22:00:58 +08:00 via Android   ❤️ 1
    你读一下 fsgmhoward 的 mu 的代码,这个版本会向服务器主动推送心跳包表达节点所在服务器状态的。
    fzinfz
        18
    fzinfz  
       2017-08-12 22:13:29 +08:00   ❤️ 1
    又发现一神器: https://github.com/sorz/ssmanager
    NoAnyLove
        19
    NoAnyLove  
       2017-08-13 12:41:29 +08:00
    我有点懵逼啊,ss 不是预留了一个 manager 接口吗? Python 版和 libev 版都支持的,一般默认采用 unix socket 进行通讯,发送 ping 命令就能得到统计数据。这难道不就是个现成的非常好用的心跳检查吗?直接判断进程名,不怕同名(虽然不太可能)或者服务端卡死了吗?虽然检查进程名不是不可以,不过总感觉有点不专业啊。
    Ehco1996
        20
    Ehco1996  
    OP
       2017-08-13 19:22:17 +08:00
    @NoAnyLove
    @fzinfz

    那个 manager 接口很好用,但是如果想要用这个 api 必须再 manager mode 下才能进行操作,

    而我的后端是运行在 mysql manyuser 下的, 接口用的 sspanelv2

    看起来貌似也只能先用判断进程名的方法了。

    再次感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2725 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:15 · PVG 23:15 · LAX 07:15 · JFK 10:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.