V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dwzhao
V2EX  ›  程序员

服务器中某个进程不断发起 http 请求,使用的是短连接,怎么查找该进程

  •  
  •   dwzhao · 2018-10-26 16:07:25 +08:00 · 6935 次点击
    这是一个创建于 2214 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,发现一台服务器一直在进行 http 调用请求,短连接。
    请求数目和时间都不规律,大概半小时一次,如何找到这个进程。

    现在遇到的问题:
    使用 top 等方法排查过了,没发现什么特别的进程
    使用 tcpdump 看到了请求的端口,但是很快就 close 了,定位不到 pid
    头大。。。

    附属条件:
    对面的接口不可更改为长连接,所以没法延长连接时间。。。
    23 条回复    2018-11-20 18:09:21 +08:00
    tempdban
        1
    tempdban  
       2018-10-26 16:15:56 +08:00 via Android
    netstat -anp
    就算是有 pid 退出这么快你有啥办法
    hawhaw
        2
    hawhaw  
       2018-10-26 16:19:33 +08:00
    想法一:用 watch 监测 netstat 或者 ss 命令(都有参数支持显示 pid )的输出
    想法二:通过 audit 来监控相关系统调用,打印出相关 pid 信息
    hasdream
        3
    hasdream  
       2018-10-26 16:23:33 +08:00
    先抓包, 看目标主机及端口, 然后用 ss dst 主机 dport = :端口 -n 获取本地端口 然后用 lsof -i:本地端口 最好写哥脚本每秒去抓取 然后打印结果
    dwzhao
        4
    dwzhao  
    OP
       2018-10-26 16:31:03 +08:00
    使用 tcpdump 抓包,抓到包了,找到端口了,但是很快就丢了,找不到对应进程 pid,这个真的很烦人,又不能改接口让连接长一些。。。
    yansheng1003
        5
    yansheng1003  
       2018-10-26 16:35:43 +08:00 via Android
    抓包查端口,然后去服务器根据端口查进程
    lihongjie0209
        6
    lihongjie0209  
       2018-10-26 16:40:11 +08:00
    抓包
    jason56
        7
    jason56  
       2018-10-26 16:42:20 +08:00
    按你描述的问题,似乎是针对 memcached 的 UDP 11211 端口 放大攻击.
    leconio
        8
    leconio  
       2018-10-26 16:42:46 +08:00 via Android
    >
    hcymk2
        9
    hcymk2  
       2018-10-26 16:51:26 +08:00
    http://kiminewt.github.io/pyshark/

    通过编程的方式。
    libook
        10
    libook  
       2018-10-26 18:29:07 +08:00
    HTTP 底层用的是 TCP 协议,如果能控制 HTTP 的接收方,可以分析 TCP 数据包拿到对方的 IP 和端口,在从发送方机器上用端口号找到对应进程。
    libook
        11
    libook  
       2018-10-26 18:32:08 +08:00
    在接受方上做一个 TCP 层的服务器,因为 HTTP 是封装在 TCP 包里的,可以一起拿到。
    Leigg
        12
    Leigg  
       2018-10-26 21:17:04 +08:00 via iPhone
    写脚本每几秒获取 netstat 输出并持久化到文件,一个小时后来看文件。
    LGA1150
        13
    LGA1150  
       2018-10-26 21:21:23 +08:00
    iptables TARPIT
    TARPIT 会一直保持 TCP 连接
    microxiaoxiao
        14
    microxiaoxiao  
       2018-10-26 22:50:58 +08:00
    top 只能看到一小部分进程, while ps 保存, 将请求时间段附近的所有进程依次执行,基本能重现这个问题。
    hu5ky
        15
    hu5ky  
       2018-10-26 22:53:52 +08:00
    wireshark 拦截看看?
    alcarl
        16
    alcarl  
       2018-10-26 23:11:10 +08:00 via Android
    抓包看他访问的那,加一条静态路由给他指到一个奇怪的地方,应该就可以在等 synsend 的时候慢慢查了,用 netstat -anp,写个 shell while 一秒输出一次
    realpg
        17
    realpg  
       2018-10-27 01:19:53 +08:00
    写个极短间隔抓 PID 和程序路径的程序保存日志
    写个极短间隔抓带 PID 的 TCP 连接的程序

    挂 30 秒 总有对的上的记录
    scriptB0y
        18
    scriptB0y  
       2018-10-27 01:28:09 +08:00
    你这边可以将 HTTP 服务可疑延长到 30 秒吗?如果客户端没设置超时的话,这样应该可以留住那边的客户端进程的。
    omph
        19
    omph  
       2018-10-27 08:55:52 +08:00
    甩你一个命令
    lsof -r 1 -i TCP:80
    winglight2016
        20
    winglight2016  
       2018-10-27 10:25:47 +08:00
    这是被当成肉鸡 ddos 了吧,我之前的服务器也是同样中招,只能 rebuild 了
    dwzhao
        21
    dwzhao  
    OP
       2018-10-29 17:46:18 +08:00
    最后回复:
    对应的进程找到,并且已经处理了,感谢大家的建议。
    简单总结一下:
    1、用极短的时间抓 pid 这个思路也不太行,应为极短的时间很难定义,各种参数 -c 1 都不行
    2、用程序的方式也不行,程序也是调用系统命令,系统不行,程序也不行
    最后的方法:
    简单的说就是“撞大运”,不停的抓 pid (通过 tcpdump,netstat、lsof 都行),抓一天,两天这样。总会在连接刚开启的时候被发现一些业务中不应该出现的命令或者进程,然后再分析来源,最终定位到问题进程,所以我的感觉是长时间多次抓包,虽然概率低,但终究是能找到的,需要耐心了~

    感谢各位~
    DevilHunterXX
        22
    DevilHunterXX  
       2018-11-02 16:35:17 +08:00
    @dwzhao
    不停的抓 pid 是通过脚本不断循坏的抓吗?
    我这边也是有不定时的短连接请求,抓不到 pid,郁闷死了。
    dwzhao
        23
    dwzhao  
    OP
       2018-11-20 18:09:21 +08:00
    @DevilHunterXX,是的,写个脚本不停的抓,大不了抓几天,一定会碰到的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5510 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:36 · PVG 15:36 · LAX 23:36 · JFK 02:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.