在Linux内核中从sk_buff和inode获取PID

e7arh2l6  于 2022-11-02  发布在  Linux
关注(0)|答案(2)|浏览(228)

在Linux内核中,我们在网络堆栈中有一个sk_buff结构,我们从该结构中获取inode,并从该inode中获取创建该inode的进程的pid。sk_buff中有一个pid字段,但它总是被设置为0。
有没有办法从内核内部知道inode的pid?

x7yiwoj4

x7yiwoj41#

您可以使用以下命令从skb读取PID

skb-〉sk-〉套接字-〉文件-〉f_所有者-〉pid

对于某些较早的内核版本,可以将PID读作

skb-〉sk-〉套接字-〉文件-〉f_所有者

rsaldnfx

rsaldnfx2#

int pid = current->tgid;

当在内核中进行网络系统调用时,类似于sendto,它将携带此tgid,即调用者的pid。
但它并不总是有正确的值,如果它是一个重新传输,它是不正确的,你需要一些机制来记录最早调用的tgid。
祝你好运

相关问题