Прослушивание сокета Python на порту 80, не получающем данные

У меня есть эта программа, которая на данный момент должна только слушать порт 80 и получать данные либо из подключений браузера, либо из других скриптов Python. этот код:

import socket               # Import socket module

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname() # Get local machine name
port = 80              # Reserve a port for your service.
s.bind(("192.168.252.7", port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   print c.recv(1024)
   c.close()                # Close the connection

который все копируется с точки обучения. Этот код получает данные, когда для порта установлено значение, отличное от 80 (например, 8080, 12345), но когда он равен 80, он только принимает клиента, но, похоже, не получает никаких данных, несмотря на то, что данные успешно отправлены откуда-то еще... ПОЖАЛУЙСТА, ПОМОГИТЕ ПАРНИМ

1 ответ

Порт 80 и все порты <1024 являются привилегированными портами, ваша программа должна запускаться с правами root для правильной привязки к этим портам. Я предполагаю, что вы работаете в Windows, так как на любом вызове Unix s.bind(("127.0.0.1", 80)) результаты в PermissionError: [Errno 13] Permission denied исключение сразу.

Я не уверен, как Windows работает с привилегированными портами, но быстрый поиск в Google указывает на брандмауэр Windows, портящий вашу программу.

Правильные веб-серверы, такие как Nginx или Apache, запускаются с правами суперпользователя, связываются с портом 80 и сразу переходят к менее привилегированному пользователю, поскольку запуск под пользователем root опасен.

PS: пара предложений:

Вы можете пропустить socket.gethostname(), Используйте ip 127.0.0.1 если вы хотите, чтобы ваша программа была доступна только с вашего компьютера, или используйте ip 0.0.0.0 если вы хотите быть доступным с любого компьютера в вашей сети.

Вы должны попытаться переключиться на Python 3 как можно скорее, так как Python 2 в основном мертв. Не привыкайте к синтаксису двоих, вы переучиваете его через пару лет.

Другие вопросы по тегам