如何找到TCP套接字的inode?

时间:2014-12-26 16:25:11

标签: linux sockets tcp proc

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

我的印象是TCP中的inode列具有套接字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列中的数字是多少?为什么它不与lsstat报告的inode对齐?

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

2 个答案:

答案 0 :(得分:5)

lsstat显示的inode用于指向与套接字关联的inode的符号链接。运行ls -iLalh会显示正确的inode。同上stat -L

Herpa derp derp。当我撰写我的问题时,我才想到这一点。 ; _;

答案 1 :(得分:1)

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

/ proc / pid / fd /目录下的文件是软链接,在procfs fs中有inode表示。 这些链接指向&#34;不同的&#34; fs&#34; - socket fs。

stat -Lls -iLalh的作用是为您提供链接指向的文件的inode。 您也可以使用readlink /proc/#pid/fd/#fdnum

明确地执行此操作