当我尝试在端口0(linux 5.0)上绑定(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时,实际上选择了一个随机端口.
试试这个:
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,随机选择
标签:linux,networking,unix
来源: https://codeday.me/bug/20190823/1696883.html