Pythonとか全く無知だけどKABUステーションが起動してないPCでAPIを使用する方法を発見しました

通常はkabuステーションが起動してないとAPIが使用できません。起動すれば使用できますが、それは起動しているPCだけでAPIが使用可能です。本日は起動してない他のPCからでも使用できる方法を紹介いたします。
本番環境はポート番号18080を使用していることを利用します。
それにはWindowsにあるnetshというコマンドを使用します。このコマンドに含まれるポート転送を使用してこれを実現します。ポートフォワードとかポートフォワーディングと呼ばれています。
最初にkabuステーションの設定をおこないます。
PC1のIPアドレスが192.168.26.105、PC2は192.168.26.115とします。
PC2でkabuステーションを起動しておきます。
PC1からPC2へポートを転送するコマンドを入力します。これをPC1のコマンドプロンプトを管理者権限で開き入力します。

netsh interface portproxy add v4tov4 listenport=18080 listenaddress=localhost connectport=18080 connectaddress=192.168.26.115

念のため確認するコマンドも入力します。

netsh interface portproxy show v4tov4

なお、このコマンドは再起動しても残っているのでリセットするコマンドも重要です。

netsh interface portproxy reset

転送されるPC2ではこれを受信できるようにファイヤーウォールの設定をおこないます。受信の規則で18080を追加します。もしくはファイヤーウォールを無効にしておきます。

これで理論的には接続できるはずなのでエクセルを使用して本番用のIDとパスワードを使いログインしてみます。しかし、ログインできません。接続はできているようですが、kabuステーションからエラーのHTMLが表示されました。

kabuステーションはRESTを採用しているようです。RESTの最大の特徴は、通常のWebブラウジングで利用するHTTP(あるいはHTTPS)を利用して、Webサービスへのアクセスが可能になるのでこのようなエラーが起こったと考えらます。
エラーの原因ですが、どうやらkabuステーション以外のPCからのアクセスは拒否されているようです。そこでひらめきました。「ダミーのポート番号を用意して、あたかもkabuステーションが起動しているPCからのアクセスとみせかければよいのでは。」ということを。

どうやらkabuステーション以外のPCからのアクセスは拒否されているようです。そこでひらめきました。「ダミーのポート番号を用意して、あたかもkabuステーションが起動しているPCからのアクセスとみせかければよいのでは。」ということを。

PC2から設定します。さきほどと同様にしてコマンドプロンプトを管理者権限で起動してダミーのポート番号5050からkabuステーションで使用するポート番号18080への経路を作ります。Windows Defenderファイヤーウォールの受信の規則にポート番号5050への接続を許可しておきます。さきほどの規則は削除します。

PC2
netsh interface portproxy add v4tov4 listenport=5050 connectport=18080 connectaddress=localhost

続いてアクセスするPC1の設定をします。その前に初めに作成した転送ルールをリセットします。新規で次のコマンドを入力します。kabuステーションで使用するポート番号18080をエクセルなどで使用するが、内部的にはkabuステーションが起動するPC2の5050ポートに転送するというものです。

PC1
netsh interface portproxy reset

netsh interface portproxy add v4tov4 listenport=18080 listenaddress=localhost connectport=5050 connectaddress=192.168.26.115

これで偽装完了です。早速エクセルを使用して本番用にログインしてみます。成功しました。

サンプルファイルをダウンロードしてきたので動作確認もします。正常に動作しているようです。
pythonのサンプルも入手してきたのでトークンを取得してみます。こちらもうまくいきました。このトークンを使用して他のサンプルも正常に動作しました。

教育

Posted by admin