Calling In Computers IP-адрес - PullRequest
       66

Calling In Computers IP-адрес

0 голосов
/ 30 апреля 2020

Я пытаюсь найти способ, чтобы Python определил IP-адрес моего компьютера и мог использовать руку со странным результатом. Несколько быстрых фактов, я использую Windows 10 с подсистемой Linux (терминальное приложение Ubuntu) и работаю python 3.7.6.

Моя первая попытка была использовать разъем. то есть

import socket
hostname = socket.gethostname() # outputs a string with the hostname 
ip_address = socket.gethostbyname(hostname) # outputs a string with the relevant IP address

Итак, я думал, что это прекрасно работает, пока не попробовал запустить его на другом компьютере и не заметил, что IP-адрес моего компьютера и другого компьютера совпадает. Быстрый просмотр командной строки Windows показал, что мой IPv4-адрес полностью отличается от того, что вызывалось через сокет.

Я не уверен, в чем здесь проблема, и если кто-нибудь знает, я весь слух.

Мой главный вопрос:

Как Я вызываю уникальный IPv4-адрес моего компьютера, используя Python?

РЕДАКТИРОВАТЬ:

Чтобы ответить на вопросы в комментариях:

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

import socket
hostname = socket.gethostname() # outputs a string with the hostname 
ip_address = socket.gethostbyname(hostname) # outputs a string with the relevant IP address

if ip_address == '127.0.1.1':
    print('Working on desktop1:')
    masked_data = 'file/path/of/desktop/1/mask.pkl'
elif ip_address == 'xxx.yyy.zzz.1':
    print('Working on desktop2:')
    masked_data = 'file/path/of/desktop/2/mask.pkl'

Это временно, пока мы не запустим сервер, и я знаю, что это странный обходной путь. ; P

Проблема в том, что ip_address одинаково для обоих компьютеров при использовании сокета. Мне нужно получить уникальный адрес компьютера, на котором я работаю, и заменить IP-адреса в l oop.

1 Ответ

1 голос
/ 01 мая 2020

Вы используете неправильный инструмент для задания.

Используя socket.gethostname(), чтобы получить собственное имя хоста, а затем socket.gethostbyname(), чтобы разрешить это для IP-адреса, сообщает вам, какой IP-адрес у вашей операционной системы. предлагает использовать для обратной связи. Однако это ничего не говорит о том, какие адреса могут использовать системы в других местах сети для связи с вами .

Вместо этого используйте специализированные инструменты.

Считайте как пример библиотеки ifaddr Python , которая создана специально для перечисления локальных сетевых устройств и адресов, связанных с каждым из них.

Аналогично, один из ответов на Как получить имена сетевых интерфейсных карт в Python? предлагает git_nic, которые должны аналогичным образом служить цели.

Кроме того, общего назначения psutil Python библиотека предоставляет для этой цели функцию net_if_addrs().

Еще один сторонний модуль для этой цели - netifaces.

...