返回信息流rt,用labpcap库抓到一个包之后,怎么知道这个包是由哪个进程发出的呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #98779同步于 2019/4/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
怎么获得labpcap抓取的包是由哪个进程发出的?
cc19931002
2019/4/3镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
源/目的 IP 源目的端口 协议 总会有每个进程自己的特征
【 在 cc19931002 的大作中提到: 】
: 我往外发请求,端口号随机分配的,而且可能变化的
举个例子说下可能直观点,现在有两个进程A,B,都访问了百度的首页,那么我能抓到两个http包,问题就是我如何知道两个包分别是哪个进程发送的
【 在 FromMars 的大作中提到: 】
: 源/目的 IP 源目的端口 协议 总会有每个进程自己的特征
这本地的两个进程能同时用同一个端口连接百度?
【 在 cc19931002 的大作中提到: 】
: 举个例子说下可能直观点,现在有两个进程A,B,都访问了百度的首页,那么我能抓到两个http包,问题就是我如何知道两个包分别是哪个进程发送的
不能,他们用的连百度用的端口是发送请求的时候随机分配的,所以你不知道哪个进程用的哪个端口,所以即便你拿到端口也并不知道是哪个程序
【 在 FromMars 的大作中提到: 】
: 这本地的两个进程能同时用同一个端口连接百度?
netstat -o 显示的是实时进程占用端口情况
【 在 cc19931002 的大作中提到: 】
: 不能,他们用的连百度用的端口是发送请求的时候随机分配的,所以你不知道哪个进程用的哪个端口,所以即便你拿到端口也并不知道是哪个程序
如果是 Linux,那么先从 /proc/net/tcp 读取连接状态,根据端口号找到对应 TCP 连接的 socket 文件的 inode,然后遍历 /proc 目录中的 fd 目录,用 stat 系统调用找出相应的 socket 文件,这样就知道了进程对应的 PID 和 proc 目录,读取 /proc/[PID]/cmdline 就可以知道是哪个程序了。其实 netstat 和 lsof 这种都是这个原理。这样做有一个小问题,就是在遍历 proc 目录的时候进程已经结束了
对,你这个思路我是有考虑过,但是总感觉是一个兜底方案。实际这么操作起来在流量比较大的时候容易出错,你觉得呢?
【 在 FromMars 的大作中提到: 】
: netstat -o 显示的是实时进程占用端口情况