Hato Server

個人的に作ったものを公開するラズパイサーバー。

Bot検出アクセスカウンタ

~ネット世界のBot率をサンプリング~

Human: 22519人
Bot: 2428機
詳しくはこちら

Profile

hato

javascriptから機械語まで、
ブレッドボードから外装まで、
ラズパイからファミコンまで、
が目標。



index > hsptv_server


HSPTV互換ランキングサーバーの構築

HSPTVのランキング機能の仕様を調査して、互換サーバーをラズパイ上に構築した。
また、hsptv.as互換のAPIを作成し、既存のHSPTVプログラムで動作確認してみた。

一部仕様は再現していません。
セキュリティはあまり配慮していません(phpソースを覗けば、簡単に攻撃できる程度)。

きっかけ

HSPプログラムコンテスト2016のHSPTV部門に参加して、ランキング機能を利用した ゲームを作りました(→雑貨屋競争)。
その際にランキング機能の仕様を調べて、ラズパイ上で互換サーバーを構築しようと思いました。
サーバーの機能を拡張して、将来HSP3DishにHSPTVのゲームを移植できたら…と考えてます(ただし、サーバーは自分持ち)。
スマホゲームが作れたら、広告で収入を… そんなうまくはいかないな(笑)


コンセプト


仕様調査

HSPTV!掲示板に投稿したのをご参照ください。


構成

