Почему мой flask сервер не связывает мой IP-адрес? - PullRequest
0 голосов
/ 28 февраля 2020

Я попытался запустить с localhost, 0.0.0.0 и с моего адреса ipv4. Когда я использовал localhost, я не мог получить доступ к своему серверу с другого компьютера. Когда я использовал 0.0.0.0, у меня была та же проблема, и когда я использовал свой адрес publi c ipv4, он выдавал ошибку.

Мой код:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
        return "Hello World!"

if __name__ == "__main__":
    app.run(host="[my ip address]")

моя ошибка:

 * Serving Flask app "hello" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "hello.py", line 14, in <module>
    app.run(host="[my ip address]")
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/flask/app.py", line 990, in run
    run_simple(host, port, self, **options)
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 1052, in run_simple
    inner()
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 1005, in inner
    fd=fd,
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 848, in make_server
    host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 740, in __init__
    HTTPServer.__init__(self, server_address, handler)
  File "/usr/lib/python3.6/socketserver.py", line 456, in __init__
    self.server_bind()
  File "/usr/lib/python3.6/http/server.py", line 136, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "/usr/lib/python3.6/socketserver.py", line 470, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 99] Cannot assign requested address

Чтобы найти свой IP-адрес, я использовал команду bash curl ifconfig.me.

моя ОС:

NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"

Это проблема с Ubuntu, или с моим кодом?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Лучшим способом решения этой проблемы было бы следующее:

app.run(host='0.0.0.0', port='8000'), где порт может быть изменен для удобства.

Когда вы используете app.run без каких-либо параметров, по умолчанию - хост 127.0.0.1, который привязан к вашей локальной системе. В этом состоянии ваше приложение не может быть подключено через любую другую систему через LAN или WAN (publi c address)

Когда вы запускаете его с использованием 0.0.0.0, оно доступно как через LAN, так и через WAN. Чтобы получить свой LAN-адрес в Ubuntu, вы можете просто запустить hostname -I, а для WAN-адреса, как уже упоминалось, вы можете использовать curl ifconfig.me. Таким образом, вы можете получить доступ к своему приложению из другой системы в той же локальной сети, используя LAN_IP:PORT

Теперь большинство провайдеров не предоставляют статический c IP, и вы не можете выставить свой WAN IP на rnet. Однако, когда вы запускаете приложение с помощью 0.0.0.0 на VPS, вы можете напрямую использовать WAN IP-адрес сервера и подключаться.

Для справки, можно найти разницу между 127.0.0.1 и 0.0.0.1 здесь

0 голосов
/ 28 февраля 2020

"curl ifconfig.me" предоставит вам ваш * * * * * * * *. Иногда он назначается маршрутизатору, а в некоторых случаях LAN использует NAT. Это означает, что ваш компьютер может иметь частный IP-адрес. Проверяли ли вы адреса, назначенные вашим интерфейсам, командой ifconfig?

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