Python-сокет прослушивает порт 80, не получая данные - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть эта программа, которая на данный момент должна прослушивать только порт 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 Ответ

0 голосов
/ 25 ноября 2018

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

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

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

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

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

Вы должны попытаться переключиться на Python3 КАК МОЖНО СКОРЕЕ, так как Python 2 на этом этапе практически мертв.Не привыкайте к синтаксису двоих, вы переучиваете его через пару лет.

...