SQLによるデータベース管理を考えていたけど、HSP3Dishで扱えるプロトコルということで却下。
そもそも、SQLを管理したことがないという…(´;ω;`)

バージョンアップで、HSP3DishにHTTP通信を行う命令が追加されたらしい。
互換サーバープログラムと、hsptv.asに置き換わる互換APIを作成した。

構成

HTTPリクエストによってサーバーにデータを送信し、標準出力によってデータを受信できる。
また、クライアントはデータファイルに直接アクセスできない。
しかし、公開されているサーバープログラム(PHP)をのぞき見すれば、通信の仕様が丸見えで簡単に攻撃できてしまう。
PHPソースを暗号化(難読化)することができるけど、そんな悪いことする人はいないということで。

通信プロトコル

まず、クライアントはサーバーのURLを知っている必要がある。
また、サーバープログラムにデータファイルのパスを指定する。
指定URLにPOSTでコマンドとデータを送信し、標準出力からデータを受信する。


クライアントAPI

hsptv.as互換のAPIを作成した。
基本的に命令の仕様を合わせ、サーバーのURLを指定するためにhsptv_start命令を作った。
ユーザー名を設定する命令はまだ作ってない。


ソースコード

通信の仕様を公開するのは危ないけど、悪いことする人はいない前提で

サーバープログラム(PHP)

			

クライアントAPI(HSP)
;hsptvapp.asを改変して作成しました。感謝申し上げます。
;HSPのライセンスを表記いたします。
;by hato

/*
Hot Soup Processor (HSP)
Copyright (C) 1997-2014, Onion Software/onitama, all rights reserved.
Made with base technology of OpenHSP.


OpenHSP
Copyright (C) 1997-2014, Onion Software/onitama.
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 
Neither the name of the Onion Software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 

・ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 
・バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 
・書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、Onion Softwareの名前またはコントリビューターの名前を使用してはならない。 

本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 
*/

;
;	hsptvapp.dll header
;
#ifndef __hsptv__
#define __hsptv__

#include "hsp3dish.as"

#module hsptv
#define global HSPTV_RANK_MAX 30

/*#deffunc hsptv_send 
	return*/
#deffunc hsptv_setini str setini,int id
	return
#deffunc hsptv_getini var storeini,int id
	return
#deffunc hsptv_saveini 
	return

#deffunc hsptv_start str arg_url
	url = arg_url
	return


#deffunc hsptv_up int _p1, str _p2, int _p3

	;	HSPTVデータを更新します
	;	hsptv_up score,"comment",option
	;	score,comment情報を反映させて最新データを取得します。
	;	(scoreがマイナス値の場合は最新データのみ取得します)
	;
	buf=""
	
	if _p1 == -1{//データ取得
		httpload url,"command=read"
	
		repeat
			httpinfo res,HTTPINFO_MODE
		
			if res == HTTPMODE_READY{
				httpinfo buf,HTTPINFO_DATA		; 結果データを取得する
				//dialog buf
				break
			}else:if res <= HTTPMODE_NONE{
				httpinfo estr,HTTPINFO_ERROR		; エラー文字列を取得する
				dialog "ERROR "+estr
				break
			}
		loop

	}else{//送信
		httpload url,"command=write&score="+_p1+"&user="+"(ユーザー名)"+"&comment="+_p2+"&option="+_p3
	
		repeat
			httpinfo res,HTTPINFO_MODE
		
			if res == HTTPMODE_READY{
				//httpinfo res,HTTPINFO_DATA		; 結果データを取得する
				//dialog res
				break
			}else:if res <= HTTPMODE_NONE{
				httpinfo estr,HTTPINFO_ERROR		; エラー文字列を取得する
				dialog "ERROR "+estr
				break
			}
		loop
	}
	
	return

#deffunc hsptv_getrank var _p1, var _p2, var _p3, int _p4

	;	HSPTVデータを取得します
	;	hsptv_getrank var1,var2,var3,rank
	;	(変数var1にrankで指定した順位のスコア情報を代入します)
	;	(変数var2にrankで指定した順位のユーザー名を代入します)
	;	(変数var3にrankで指定した順位のコメント情報を代入します)
	;	(rankは0が1位、29が30位となる)
	;	(var1は数値型、var2,var3は文字列型となります)
	;	(最新データの更新はhsptv_upで行なってください)
	;
	notesel buf
	i=_p4*3
	noteget _p2, i
	_p1=0+_p2
	noteget _p2, i+1
	noteget _p3, i+2
	noteunsel
	return

#global
#endif
			



コメント

自作コメントフォームです。
プレーンテキストでコメントをどうぞ。


16/12/12(Monday) 23:35:07<br>
(hato) テスト<br>
<br>
17/03/31(Friday) 08:07:07
And having failed to sign a new deal at the King Power Stadium over the summer, Schlupp is one of th.
montre sport nike http://www.musiquezag.com/programmation.asp?Shop=montre-sport-nike

17/10/14(Saturday) 09:49:13
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/14(Saturday) 09:50:02
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/14(Saturday) 09:53:34
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/14(Saturday) 10:03:11
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/14(Saturday) 10:04:05
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/14(Saturday) 10:27:37
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/14(Saturday) 11:55:47
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/14(Saturday) 15:40:25
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/14(Saturday) 15:53:47
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 11:14:32
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 11:15:35
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 11:27:23
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 11:29:38
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 11:34:44
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 11:47:50
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 11:48:06
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 12:00:59
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 13:33:33
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 13:48:47
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 18:00:12
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/10/27(Friday) 18:13:24
[url=http://levitrageneric-cheapest-price.net/]levitrageneric-cheapest-price.net.ankor[/url] <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

17/12/17(Sunday) 11:16:01
[url=http://price-of-levitra-20mg.mobi/]price-of-levitra-20mg.mobi.ankor[/url] <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

17/12/17(Sunday) 11:22:50
[url=http://price-of-levitra-20mg.mobi/]price-of-levitra-20mg.mobi.ankor[/url] <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

17/12/17(Sunday) 11:35:00
[url=http://price-of-levitra-20mg.mobi/]price-of-levitra-20mg.mobi.ankor[/url] <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

17/12/17(Sunday) 11:35:19
[url=http://price-of-levitra-20mg.mobi/]price-of-levitra-20mg.mobi.ankor[/url] <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

17/12/17(Sunday) 14:31:56
[url=http://price-of-levitra-20mg.mobi/]price-of-levitra-20mg.mobi.ankor[/url] <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

17/12/17(Sunday) 14:45:18
[url=http://price-of-levitra-20mg.mobi/]price-of-levitra-20mg.mobi.ankor[/url] <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/





クリエイティブ・コモンズ・ライセンスhato 作『hato server』はクリエイティブ・コモンズ 表示 4.0 国際 ライセンスで提供されています。