簡體   English   中英

如何在Linux中通過inode結構找到套接字端口?

[英]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_socksock_common (嗯,無論如何,這就是它在最新內核版本中的工作方式)。

以可靠的方式利用這些事實將很困難。 所有這些的布局和組織都緊密依賴於內核版本,當然文件描述符實際上代表了一個連接的TCP套接字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM