Децентрализованная сеть в Python - Как?

Я хочу написать Python script, который будет проверять локальную сеть пользователей для других экземпляров script в настоящее время.

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

$ python question.py
Thanks for running ThisApp!  You are 192.168.1.101.
  Found 192.168.1.102 running this application.
  Found 192.168.1.104 running this application.

Какие библиотеки/проекты существуют, чтобы помочь вам в этом?

Ответы

Ответ 1

Один из способов сделать это - это приложение, которое задает вопрос, - это передача UDP-пакетов, и ваше приложение получает их с разных узлов, а затем отображает их. Twisted Networking Framework предоставляет возможности для выполнения такой работы. Документация также содержит некоторые простые примеры.

Ответ 2

Ну, вы могли бы написать что-то, используя модуль сокета. У вас должно быть две программы, но сервер на локальном компьютере пользователя, а затем клиентская программа, которая будет взаимодействовать с сервером. Сервер также будет использовать модуль выбора для прослушивания нескольких подключений. Тогда у вас будет клиентская программа, которая отправляет что-то на сервер при запуске или когда захочет. Затем сервер может распечатать, какие соединения он поддерживает, включая такие данные, как IP-адрес.

Это очень хорошо документировано по этой ссылке, больше, чем вам нужно, но это объяснит вам, как и со мной. http://ilab.cs.byu.edu/python/

Ответ 4

  • У вас может быть серверное решение: центральный сервер, на котором клиенты регистрируются, и запрос на регистрацию других клиентов. Здесь может помочь серверная инфраструктура, такая как Twisted.
  • В настройках одноранговой сети можно использовать технологии push, такие как широковещательные передачи UDP, где каждый клиент постоянно выпускает пакет из нескольких битов в сети, чтобы другие могли получать. Базовые модули, такие как socket, помогут с этим.
  • В качестве альтернативы вы можете использовать подход pull, где интересному сверстнику нужно будет активно искать других. Это, пожалуй, наименее прямолинейно. Во-первых, вам нужно отсканировать сеть, то есть выяснить, какие IP-адреса принадлежат локальной сети и пройти через них. Затем вам нужно будет связаться с каждым IP по очереди. Если ваша программа открывает TCP-порт, вы можете попробовать подключиться к этому и узнать, работает ли ваша программа. Если вы хотите, чтобы ваша программа полностью игнорировала эти запросы, вам может потребоваться открыть ssh-соединение с удаленным IP-адресом и просмотреть список процессов для вашей программы. Все это может включать в себя различные модули и библиотеки. Возможно, вам захочется взглянуть на execnet.