Yotaによるコストの最適化の継続

この記事では、curl、OpenWRT、MR-3020を使用したYOTA料金管理の自動化に焦点を当てます。 提案されたスクリプトは、curlがインストールされている別の* nix環境で使用できます。


プロローグ


約1か月前に、私はYOTA LTEモデムの幸せな(またはそうではない)所有者になりました。 他の代替手段がないため、グローバルWebへのアクセスのメインホームソースとして使用する必要があります。

Iotovデバイスのコストが高いために、アパートでインターネットを配布するために、 OpenWRTを搭載したYOTA + TP-LINK MR-3020モデムのバンドルを使用することが決定されました。 MR-3020では、USBポートを備え、OpenWRTをサポートするコンパクトで安価なルーターとして選択されました。

在庫のMR-3020カールでは十分なスペースがありません。 もっと正確に言えば、libcryptoライブラリの重量が1 MBを超えるlibopenssllに十分なスペースがありません。 この場合、最も簡単な方法は、ルーターをロードした後にlibopenssllをRAMにロードすることです。インストール手順は次のとおりです。 追加のusb-hub + usb-hddを使用します。これは、rootfsにマウントされ、minidlna、samba、およびTransmissionもそれぞれhddにインストールされます。トレントをダウンロードしてテレビで見ると、スペース不足の問題が発生します。

YOTAモデムで動作するようにOpenWRTをセットアップするのは非常に簡単です-USBとネットワークで動作するための追加パッケージをインストールするだけでなく、設定に追加のネットワークインターフェイスを追加するだけです。

オートメーションとOpenWRT


関税から関税に免責でジャンプすることが可能な場合、自動化最適化の問題はそれ自体で発生します。 さらに、 linx56の 記事を読んだ後 「自動化のかゆみ」(この用語の著者に感謝)は忘れられませんでした。

タスクは次のとおりでした-提案されたlinx56スクリプトを各ホームPCにインストールする代わりに、インターネット消費のガーフィックが非常に確実であるように思えたので、ルーターに時間と曜日に応じて個別に料金を切り替えるように「強制」する必要がありました。 前述のクロスプラットフォームYotaスクリプトは、phantom.jsを使用しているため、要件を満たしていませんでした。OpenWRTを備えたストックMR-3020にインストールすることはできません。

そのため、重いヘッドレスブラウザを使用せずにスクリプトを記述する必要性が高まっています。 解決策はほとんどすぐに見つかりました(上記の記事のコメントによる)-curlユーティリティを使用してリクエストをYOTAサーバーに送信することにしました。

Curlは元々ルーターにインストールされていました。

opkg install curl 

その後、ブラウザーがどのようにYota Webサイトと通信するのか、つまりどのパラメーターでどのリクエストを行うのかを知る必要がありました。

FireBugを使用して、個人アカウントでの最初の承認要求がキャッチされました。 結果はcurlによってサーバーに送信され、...失敗-認証エラー!!! パラメーターと値を確認しました-再びエラー、そして何度も...

その結果、認証とアカウントのパラメーターの設定のために、YOTA WebサイトがCookieを積極的に使用していることが判明しました。 幸いなことに、curlはCookie処理で素晴らしい仕事をしています-認証の問題は解決されました:

 curl -c cook.txt -s -k -L -d "IDToken1=$1&IDToken2=$2&IDToken3=$2&goto=https%3A%2F%2Fmy.yota.ru%3A443%2Fselfcare%2FloginSuccess&gotoOnFail=https%3A%2F%2Fmy.yota.ru%3A443%2Fselfcare%2FloginError&old-token=&org=customer" https://login.yota.ru/UI/Login 

ここにあなたのアカウントがあります。 繰り返しますが、FireBugを使用して、関税変更のリクエストをインターセプトします。 受信したパラメーターとCookieをサーバーに送信します...再び、失敗しました!!!

いくつかのリクエストを分析した後、サーバーに送信されたパラメーターの1つ、つまり「ProductID」の値に興味がありました。この値は、関税変更後に新しくなりました。 判明したように、ProductID値はサーバーによってページコードで返され、料金が変更されるたびに変更されます。 料金自体は、POS-MA14-0002からPOS-MA14-0022の値をとるofferCodeパラメーターです。

 curl -b cook.txt -s -k -L -d "product=$pr&offerCode=$OCODE&homeOfferCode=&areOffersAvailable=false&period=&status=custom&autoprolong=0&isSlot=false&resourceId=¤tDevice=1&username=&isDisablingAutoprolong=false" https://my.yota.ru/selfcare/devices/changeOffer 

その結果、アルゴリズムは次のようになります。

  1. アカウントにログインします。
  2. 速度の「レギュレーター」のあるページに移動します。
  3. 結果のページからProductIDを選択します。
  4. 新しい関税を設定します。

