Привязка сокета Python к любому IP?

#python #sockets

#python #сокеты

Вопрос:

У меня есть небольшой односторонний отправитель сообщений, который работает, пока я указываю IP для подключения в коде, однако у меня возникают проблемы с разрешением сокету принимать соединения с любого IP. Вот строка, в которой проблема.

 mySocket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
mySocket.bind ( ( '', 2727 ) )
  

'' Предназначен для локального хоста, и он работает, если я вручную ввожу IP, например '192.168.1.106' , однако, как я могу оставить его открытым для всех? Или я использую неправильный тип соединения для этого?

Ответ №1:

Если вы хотите привязаться ко всем доступным адресам IPv4, укажите 0.0.0.0 в качестве своего IP-адреса. Если вы находитесь за маршрутизатором и хотите, чтобы ваш сокет был доступен через Интернет, а не только в вашей локальной сети, вам необходимо настроить правило переадресации портов, чтобы пользователи за пределами вашей локальной сети могли получить доступ к сервису.

Смотрите следующий вопрос ServerFault для получения дополнительной информации о 0.0.0.0 : https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1

Комментарии:

1. Возможно ли привязать к полностью настраиваемым IP-адресам, таким как 152.64.87.9?

2. @CMCDragonkai Только в том случае, если ваша система имеет интерфейс с этим адресом.

3. Поэтому мне нужно было бы создать эти интерфейсы до привязки к ним. И создание виртуальных интерфейсов было бы обратным циклом, верно?

4. Это будет только IPv4? Как насчет привязки ко всем доступным адресам IPv6?

Ответ №2:

Привязка к '' имеет тот же эффект, что и к '0.0.0.0' , что облегчает переход на IPv6.

В зависимости от ОС, при открытии socket.AF_INET6 сокета прослушиваются IPv4 и IPv6.

Комментарии:

1. Отчет об ошибке Python, чтобы сделать документы более четкими по этому поводу: bugs.python.org/issue33921

2. Согласно документам , '' это не совместимо с IPv6: такое поведение несовместимо с IPv6, поэтому вы можете захотеть избежать этого, если собираетесь поддерживать IPv6 в своих программах на Python.

Ответ №3:

Привязка к 0.0.0.0 позволит ему принимать соединения с любого адреса IPv4, который может направлять к нему.