Если у меня Twisted сервер, как я могу найти его publi c IP-адрес?
Возьмите этот тривиальный пример эхо-сервера:
from twisted.internet import protocol, reactor, endpoints
class Echo(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)
class EchoFactory(protocol.Factory):
def buildProtocol(self, addr):
return Echo()
server_endpoint = endpoints.serverFromString(reactor, "tcp:1234")
listening_port_deferred = server_endpoint.listen(EchoFactory())
reactor.run()
Я чего-то ожидал например, server_endpoint.getHost()
, но я не вижу, что TCP4ServerEndpoint
предлагает что-то полезное.
Добавив следующие строки перед reactor.run()
, мы можем увидеть, что сервер прослушивает все интерфейсы (0.0.0.0):
def print_host(listening_port):
print("listening_port.getHost():", listening_port.getHost())
listening_port_deferred.addCallback(print_host)
Выводит listening_port.getHost(): IPv4Address(type='TCP', host='0.0.0.0', port=1234)
. Но это не помогает нам с IP-адресом сетевого интерфейса сервера.
Мы можем получить IP-адрес клиента, добавив следующую строку в качестве первой строки buildProtocol():
print("Client's address:", addr.host)
Но это дает нам только адрес клиента.
Как мне получить IP-адрес сервера?