研究の結果、小さなスクリプトが作成されましたここから入手できます

アプリケーションは簡単です:
 yota.sh <> <> <> 

実装の結果は、確立された料金(速度)と料金の残り日数(時間)です。

crontabを使用して、インターネットの意図した消費モードを構成しました。つまり、次のとおりです。
営業日:

週末のために-深夜の時間であなた自身の別のスケジュール:)。

7日が経ちました


1週間後、スケジュールに基づいて料金を変更する提案された方法が完全に効果的ではないことが明らかになりました。夜間と朝のシャットダウンの時間がほぼ常に設定時間と一致する場合、ターンオン時間がしばしば設定された時間と大幅に異なることがあります。あなたが寝坊した場合、それはまったく必要ありません:))。

最初の考えは、ネットワーク負荷に応じて速度を変更することです。 実装について少し考察したところ、このアイデアはあまり成功していないことがわかりました。まず、料金表に設定された帯域幅は、実際に利用可能な帯域幅と必ずしも一致しない、つまり 関税を継続的に引き上げることはできますが、実際の帯域は小さくなり、メディアサーバー上のトレントは常に24時間高速で維持されます。

次の考えは、ホームネットワーク内の「インターネット利用者」の存在に応じて、速度のオン/オフパラメータを変更することです。

  1. 固定されたPCまたはラップトップ(またはその他の指定されたデバイス)がネットワークに表示されたら、速度をオンにします。
  2. オフ-両方が消えたとき。
  3. オフ-設定された時間(夜間)に 夜にコンピューターの電源を切るのを忘れることができます:)。

これに関連して、pingコマンドを使用してネットワーク上の「必要な」デバイスの存在を判断する小さなpingsh.shスクリプトも作成され、これらのデバイスのIPアドレスはpingファイルにリストされ、ルーターのdhcpはそれに応じて「必要な」を発行するように構成されます»固定IPアドレスを持つホームデバイス。 ファイルの少なくとも1つのアドレスがネットワークに存在する場合、速度がオンになり、すべてが存在しない場合、3分後にネットワーク内のデバイスの存在が再度チェックされ(wi-fiが落ちた場合)、デバイスが見つからない場合は速度がオフになります。 不要なリクエストでIotaを困らせないために、料金を変更するたびに、フラグのオン/オフ速度を設定します。

pingsh.shスクリプトの使用簡単です。ホームデバイスの必要なIPアドレスをpingsファイルに入力し、スクリプト自体でlogin、psw、speedon、speedoffの値を編集します。

crontabには2行しかありません:1つ目はpingsh.shを6分ごとに起動することで、2つ目は、眠りに落ちてコンピューターの電源を切らなかった場合に備えて、午前1時に速度を強制的にシャットダウンすることです:)

上記のスクリプトはここにあります

PS


少しオフトピック。 労働者の要請により、関税を迅速に変更するための単純なプログラムがWindows上のDelphiで並行して作成されました。 ratswolfが提案したバリアントとは異なり、ブラウザは使用されません。Yotaサーバーでは、上記のパラメーターを使用してGETおよびPOSTリクエストを直接処理します。
速度を選択し、現在の速度/バランスを表示するオプション:
画像

そして、すべての設定:



こちらでお持ちいただけます

最も重要なこと


そして最も重要な質問は、実際の節約は約50%であり、900ルーブル/月(5.5 Mbps)の基本レートでほぼ1か月半を処理することができたことです。

Curlのインストール手順


次のようにrootfsにスペースがほとんどない場合。
sshを介してルーターに接続し、次のコマンドを実行します。
 opkg update opkg install curl --nodeps opkg install zlib --nodeps opkg install libcurl --nodeps opkg install libopenssl -d ram ln -s /tmp/usr/lib/libcrypto.so.1.0.0 /lib/libcrypto.so.1.0.0 ln -s /tmp/usr/lib/libssl.so.1.0.0 /lib/libssl.so.1.0.0 

次に、行をrc.localに追加します(システムWebインターフェイス-スタートアップから可能です)。

 sleep 180 opkg update opkg install libopenssl -d ram 

したがって、再起動後でも、ルーター自体は欠落したパケットをRAMにロードします。

UPD


判明したように、Yotaプロバイダーは地域ごとに異なる関税とパラメーターを使用します。
yota.shによってハバロフスクに提出されました。 地域のスクリプトを取得するには
gen.shスクリプト(同じ場所にある)を使用する必要があります。
 gen.sh login password 

スクリプトの最後に、n_yota.shが必要なパラメーターと料金とともに作成されます。

ご清聴ありがとうございました。

Source: https://habr.com/ru/post/J176817/


All Articles