Django host: runserver не показывает ошибку при запуске с ip, который не является ip хоста - PullRequest
0 голосов
/ 30 апреля 2020

Ниже приведен IP-адрес моего хоста, на котором запущен django сервер

~ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
25: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

Здесь IP-адреса 127.0.0.1 (lo) и 172.17.0.2 (eth0@if26)

Netstat показывает таблица маршрутизации

~ # netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.17.0.1      0.0.0.0         UG        0 0          0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 eth0
~ # 

Я планирую запустить сервер на 172.17.0.2 для удаленного доступа

Но перед этим я хочу протестировать запуск сервера на 172.17.0.0, просто хочу посмотреть что происходит

$ python runserver 172.17.0.0:8888
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

April 30, 2020 - 07:10:35
Django version 3.0.5, using settings 'django_project_test.settings'
Starting development server at http://172.17.0.0:8888/
Quit the server with CONTROL-C.

Итак, сервер запускается

Netstat показывает, что порт слушает

~ # netstat -tlpn | grep 'LISTEN\|Address'
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 172.17.0.0:8888         0.0.0.0:*               LISTEN      -
~ # 

Я пытаюсь пропинговать 172.17.0.0

~ # ping 172.17.0.0
PING 172.17.0.0 (172.17.0.0): 56 data bytes
Stucks here

Также я тестирую wget:

~ # wget "http://172.17.0.0:8888/"
--2020-04-30 07:16:38--  http://172.17.0.0:8888/
Connecting to 172.17.0.0:8888... failed: Network unreachable.

Итак, если сеть недоступна на 172.17.0.0, то как python runserver 172.17.0.0:8888 работает без ошибок.

Потому что, если попытаться runserver на любом IP-адресе, отличном от его собственного IP-адреса, т.е. 172.17.0.2 будет отображаться ошибка

Например: я пытаюсь runserver на 172.17.0.1 или 172.17.0.3 показать ошибку Error: That IP address can't be assigned to.

~/app $ pipenv run python django_project_test/manage.py runserver 172.17.0.1:8888
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

April 30, 2020 - 07:37:10
Django version 3.0.5, using settings 'django_project_test.settings'
Starting development server at http://172.17.0.1:8888/
Quit the server with CONTROL-C.
Error: That IP address can't be assigned to.
~/app $ 

Так почему же 172.17.0.0 не показывает ту же ошибку, т.е. Error: That IP address can't be assigned to.

...