linux 连接捕获

A进程总是连接B进程listen的1158端口,而且连接到断开的持续时间很短,由于知道1158端口,所以,B进程很容易被找到,现在不知道A进程是哪个,只知道是本机的某进程来连接1158端口的。

如何找到A进程呢?

对于持续时间不太短的连接,我们通常可以使用ss -anp来查看,但是对于持续时间足够短的连接,ss是不太容易抓到的。毕竟,当机器上进程数多的时候,每个连接都扫一遍所有的进程下的fd,会明显感觉很慢的。

所以,一种办法是:

不使用ss的-p选项,只使用ss -an,从结果中拿到感兴趣的端口后,再去/proc/*/fd/* 中找对应的fd,但是,进程的fd中对应的socket的id并不出现在ss的结果中,无法对应起来。

另一种办法:

直接去 /proc/net/tcp 中查找感兴趣的连接,基本逻辑如下:

其中的 :0486 是我们感兴趣的端口号的16进制表示, 23774779 是我们不感兴趣的连接

 

其实,这样也未必能抓到感兴趣的连接,毕竟连接消失的太快。

比较靠谱的办法是:

让B进程休眠,这样,A进程进入的连接不能被及时处理,就不会立即断开,然后使用ss -anp就可以了,除非A进程设置了非常短的超时,那么,可能我们就需要研究一下systemtap了

 

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据