Linux:在端口0上绑定时会发生什么

时间:2019-05-01 14:21:05

标签: linux unix networking

当我尝试在端口0(Linux 5.0)上bind(2)时会发生什么?

使用BSD nc:nc -l 0可以正常工作,并对其进行分级显示:

bind(3, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
listen(3, 1)                            = 0
accept4(3, 

但是尝试连接:

$ nc 127.1 0
nc: port number too small: 0

这里会发生什么?

1 个答案:

答案 0 :(得分:6)

当试图绑定端口0时,实际上选择了一个随机端口。

尝试一下:

nc -l 0
ss -4 -t -l # List active listening TCP sockets on IPv4
 # ctrl+c nc to close its socket
ss -4 -t -l # And check the difference

我给:

State   Recv-Q  Send-Q    Local Address:Port       Peer Address:Port  
LISTEN  0       0             127.0.0.1:58505           0.0.0.0:*    
LISTEN  0       0             127.0.0.1:46253           0.0.0.0:*    
LISTEN  0       0         192.168.122.1:domain          0.0.0.0:*    
LISTEN  0       0               0.0.0.0:41853           0.0.0.0:*
State   Recv-Q  Send-Q    Local Address:Port       Peer Address:Port  
LISTEN  0       0             127.0.0.1:58505           0.0.0.0:*    
LISTEN  0       0             127.0.0.1:46253           0.0.0.0:*    
LISTEN  0       0         192.168.122.1:domain          0.0.0.0:* 

因此我的nc绑定到端口41853,是随机选择的