将 AF_UNIX 绑定到任何现有文件?

将 AF_UNIX 绑定到任何现有文件?

我们可以将 Unix 域套接字绑定到任何随机的现有文件吗?如果不是,您如何识别套接字使用的文件?

答案1

我们可以将 Unix 域套接字绑定到任意随机现有文件吗

不可以。该文件不应该存在,否则bind(2)将会失败并显示EADDRINUSE.bind(2)将使用 中给定的路径创建一个新文件.sun_path

如果不是,您如何识别套接字使用的文件?

lsof可能有帮助。最多一个观点

或者ss

$ nc -Ul foo &
[3] 9268
$ ls -i ./foo
1179674 ./foo
$ ss -elx | grep -w 1179674
u_str LISTEN  0  5 foo 618789 * 0 <-> ino:1179674 dev:0/2072 peers:

ss上面的输出被手动修剪掉了空格)

-l选项将直接ss选择仅侦听套接字,该-x选项仅选择 Unix 套接字,以及-e打印扩展信息的选项,作为我用来匹配文件的索引节点号。

两者都ss只会lsof看到当前的套接字网络命名空间;但是来自不同网络命名空间的两个unix套接字不能绑定到同一个文件。

您可能还想检查设备编号是否也匹配;但你应该小心行事,因为sock_diag(7)(由ss) 将以内核 ( ) 内部使用的格式返回它MMMm mmmm,但 buggyss会将其视为mmmM MMmm用户态格式;上例中的设备号不是0/2072, 而是8/24( /dev/sdb8) ;-)

相关内容