当我尝试在端口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
这里会发生什么?
答案 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,是随机选择的