![](/img/trans.png)
[英]How to open and read file from `struct inode *` in Linux kernel
[英]How to find socket port by inode struct in Linux?
我正在编写一个LKM程序来挂钩sys_read
函数,以复用80 TCP端口。 但是我遇到的一个问题是我不知道如何通过inode
结构访问Port。 我的程序有一部分。
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
从结构file
获取socket
结构指针。
然后将其浇铸到tcp_sock
,其中包含一个inet_connection_sock
其含有inet_sock
含有sock
(不要与混淆socket
包含) sock_common
。 这两个端口号最终存储在inet_sock
和sock_common
(嗯,无论如何,这就是它在最新内核版本中的工作方式)。
以可靠的方式利用这些事实将很困难。 所有这些的布局和组织都紧密依赖于内核版本,当然文件描述符实际上代表了一个连接的TCP套接字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.