Jump to content
Форум по продукции MOXA

Recommended Posts

Добрый день,

Это только у меня E2210 v3.13 зависает после 10 подключений по CGI?

Симптомы следующие - после 10 подключений с успешной аутентификацией, при одинадцатом устройство больше не присылает MoxaPass cookie.

Соответственно, дальнейшие действия по CGI невозможны до перезагрузки E2210.

Код для воспроизведения ошибки:

#tested with Python v3.8.2
#lxml is not installed by default, run "pip install lxml" 1st

import hashlib
import http.client
from lxml import html

moxaServer = '10.10.10.39'
moxaPort = 80
moxaPassw = 'just1024atest'

conn = http.client.HTTPConnection(moxaServer, moxaPort, timeout = 4)
header = {'Accept': 'text/html'}
conn.request('GET', '/', '', header)
response = conn.getresponse()
body = response.read()

tree = html.fromstring(body)
tokenList = tree.xpath('/html/body/center/form//*[@name="Token"]/@value')
token = tokenList[0]
str = moxaPassw + token
md = hashlib.md5(str.encode())
auth = 'Password=' + md.hexdigest() + '&Token=' + token + '&Submit=Submit'
conn.request('POST', '/home.htm', auth, header)
response = conn.getresponse()
body = response.read()

cookie = response.getheader('Set-Cookie').replace(',', ';')		#authenticated now, send cookie back in header
header = {'Cookie': cookie, 'Accept': 'text/html'}
print(header)
conn.request('GET', '/getParam.cgi?DIStatus_00=?&DIStatus_02=?', '', header)
response = conn.getresponse()
body = response.read()
print(body.decode('utf-8'))

conn.request('GET', '/setParam.cgi?DOMode_00=0&DOStatus_00=0&DOMode_01=0&DOStatus_01=0', '', header)
response = conn.getresponse()
body = response.read()
print(body.decode('utf-8'))

conn.close()

 

Link to comment

Их там нет, можно просто Ctrl-C, Ctrl-V.

Если кто будет пробовать, учтите, что строка "conn.request('GET', '/setParam.cgi?..." переключает выходы.

Забыл сказать, что зависает при последователных 11 подключениях.

Если было бы при паралельных, претензий не было бы - процессор слабый, мало памяти итд.

 

Link to comment

У меня после copy-paste почему то возникает ошибка SyntaxError: multiple statements found while compiling a single statement.

Ну это ладно. Если отключить авторизацию, тоже возникает?

Link to comment

Ага, спасибо. При работе с кодом из файла с синтаксисом нормально, теперь у меня lxml нет :D

Надо дальше разбираться, или вариант без авторизации подойдёт?

Link to comment

lxml под Win инсталируется с "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\Scripts\pip.exe install lxml"

, где C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32 путь к проинсталлированному питону

(он может быть другим, если программа в нештатную папку проинсталирована, или другое имя пользователя).

Без авторизации как то напрягает урановыми центрифугами управлять :)

Если серьёзно, то меня интересует, я сам делаю что то неправильно, E2210 неисправна или ошибка в прошивке.

Буду очень благодарен, если поможете это выяснить.

 

 

 

 

 

 

 

Link to comment

Доброе утро. Да, падает. Дело в том, что при выполнении этого кода вы каждый раз аутентифицируете нового пользователя. Их там всего 10 штук, поэтому на одиннадцатой попытке падает. Проверить можно очень просто - авторизуйтесь в web через 2 разных браузера - и ваш код упадёт на 8мом запуске. Соответственно, надо сделать конструкцию, которая будет опрашивать модуль в рамках одной пользовательской сессии.

PS. Авторизация в http - от честных людей :)

Link to comment

Доброе утро,

Странный алгоритм тогда там или ошибка.

conn.Close() по идее ведь должен все ресурсы, включая пользователя, освобождать для следующего подключения.

Можно, конечно, держать сессию открытой и управлять, но интернет к сожалению штука нестабильная -

там Cisko обновили и reboot сделали, тут Windows завис, итд, и через год лимит 10 пользователей исчерпан...

А если по LTE подключение, там вообще бывают обрывы каждую ночь.

Буду тогда наверно доступ по IP ограничивать, но там тоже не всё так гладко - IP имеют свойство меняться.

А сам способ авторизации (md5 хеш от passw+nonce) не плох и для нечестных,

особенно, если пароль по максимуму использовать, 16 символов из всех групп.

Спасибо!

 

Link to comment

Ошибка - вы имеете в виду в том, что должен закрывать сессию? Но ведь из браузера закрывает вроде бы, из IE так уж точно.

Link to comment

Я имел ввиду, что моха при закрытии сессии со стороны клиента (IE, Firefox, Python, etc),

должна закрыть сессию с своей стороны и освободить все занятые сессией ресурсы для следующих подключений.

Что она явно не делает.

Только что попробовал на IE11, тоже 10 нормальных подключении с вводом пароля, потом кукишь.

 

Link to comment
  • 4 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...