我目前正在编写一个我需要编写linux防火墙扩展的作业。
一点背景:
我的内核模块将维护一个“规则”列表。规则只是一个端口号,带有可执行文件的路径。规则表示允许程序在相应端口上建立传出连接。
如果端口X有规则且程序A不是其中之一,则只应终止程序A在端口X上的连接。因此,如果端口没有设置规则,任何人都可以在端口上进行通信。
我知道如何分析TCP数据包标头并提取源端口。我的问题是,如何判断哪个程序创建了这个数据包?
以下是我的讲师给我的一些示例代码,虽然我不确定它有何帮助。我删除了与清晰度无关的部分。
int init_module(void)
{
struct path path;
pid_t mod_pid;
struct dentry *procDentry;
struct dentry *parent;
char cmdlineFile[BUFFERSIZE];
int res;
mod_pid = current->pid;
snprintf (cmdlineFile, BUFFERSIZE, "/proc/%d/exe", mod_pid);
res = kern_path (cmdlineFile, LOOKUP_FOLLOW, &path);
if (res) {
return -EFAULT;
}
procDentry = path.dentry;
parent = procDentry->d_parent;
printk (KERN_INFO "The name is %s\n", procDentry->d_name.name);
printk (KERN_INFO "The name of the parent is %s\n", parent->d_name.name);
path_put(&path);
return 0;
}