hide's memo
27 2月, 2022

JMeterで大量の個別ユーザを扱う

[English]

JMeterで、下図のように大量の別々のユーザを用意し、

 

それぞれが個別のユーザIDを使って、ログイン、ページアクセスを行うようなJMeterの設定方法

 

 

1.ユーザ情報(ID/Passwd)を記載したTXTファイルを用意する

ファイルの中身は、以下のようにIDとパスワードをタブ区切りとする。

user001 passwd001
user002 passwd002
user003 passwd003

 

2. JMeterを以下のように設定する

 

(1)User Defined Variable

uid,passwd 変数を追加

(2)HTTP Cookie Managerを追加

(3)Transaction Controllerを追加

(3.1.)BeahShell PreProcessorを追加。中身を以下のように記述する。

int threadNum = ${__threadNum}; 
String filename = "users.txt"; // 必要に応じてフルパスにする

String data;
BufferedReader br = new BufferedReader(new FileReader(filename));
String uid="";
String passwd="";

// 自分のスレッド番号に一致した行を読み込む
int num=0;
while((data = br.readLine())!=null){
  String[] token = data.split("\t");
  uid = token[0];
  passwd = token[1];

  num++;
  if(num == threadNum){
    break;
  }
}
br.close();

vars.put("uid",uid);
vars.put("passwd",passwd)

 

(3.2) HTTP Requestを追加

本例では、http://localhost/cgi-bin/login.cgi というURLに、id=xxx, passwd=yyy というパラメータでPOSTするとログインするような画面を想定している。

アクセスURL:http://localhost/cgi-bin/login.cgi

HTTP Request:POST

Parametersに以下を追加

uid    ${uid}

passwd    ${passwd}

 

(4)Loop Controllerを追加

(4.1)HTTP Requestを追加し、ページ1へのアクセスを追加

(4.2)HTTP Requestを追加し、ページ2へのアクセスを追加

 

user.txtの数だけスレッド数を増やすことが可能。

 

 

 

 

26 2月, 2022

LBでSSLオフロードした場合でも、後続にHTTPSと思わせる(URLRewrite,IIS)

[English]

下図のようにロードバランサでSSLオフロードを行なっている場合でも、後続のアプリ等にHTTPSでアクセスされていると思わせるる方法。

 

 

  1. URLRwriteモジュールをIISにインストール
  2. URL書き換えモジュールで、「サーバ変数の表示」を選択し、”HTTPS”という文字列を追加する。
  3. web.configを以下のように記載する。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<rewrite>
   <rules>
       <rule name="backend" patternSyntax="Wildcard">
           <match url="*" />
           <serverVariables>
               <set name="HTTPS" value="on" />
               </serverVariables>
           <action type="None" />
       </rule>
   </rules>
</rewrite>
</system.webServer>
</configuration>


20 2月, 2022

termux上でapache+perl+cgi

[English]

 

1.temruxのインストール

PlayStore上でtermuxをインストール

 

2.apache,perlの取得

apt update
apt upgrade
apt install apache2
apt install perl

 

3. httpd.conf修正

ファイル:/data/data/com.termux/files/usr/etc/apache2/httpd.conf

<Directory /data/data/com.termux/files/usr/lib/cgi-bin>
</Directory>

のエントリに、以下を追加

Options +ExecCGI を追加

 

以下の行がコメントになっているのを外す

AddHandler cgi-script .cgi

 

mod_cgiモジュールを読み込む

<IfModule mpm_prefork_module>
    #LoadModle cgi_module libexec/apache2/mod_cgi.so
</IfModule>

#<IfModule mpm_prefork_module>
    LoadModle cgi_module libexec/apache2/mod_cgi.so
#</IfModule>

 

4.確認(printenvが動くことを確認)

4.1. 実行権限追加

chmod ugo+x /data/data/com.termux/files/usr/lib/cgi-bin/printenv

4.2.printenvの先頭に以下を追加

#!/usr/bn/perl

 

5. apache起動

apachectl

 

6. 以下のURLにAndroidのWEBブラウザでアクセスして確認する

http://localhost:8080/

http://localhost:8080/cgi-bin/printenv

 

 

 

 

 

 

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)で設定したもの。