Как получить имя хоста Crossbar.io?

Я пишу чат с помощью crossbar.io. У нас есть несколько узлов чата. Мне нужно записать статистику о каждом из узлов, поэтому мне нужно получить имя хоста, на котором запущен конкретный узел.

Можно ли получить имя хоста из экземпляра компонента?

Я использую последнюю версию crossbar/autobahn и python 3.4.

Ожидайте получить - 127.0.0.1, если я использую локальную среду.


person Oleksandr Yarushevskyi    schedule 26.04.2016    source источник


Ответы (2)


Просто используйте библиотеку сокетов:

import socket

hostname = socket.gethostname()
person Pierre Barre    schedule 26.04.2016
comment
@AleksandrYarushevsky Что вы подразумеваете под неправильным именем хоста? - person Pierre Barre; 26.04.2016
comment
Теперь я запускаю на локальном хосте и получаю 172.17.0.1 вместо 127.0.0.1. - person Oleksandr Yarushevskyi; 26.04.2016

Если ваша машина имеет разрешимое имя хоста, попробуйте:

import socket socket.gethostbyname(socket.getfqdn())

Обновить. Это более полное решение, должно нормально работать со всеми ОС:

import socket
print [l for l in ([ip for ip in socket.gethostbyname_ex( socket.gethostname())[2] if not ip.startswith('127.')][:1], [[(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close() ) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]]) if l][0][0]

person pualien    schedule 26.04.2016
comment
Тот же результат получил 172.17.0.1 вместо 127.0.0.1 - person Oleksandr Yarushevskyi; 27.04.2016