neviens Posted March 12, 2020 Share Posted March 12, 2020 Добрый день, Это только у меня 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
Знайка Posted March 13, 2020 Share Posted March 13, 2020 Добрый день. Можете прикрепить txt или другой файл с правильными отступами? Link to comment
neviens Posted March 13, 2020 Author Share Posted March 13, 2020 Их там нет, можно просто Ctrl-C, Ctrl-V. Если кто будет пробовать, учтите, что строка "conn.request('GET', '/setParam.cgi?..." переключает выходы. Забыл сказать, что зависает при последователных 11 подключениях. Если было бы при паралельных, претензий не было бы - процессор слабый, мало памяти итд. Link to comment
Знайка Posted March 13, 2020 Share Posted March 13, 2020 У меня после copy-paste почему то возникает ошибка SyntaxError: multiple statements found while compiling a single statement. Ну это ладно. Если отключить авторизацию, тоже возникает? Link to comment
neviens Posted March 13, 2020 Author Share Posted March 13, 2020 Прикрепил py файл. Это вообще возможно, отключить авторизацию? В ioAdmin'е не нашёл ничего подобного. moxatest2.py Link to comment
neviens Posted March 13, 2020 Author Share Posted March 13, 2020 Разобрался, без авторизации будет, если Password пустoй. При отключенной не виснет. Link to comment
Знайка Posted March 13, 2020 Share Posted March 13, 2020 Ага, спасибо. При работе с кодом из файла с синтаксисом нормально, теперь у меня lxml нет Надо дальше разбираться, или вариант без авторизации подойдёт? Link to comment
neviens Posted March 13, 2020 Author Share Posted March 13, 2020 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
Знайка Posted March 16, 2020 Share Posted March 16, 2020 Доброе утро. Да, падает. Дело в том, что при выполнении этого кода вы каждый раз аутентифицируете нового пользователя. Их там всего 10 штук, поэтому на одиннадцатой попытке падает. Проверить можно очень просто - авторизуйтесь в web через 2 разных браузера - и ваш код упадёт на 8мом запуске. Соответственно, надо сделать конструкцию, которая будет опрашивать модуль в рамках одной пользовательской сессии. PS. Авторизация в http - от честных людей :) Link to comment
neviens Posted March 16, 2020 Author Share Posted March 16, 2020 Доброе утро, Странный алгоритм тогда там или ошибка. conn.Close() по идее ведь должен все ресурсы, включая пользователя, освобождать для следующего подключения. Можно, конечно, держать сессию открытой и управлять, но интернет к сожалению штука нестабильная - там Cisko обновили и reboot сделали, тут Windows завис, итд, и через год лимит 10 пользователей исчерпан... А если по LTE подключение, там вообще бывают обрывы каждую ночь. Буду тогда наверно доступ по IP ограничивать, но там тоже не всё так гладко - IP имеют свойство меняться. А сам способ авторизации (md5 хеш от passw+nonce) не плох и для нечестных, особенно, если пароль по максимуму использовать, 16 символов из всех групп. Спасибо! Link to comment
Знайка Posted March 16, 2020 Share Posted March 16, 2020 Ошибка - вы имеете в виду в том, что должен закрывать сессию? Но ведь из браузера закрывает вроде бы, из IE так уж точно. Link to comment
neviens Posted March 16, 2020 Author Share Posted March 16, 2020 Я имел ввиду, что моха при закрытии сессии со стороны клиента (IE, Firefox, Python, etc), должна закрыть сессию с своей стороны и освободить все занятые сессией ресурсы для следующих подключений. Что она явно не делает. Только что попробовал на IE11, тоже 10 нормальных подключении с вводом пароля, потом кукишь. Link to comment
Знайка Posted March 16, 2020 Share Posted March 16, 2020 Принято. Довел до разработчиков. Как что прояснится - напишу. Link to comment
Знайка Posted April 7, 2020 Share Posted April 7, 2020 А вот и обещанное исправление https://yadi.sk/d/sLn7FPc4CKXN0Q Link to comment
neviens Posted April 8, 2020 Author Share Posted April 8, 2020 Работает. 1000+ подключений, выходы переключаются, входы читаются, ничего нужного не сломали :) Спасибо! Link to comment
Знайка Posted April 8, 2020 Share Posted April 8, 2020 Спасибо что сообщили! И за терпение тоже Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now