gpt4 book ai didi

c - 如何在 Linux 中通过 inode 结构查找套接字端口?

转载 作者:太空宇宙 更新时间:2023-11-04 10:54:12 25 4
gpt4 key购买 nike

我正在编写一个 LKM 程序来 Hook sys_read 函数以重用 80 TCP 端口。但是我遇到一个问题是我不知道如何通过 inode 结构访问端口。有一部分是我的程序。

Linux.2.6.3.38

asmlinkage ssize_t new_read(unsigned int fd, void *buf, size_t count){
//printk("PID %d called sys_read !\n",current->pid);
char kbuf[MAX_BUF];
ssize_t ret;
struct file *file;
ret=orig_read(fd, buf, count);
memset(kbuf, 0,MAX_BUF);
memcpy(kbuf, buf, ret);
printk("kbuf:%s\n",kbuf);
if( memcmp(kbuf, passwd, strlen(passwd)) == 0 )
{
file = fget(fd);
if(file->f_dentry->d_inode->???? == PORT)
printk("get http message\n");
fput(file);
}
}

感谢您的回答。

最佳答案

您可以使用导出函数sock_from_file 从struct file 中获取socket 结构指针。

然后它被转换成一个tcp_sock,其中包含一个inet_connection_sock,其中包含一个inet_sock,其中包含一个sock(不要与包含 sock_commonsocket 混淆)。这两个端口号最终存储在 inet_socksock_common 中(好吧,这就是它在最新内核版本中的工作方式)。

以可靠的方式利用这些事实是很困难的。所有这些的布局和组织都与内核版本密切相关,当然文件描述符实际上代表一个连接的 TCP 套接字。

关于c - 如何在 Linux 中通过 inode 结构查找套接字端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29506505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com