Приложение, использующее протокол MQTT от Azure SDK, не работает за корпоративным прокси - PullRequest
1 голос
/ 20 мая 2019

Я новичок в этом вопросе, и я не знаю, почему мое приложение просто работает и работает в открытой сети, когда за прокси-сервером у меня возникает ошибка возврата. Я использую raspberry zero, raspbian Stretch, azure-iot-sdk-python и прокси squid

Я уже пробую это:

Прокси-сервер разрешает HTTPS-соединение, и у него есть все PORT, доступные без каких-либо ограничений и адрес *****. azure-devices.net помещается в белый список в

$ nano / etc / squid / whitelist

Кроме того, я установил прокси в операционной системе, raspbian Stretch, в

$ nano / etc / environment

следующие конфигурации:

export http_proxy = "http://192.168.2.254:3128/"

export https_proxy = "https://192.168.2.254:3128/"

export no_proxy = "localhost, 127.0.0.1"

А также в

$ nano ~ / .bashrc

export http_proxy = http: //192.168.2.254:3128

export https_proxy = https: //192.168.2.254:3128

export no_proxy = localhost, 127.0.0.1

И

$ nano /etc/apt/apt.conf.d/90proxy

Получить :: http :: Proxy "http://192.168.2.254:3128/";

Acquire :: https :: Proxy "https://192.168.2.254:3128/";

from iothub_client import IoTHubClient, IoTHubTransportProvider, IoTHubMessage
import time

CONNECTION_STRING = "HostName=******.azure-devices.net;DeviceId=***;SharedAccessKey=*********"
PROTOCOL = IoTHubTransportProvider.MQTT


def send_confirmation_callback(message, result, user_context):
    print("Confirmation received for message with result = %s" % (result))


if __name__ == '__main__':
    client = IoTHubClient(CONNECTION_STRING, PROTOCOL)
    message = IoTHubMessage("test message")
    client.send_event_async(message, send_confirmation_callback, None)
    print("Message transmitted to IoT Hub")

    while True:
        time.sleep(1)

Error: File: /usr/sdk/src/c/c-utility/adapters/socketio_berkeley.c Func: lookup_address_and_initiate_socket_connection Line: 282 Failure: getaddrinfo failure -3.
Error: File: /usr/sdk/src/c/c-utility/adapters/socketio_berkeley.c Func: socketio_open Line: 765 lookup_address_and_connect_socket failed
Error: File: /usr/sdk/src/c/c-utility/adapters/tlsio_openssl.c Func: on_underlying_io_open_complete Line: 760 Invalid tlsio_state. Expected state is TLSIO_STATE_OPENING_UNDERLYING_IO.
Error: File: /usr/sdk/src/c/c-utility/adapters/tlsio_openssl.c Func: tlsio_openssl_open Line: 1258 Failed opening the underlying I / O.
Error: File: /usr/sdk/src/c/umqtt/src/mqtt_client.c Func: mqtt_client_connect Line: 1000 Error: io_open failed
Error: File: /usr/sdk/src/c/iothub_client/src/iothubtransport_mqtt_common.c Func: SendMqttConnectMsg Line: 2122 failure connecting

1 Ответ

0 голосов
/ 21 мая 2019

Нельзя использовать HTTP-прокси с (собственным) MQTT, это два совершенно разных протокола.

Если вы можете использовать MQTT поверх WebSockets, тогда вы сможете использовать HTTP-прокси, поскольку WebSockets изначально создаются путем обновления HTTP-соединения.

Если в вашей сети есть прокси-сервер SOCKS, вы можете использовать его с собственным MQTT. Следующий вопрос содержит подсказки о том, как использовать прокси SOCKS с Python. Как я могу использовать прокси SOCKS 4/5 с urllib2?

...