hide's memo
20 2月, 2022

apache module でWEBサーバフィルタを作る

[English]

IISやapacheに下図のようにモジュールを追加することで、WEBサーバの動作をコントロールすることができる。

例として、8:00から18:00以外の時間にアクセスされた場合、「時間外」を表示するフィルタ sample01 を作成する。

1.環境

OS: CentOS7.7

apache: 2.4.6

 

2. apxsのインストール

yum install httpd-devel

 

3. フィルタのテンプレートを生成

cd /tmp/work/

apxs -g -n sample01

 

4. ソースコードを以下のように修正

以下は、8:00-18:00以外の時間は、”overtime”というHTMLを表示する。

/* The sample content handler */
static int sample01_handler(request_rec *r)
{
  time_t timer;
  struct tm *t_st;
  char buff[256];
  time(&timer);
  t_st = localtime(&timer);

  sprintf(buff,"%02d%02d", t_st->tm_hour, t_st->tm_min);
  if(strcmp(buff,"0800")>=0 && (strcmp(buff,"1800")<=0)){
    return DECLINED;
  }
  else {
    r->content_type = "text/html";
    if(!r->header_only){
      ap_rputs("<html><body>overtime</body></html>", r);
    }
    return OK;
  }
}

static void sample01_register_hooks(apr_pool_t *p)
{
  ap_hook_handler(sample01_handler, NULL, NULL, APR_HOOK_FIRST);
}

 

5. Make

apxs -c mod_sample01.c

 

6. 生成されたモジュールを、apacheのモジュールフォルダにコピー

cp .libs/mod_sample01.so  /etc/httpd/modules/

 

7. apacheの設定ファイルを修正し、生成したモジュールを一番最初に読み込むようにする

#                                                                                                                                   
# Dynamic Shared Object (DSO) Support                                                                                               
#                                                                                                                                   
# To be able to use the functionality of a module which was built as a DSO you                                                      
# have to place corresponding `LoadModule' lines at this location so the                                                            
# directives contained in it are actually available _before_ they are used.                                                         
# Statically compiled modules (those listed by `httpd -l') do not need                                                              
# to be loaded here.                                                                                                                
#                                                                                                                                   
# Example:                                                                                                                          
# LoadModule foo_module modules/mod_foo.so                                                                                          
#                                                                                                                                   

