Linux: что происходит при привязке к порту 0 - PullRequest
3 голосов
/ 01 мая 2019

Что происходит, когда я пытаюсь bind(2) на порт 0 (linux 5.0)?

Использование 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 Ответ

6 голосов
/ 01 мая 2019

При попытке привязки к порту 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, выбран случайным образом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...