読者です 読者をやめる 読者になる 読者になる

野球選手データの取得@python+splunk

自分用

目標

選手の成績推移が見たい。

流れ

  1. PythonでSportsnaviの情報をCSVにする。
  2. Splunkで読み取り、成績推移グラフを作る

選手情報のCSV

コード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import re
import datetime
time = str(datetime.datetime.today())
day = str(datetime.date.today())

######URLアクセス######
def httpGetter(url):
	#送信先URL
	#url += "?{0}".format( urllib.urlencode( param ) )
	#API実行
	result = None
	try :
		result = urllib.urlopen( url ).read()
	except ValueError :
		print "アクセス失敗"
	return result

######CSV出力######
def fileExport(data,filename):
	f = open(filename, 'w')
	for i in data:
		f.write(i+"\n")
	f.close()

######文字整形######
def html_cleaner(data):
	r = re.compile("<tr.*?</tr>")
	data = r.findall(data.replace("\n", ""))

	player = []
	for i in data:
		i = re.sub(r'<.*?>', "", i.replace("</td>",","))
		player.append(i.decode('utf-8'))
	return player

def player_parser(case,player_data):
	if case == "batter":player = ["date,team,PlayerNo,name,daritu,shiaisuu,dasekisuu,dasuu,anda,niruida,sanruida,homerun,ruidasuu,daten,tokuten,sanshin,fourball,deadball,gida,giseifurai,tourui,syuturuiritu,tyoudaritu,tokutenken,syouriten,heisatu,sissaku"]
	if case == "pitcher":player = ["date,team,PlayerNo,name,bougyoritu,shiaisuu,kantou,mushittenshouri,mushikyuu,win,lose,hold,holdpoint,save,shouritu,toukyuukaisuu,hianda,hihonruida,datusanshin,fourball,deadball,boutou,bo-ku,shiten,jisekiten"]
	for i in player_data:
		i = re.sub(r",(\.)(\d+)",r",0.\2",i)
		i = re.sub(r"-",r"0",i)
		i = re.sub(r"&nbsp;1/3",r".333",i)
		i = re.sub(r"&nbsp;2/3",r".666",i)
		if (re.match(r".+?,.+?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*" , i)):
			player.append(time+","+str(team_no)+","+i.encode('utf-8'))
	return player

teams = ["001_読売ジャイアンツ","002_東京ヤクルトスワローズ","003_横浜DeNAベイスターズ","004_中日ドラゴンズ","005_阪神タイガース","006_広島東洋カープ",\
         "007_埼玉西武ライオンズ","008_北海道日本ハムファイターズ","009_千葉ロッテマリーンズ","376_東北楽天ゴールデンイーグルス","011_オリックス・バファローズ","012_福岡ソフトバンクホークス"]
for team_no in teams:
	batter_data  = html_cleaner ( httpGetter (url = "https://baseball.yahoo.co.jp/npb/teams/"+str(int(team_no[0:3]))+"/memberlist?type=b"))
	pitcher_data = html_cleaner ( httpGetter (url = "https://baseball.yahoo.co.jp/npb/teams/"+str(int(team_no[0:3]))+"/memberlist?type=p"))

	#野手データ取得
	exp = player_parser("batter",batter_data)
	fileExport(exp,"data_batter/"+str(team_no[0:3])+"_"+day+"_batter.csv")
	for i in exp:print i
	#投手データ取得
	exp = player_parser("pitcher",pitcher_data)
	fileExport(exp,"data_pitcher/"+str(team_no[0:3])+"_"+day+"_pitcher.csv")
	for i in exp:print i

アウトプット

2017-03-21 17:14:19.120000,003:横浜DeNAベイスターズ,25,筒香 嘉智,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2017-03-21 17:14:19.120000,012:福岡ソフトバンクホークス,18,松坂 大輔,4.76,3,0,0,0,0,0,0,0,0,0,11.333,4,1,7,10,2,2,0,8,6,

f:id:gokaxtukei:20170321172206p:plain
f:id:gokaxtukei:20170321172341p:plain

Splunkでデータ読み取り

特に指定なし。
ソースタイプ→CSVで指定すれば、インデックス行を読み取ってくれる。
結果ディレクトリを入力する。

index="pitcher" OR index="batter"
|search player_num = 9
|search team = "003*"
|timechart max(daritu)

f:id:gokaxtukei:20170321223339p:plain

複数日のデータが集まるまで、我慢…!
f:id:gokaxtukei:20170321181201p:plain

0CTF(2017) writeup #oneTimePad

ctf

問題

I swear that the safest cryptosystem is used to encrypt the secret!
oneTimePad.zip

2ファイルを渡される。

