如何findTCP套接字的inode?

如何将/proc/net/tcp的“inode”列中的值绑定到/proc/<pid>/fd/

我的印象是,TCP中的inode列有一个十进制表示的socket inode,但似乎并不是这样。

例如,如果我运行telnet localhost 80 ,我会看到以下内容(telnet是pid 9021)。

/proc/net/tcp包含

 sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 23: 0100007F:CE2A 0100007F:0050 01 00000000:00000000 00:00000000 00000000 1000 0 361556 1 00000000 20 0 0 10 -1 

这使得我认为连接到127.0.0.1:80的套接字的inode是361556.但是如果我运行ls --inode -alh /proc/9021/fd ,我会看到

 349886 lrwx------ 1 me me 64 Dec 26 10:51 3 -> socket:[361556] 

inode是349886,它与tcp表的inode列中的值不同:361556.但链接目标似乎有正确的名称。 同样, stat /proc/9021/3显示:

 File: '/proc/9021/fd/3' -> 'socket:[361556]' Size: 64 Blocks: 0 IO Block: 1024 symbolic link Device: 3h/3d Inode: 349886 Links: 1 

tcp表的inode列中的数字是多less? 为什么它不与lsstat所报告的inode stat呢?

(我正在运行Ubuntu 14.10,如果这很重要)

lsstat显示的inode是指向与套接字关联的inode的符号链接。 运行ls -iLalh显示正确的inode。 同样为stat -L

Herpa derp derp。 我只是在编写问题的时候才明白这一点。 ; _;

Inode id代表每个fs mount(proc,sys,ntfs,ext …)的文件id,所以你可能理解你在这里处理两个不同的fs:procfs和一些伪套接字fs。

/ proc / pid / fd /目录下的文件是在procfs fs中有inode表示的软链接。 这些链接“指向”不同的“fs” – socket fs。

stat -Lls -iLalh做的是给你链接指向的文件的inode。 您可以使用readlink /proc/#pid/fd/#fdnum显式执行此readlink /proc/#pid/fd/#fdnum