LoadModule sample01_module modules/mod_sample01.so                                                                                 
Include conf.modules.d/*.conf


 

8. apache再起動

18 2月, 2022

csvをjsonにCopy アクティビティを使って変換 (Azure Data Factory)

[English]

以下のようなフォーマット変換をCopy アクティビティを使って実現する。

 

1.Source設定

追加の列に以下を設定(マッピング時に固定値や同じカラムを複数回出現させられないので、ソース側で値を用意する)

 

2.マッピング

 

 

■関連記事

csvファイルをjson に変換してパイプライン変数に格納 (Azure Data Factory)

17 2月, 2022

WebAccessの結果レスポンスを、そのまま次のWebAccessのPOSTに利用する(Azure Data Factory)

[english]

Adfで、1つ前のWebAccessアクティビティの結果を、次のWebAccessアクティビティのPOSTのBODYに使用する。

【注意】Web Accessアクテビティが扱えるサイズは4MBという制限があります。MSのサイト

Web2 アクティビティの設定

メソッド:POST

本文: @concat(‘{ “records”:’, activity(‘Web1’).output.records, ‘}’)

 

Web1のアクティビティの結果は、そのまま単純に文字列ではない。値を取り出すのに、activity(‘Web1’).output.records を指定するが、

これは配列オブジェクトになっており、 最初の

{
     "records" : [

の部分と、最後の

   ]
}

の部分がなくなっている。そのため、conca()関数を使って、再度組み立てている。

 

17 2月, 2022

json を見やすく整形表示

以下のコマンドを実行

python -mjson.tool input.json

 

項目がアルファベット順に並んでしまい、それを避けたい場合

 cat input.json | python -c "import json, sys, collections; print(json.dumps(json.loads(sys.stdin.read(), object_pairs_hook=collections.OrderedDict), indent=4))"

以下のURLを参考にした
https://github.com/lukepark327/onechain/issues/40

16 2月, 2022

mail

telnet でメール送信

認証なし)

telnet メールサーバ 25
EHLO localhost
MAIL FROM:<foo@hoge.com>
RCPT TO: <foo@hoge.com>
DATA
subject: test
from: foo@hoge.com
to: foo@hoge.com
this is test.
.
quit

 

PLAINでSMTP認証

telnet メールサーバ 25

EHLO localhost
AUTH PLAIN \0ユーザ名\0パスワードを base64でエンコードした文字列
MAIL FROM:<foo@hoge.com>
RCPT TO: <foo@hoge.com>
DATA
subject: test
from: foo@hoge.com
to: foo@hoge.com
this is test.
.
quit

 

LOGINでSMTP認証

telnet メールサーバ 25
EHLO localhost
AUTH LOGIN
ユーザ名をbase64エンコード
パスワードをbase64エンコード
MAIL FROM:<foo@hoge.com>
RCPT TO: <foo@hoge.com>
DATA
subject: test
from: foo@hoge.com
to: foo@hoge.com
this is test.
.
quit

 

LOGINでSMTP認証 CMAM-MD5でSMTP認証

以下の処理シーケンスでデータを送信する

 

16 2月, 2022

コマンドラインでHTTPS

[English]

以下のようにサーバに接続する。

openssl s_client -connect サーバ:443

以降は通常のHTTP接続できているので、GET等を発行する。

 

SNIで稼働しているWEBサーバの場合、以下のように指定する。

openssl s_client -connect サーバ:443 -servername サーバ名
16 2月, 2022

gnupg (Windows上で作った gnupgの秘密鍵を取り出し、Linuxにインポート)

Windows上で作ったgnupg の秘密鍵を取り出し、Linuxにインポートする。

■1. Windows側

(1)gnupgインストール

(2)以下のコマンドでキーを作成

C:\gnupg>gpg --gen-key

鍵の種類は1を指定。あとはリターンとyのみ。

RealName は hogehoge、EMail, Commentは空。最後に “o” (オー)

(3)鍵確認

(3.1) ID確認

gpg --list-key

ここで出てくる鍵IDが後で必要。

(3.2) 公開鍵生成

gpg -o publickey.txt -a --export (3.1)のID

これで、publickey.txt を使ってファイルを暗号化できる。

 

■2. Windwos -> Linuxへの引っ越し

(1) PC上で、コマンドを実行し秘密鍵を取り出す。

C:\gnupg>gpg -a -o output-secret.key --export-secret-key

上記の操作で、outptu-secret.key というファイルが生成される。

(2) 上記の秘密鍵を、Linuxサーバにコピー

(3) 以下のコマンドを発行し、秘密鍵を Linuxの rootユーザ(今後平文にする処理を動かす予定のユーザ)にインポート

gpg --import output-secret.key

(4) 確認

gpg --list-keys
gpg --list-secret-keys

(5) 使ってみる。

gpg --batch --passphrase=miura -o decoded.txt encoded.asc

ここで、hogehogeの部分は、Windows側の (2)で設定したもの。

 

16 2月, 2022

ffmpeg

・アスペクト比指定変換(%1..入力ファイル   %2…出力ファイル)

ffmpeg -i %1 -f mp4 -aspect 16:9 -t 1425 -vcodec libx264 -acodec libfaac %2

 

・音声のみ取り出し(%1..入力ファイル   %2…出力ファイル)

ffmpeg -i %1 -vn -acodec pcm_s16le %2

 

・mp3変換 (%1..入力ファイル   %2…出力ファイル)

ffmpeg.exe -i %1.wav -ab 128 %2

 

・DVD画質変換(%1..入力ファイル   %2…出力ファイル)

ffmpeg -i %1 -target ntsc-dvd -vcodec mpeg2video -s 720x480 -r 29.97 -aspect 16:9 -acodec ac3 %2

 

・開始時間指定

-ss 10

上記で、10秒後から開始

 

・指定時間カットし、最後まで出力(%1..入力ファイル   %2…出力ファイル)

ffpmeg -ss 秒 -i %1 -c copy %2

 

・画像を抜き出し(%1..入力ファイル   %2…出力ファイル)

ffmpeg -i %1 -vf "scale=968:544" -ss 1 -t 1 -r 1 %2

 

・時間切り出し

fmpeg.exe -i %1 -ss 00:05:00 -t 00:01:01 %2

-ss は切り出し開始時間。-t は切り出し時間。上記の例は 動画の 5:00 ~ 6:01 を切りだす。

 

・サイズ変更

fmpeg.exe -i %1 -vf scale=320:-1 %2

上記は、幅 320にする(アスペクト比はそのまま)

16 2月, 2022

Fiddler

1.HTTPのキャプチャ

起動していればそのままキャプチャを始める。POSTパラメータを見るには、画面右ペインの「Inspectors」 タブをクリックし、「Raw」を押す。

 

2.リクエストの改ざん

  • 「Rules」→「Automatic Breakpoints」→「Before Requests」を選択
  • 画面操作を行い(そこでブレークする)、「Inspectors」「Raw」に表示されるパラメータを適当に変更する。
  • 画面右ペインの真ん中あたりにある、緑色の「Run to Completion」を押して先に進める。

 

 

3.クライアント証明書を使う

3.1.クライアント証明書を cer 形式で準備。PFXしかない場合、以下で変換

openssl pkcs12 -in 元ファイル.pfx -clcerts -nokeys -out 出力ファイル.cer

上記でできたファイル、頭に不要な情報があるので、”—–BEGIN CERTIFICATE —–” よりも前の行を消す

 

3.2. 以下のフォルダ配下に指定の名前で置く

C:\Users\ユーザ\Documents\Fillder2\ClientCertificate.cer

上記で、クライアント証明書が必要な状況になると、Fiddlerが上記ファイルを投げるようだ。

16 2月, 2022

Elasticsearch

プラグインの確認

curl -H "Content-type: application/json" -XGET 'http://xxxx:yyy/_nodes/plugins?pretty'

インデックスされた件数確認

curl -XGET -u ユーザ名:パスワード -H "Content-type: application/json" 'https://サーバ:port/aaaa/bbbb/_count?pretty'

 

インデックスされたデータを10件取り出す

curl -XGET -u ユーザ名:パスワード -H "Content-type: application/json" 'https://サーバ:port/aaaa/bbbb/_search?&pretty&size=10'