①暗号化用のスクリプト
oneTimePad.py
②フラグを暗号化した結果ファイル
ciphertext

解く

GF(2^{256})で定義された暗号。
processから以下を読み取れる。

  • R:乱数
  • K:鍵
  • S:シード

 K_{0}=(R_{0})
 K_{1}={{(K_{0}} \bigoplus S)}^2
 K_{2}={{(K_{1}} \bigoplus S)}^2


上記から、Sとkeyを導く。

 S^2=K_{1} \bigoplus K_{2}
 K_{0}=K_{1} \bigoplus {K_{1}}^2 \bigoplus K_{2}

 K_{1}と、 K_{2}はわかっている。

 K_{1} =crypted(fake_secret1) \bigoplus fake_secret1
 K_{2} =crypted(fake_secret2) \bigoplus fake_secret2

コード

#!/usr/bin/env python
# coding=utf-8

from os import urandom

def process(m, k):
    cal = m ^ k
    res = 0
    for i in bin(cal)[2:]:
        res = res << 1;
        if (int(i)):
            res = res ^ cal

        if (res >> 256):
            res = res ^ P
    return res

def keygen(seed):
    key = str2num(urandom(32))
    while True:
        #print "key : ",key,"\nseed : ",seed
        yield key
        key = process(key, seed)

def str2num(s):
    return int(s.encode('hex'), 16)

P = 0x10000000000000000000000000000000000000000000000000000000000000425L
fake_secret1 = "I_am_not_a_secret_so_you_know_me"
fake_secret2 = "feeddeadbeefcafefeeddeadbeefcafe"

#----------------------------------------------------------------#
ctxt1 = 0xaf3fcc28377e7e983355096fd4f635856df82bbab61d2c50892d9ee5d913a07f
ctxt2 = 0x630eb4dce274d29a16f86940f2f35253477665949170ed9e8c9e828794b5543c
ctxt3 = 0xe913db07cbe4f433c7cdeaac549757d23651ebdccf69d7fbdfd5dc2829334d1b

key2 = ctxt2 ^ str2num(fake_secret1)
key3 = ctxt3 ^ str2num(fake_secret2)
 
cal = key3
for i in range(255):cal = process(cal, 0)

seed = cal ^ key2
process(key2, seed) == key3
cal = key2
for i in range(255):cal = process(cal, 0)
key1 = cal ^ seed
process(key1, seed) == key2

message = key1 ^ ctxt1
print "flag{"+hex(message)[2:-1].decode("hex")+"}"

フラグ

flag{t0_B3_r4ndoM_en0Ugh_1s_nec3s5arY}

Evernoteの代替に、AWSでRedmineをたてる

大きな流れ

  • AWS借りる ★今回はここ
  • Redmineたてる ★今回はここ
  • ドメイン借りる
  • SSL対応
  • Snortいれる
  • ModSecurityいれる
  • リモートSplunk監視

-------------------------------------------------

AWS借りる

非常に詳しいリンクがあったので、参考にする。
https://portal.aws.amazon.com/gp/aws/developer/registration/index.html

※リンク先と違う部分のみ下記に記載※

インスタンスは「Redmine ※HVMバージョン」を選択

それとそれと、AWSは稼働時間課金なので、インスタンスは2個3個作っても大丈夫だと思われる
20GBの制限があるけど

SSHで接続するので、キーペアは作成すること!

f:id:gokaxtukei:20170319044541p:plain


-------------------------------------------------

Redmine初回ログイン

HVMバージョンの場合、[admin][AWS上のインスタンス名]

AWS Marketplace ご利用方法
最新版:3.0.3
Once the instance is running, paste the publicDNS or publicIP into your browser window to access the software. Default username for redmine is 'admin' and the password is the instance-id (e.g. i-f4c446fd). You can add/remove/change user and password once you logged in. For additional information, please refer to the user's guide at https://s3.amazonaws.com/aws-market.iaansys.com/AMI-IAANSYS-Redmine-Adv-Ubuntu-64/README_redmine.v3.0.3_ubt.txt

[個人設定]→[パスワード変更]からデフォルトから変更しておく。

-------------------------------------------------

OS以上の初期設定

  • ubuntuユーザの削除
  • sshdのLISTENポート変更※EC2セキュリティグループで、変更後のTCPポートを許可する必要あり

qiita.com



SSHでは、「非デフォルトポート」+「証明書」+「パスワード」を指定する必要ありになった。
証明書以外、あれですが。。。

  • HTTPのLISTENポート変更※EC2セキュリティグループで、変更後のTCPポートを許可する必要あり

vi /etc/nginx/conf.d/redmine.conf

ポートを任意のものに変える

-------------------------------------------------

20GBで足りるのかな?
f:id:gokaxtukei:20170319054429p:plain