hide's memo
16 2月, 2022

シェル(引数で与えられた年月日の範囲±1日の範囲の文字列を得る)

[English]

引数で与えられた年月日の範囲±1日の範囲を取得し、それをループで回すシェル。

#!/bin/sh
START=$1
END=$2


START_1DAY_BEFORE=`date '+%Y%m%d' -d "1 days ago ${START}"`
END_1DAY_AFTER=`date '+%Y%m%d' -d "-1 days ago ${END}"`


echo $START_1DAY_BEFORE

for j in {0..10000}; do
    TARGET_YYYYMMDD=`date '+%Y%m%d' -d "-$j days ago ${START_1DAY_BEFORE}"`
    echo ${TARGET_YYYYMMDD}

    if [ ${TARGET_YYYYMMDD} -gt ${END_1DAY_AFTER} ]; then
       break
    fi
done
13 2月, 2022

サーバー証明書

[English]

 

1.自己証明証明書を作成するシェル

!/bin/sh

CN=******.co.jp
PASSWORD=abcdefgxyz
IP=127.0.0.1

echo subjectAltName = DNS:$CN, IP:$IP > subjectname.txt

SJ="/C=JP/ST=Tokyo/L=Minato-ku/O=****/OU=****/CN=$CN"

openssl genrsa -des3 -passout pass:${PASSWORD} -out ${CN}.key 2048

openssl rsa -passin pass:${PASSWORD} -in ${CN}.key -out ${CN}.key

openssl req -new -sha256 -key ${CN}.key -out ${CN}.csr -subj "$SJ"

#openssl req -noout -text -in ${CN}.csr

#openssl req -x509 -in ${CN}.csr -key ${CN}.key -out ${CN}.crt -days 3650
openssl x509 -days 3650 -req -extfile subjectname.txt -signkey  ${CN}.key < $CN.csr > $CN.crt

#CHANGE CSR to PFX
openssl pkcs12 -export -in ${CN}.crt -inkey ${CN}.key -out ${CN}.pfx -passout pass:${PASSWORD}

 

 

13 2月, 2022

VirtualBox

VirtualBoxでゲストOSと外部を通信させる。

 

1.構成の概要

  • NICを2枚使用する
  • NICの1枚目は外に出ていく通信にしよう(Default Gateway)
  • NICの2枚目は外部から入ってくる通信に使用。VirtualBoxのホストオンリーアダプタを使用。

 

2.VirtualBoxの設定

(1)下図のようにVIrtualBoxの設定でHostOnlyAdapterを有効にする。

 

 

(2)VirtualBoxのゲストOSの設定はNICを2個設定

(2.1)1つはNAT

(2.2)1つはホストオンリーアダプタ

 

(3)ゲストOSの設定

(3.1)CentOS7以前

 

 

(3.2)CentOS7以降

(3.2.1)nmtui起動

(3.2.2)Edit a connection を選択

(3.2.3)Ethernet二以下の2つがあることを確認(文字化けしている場合がある。その場合修正する)

enp0s3 ………

enp0s8 ……… ホストオンリーアダプタのほう

(3.2.4)enp0s8を選択

Profie name: enp0s8

  Ddevice : enp0s8 (00:00:00:00:00:00) (この形になってない場合修正する。NICのIDは都度。)
  DHCPだとうまくいかないことがあるので以下も修正
  IPv4 CONFIGUATION <Manual>
    Address 192.168.56.101/24
 こっちがデフォーゲートウェイにならないように、チェックする。

(3.2.5)enp0s3を選ぶ

  Profie name: enp0s3
 Ddevice : enp0s3 (00:00:00:00:00:00) (この形になってない場合修正する。NICのIDは都度。)
 IPv4 CONFIGUATION <Automaticl>
    こっちはたぶん Automatic でOK。

(3.2.6)以下のような設定になっていればOK

[root@localhost ~]# /sbin/ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
       => これがNAT。外に出ていくほう。

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 192.168.56.101  netmask 255.255.255.0  broadcast 192.168.56.255
       => これがホストオンリーアダプタに対応。外から入ってくるほう。

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
       inet 127.0.0.1  netmask 255.0.0.0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
       inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

 
		
13 2月, 2022

NTLM認証を行うコード(Java)

[English]

JavaでNTML認証を行うサンプル

// HttpClientのバージョンは 4.3.3
String userName = "test";
String password = "test";
HttpClientBuilder builder = HttpClientBuilder.create();
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new NTCredentials(userName + ":" + password));
builder.setDefaultCredentialsProvider(credentialsProvider);
 
HttpClient httpClient = builder.build();
HttpGet httpGet = new HttpGet("http://hogehoge");
 
try {
    HttpResponse response = httpClient.execute(httpGet);
    response.getEntity().writeTo(System.out);
} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

 


 
		
13 2月, 2022

sendmail

[English]

1.sendmaiの転送

sendmail.cf (sendmail.mcも同じ)のSMART_HOSTは、”[“の有無で動きが変わる。

[例]sendmailを、常に mailserver.hoge.comに転送したいと思ったときは、以下のように”[“をつけて記述する。

DS[mailserver.hoge.com]

もし、”[“をつけない場合、sendmailはMXレコードを検索して転送先を振り分けるので必ずmailserver.hoge.comに転送するとは限らない。

 

2. sendmailで特定ドメイン以外のメール転送を止める

(1)aliasを追加

#echo 'trash: /dev/null' >> /etc/aliases
#newaliases

(2)mailertable修正

#vi /etc/mail/mailertable
hoge.jp.com	smtp:[リレー先メールサーバ]
.	local:trash
(ここで、[]を付けているのは、MXレコードを引くのを避けるため)

(3)mailertableをDB変換

#makemap hash /etc/mail/mailertable < /etc/mail/mailertable

(4)sendmail再起動

#/etc/rc.d/init.d/sendmail restart

 

3. DNSが引けない環境で、sendmailで別のSMTPに転送

/etc/mail/service.switchファイルを作成し以下のように記述

hosts  files

13 2月, 2022

Windowsでwhich

[English]

以下のようなBATを which.bat としてパスが通った場所に保存して使用する。

@echo off
for %%I in (%1 %1.com %1.exe %1.bat %1.cmd %1.vbs %1.js %1.wsf) do if exist %%~$path:I echo %%~$path:I
13 2月, 2022

BATファイルで日付をファイル名に使用

[English]

以下のようにバッチでファイル名に、YYYYMMDD-hhmiss を付与する。

Set DD=%date:~0,4%%date:~5,2%%date:~8,2%
set time2=%time: =0% 
Set TT=%time2:~0,2%%time2:~3,2%%time2:~6,2%
move logerr.log logerr_%DD%_%TT%.log
move logstd.log logstd_%DD%_%TT%.log
13 2月, 2022

Windowsでポート転送

[English]

netsh を使って下図のようにポート転送を設定。

 

1.コマンドプロンプトで以下を実行

netsh interface portproxy add v4tov4 listenport=待ち受けポート listenaddr=自分のIP(127.0.0.1じゃないほう) connectport=転送先ポート connectaddress=転送先のIP

2. 上記定義の削除

netsh interface portproxy delete v4tov4 listenport=待ち受けポート listenaddr=自分のIP(127.0.0.1じゃないほう)
13 2月, 2022

iptablesを使ったポート転送

[English]

iptablesを使って下図のようにポート転送を設定。

 

1.Linuxで転送設定を追加

# sysctl -w net.ipv4.ip_forward=1
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

2.iptablesの定義を追加

#iptables -t nat -A PREROUTING -m tcp -p tcp --dst WAITING_ADDR --dport WAITING_PORT -j DNAT --to-destination DET_ADDR:DEST_PORT
#iptables -t nat -A POSTROUTING -m tcp -p tcp --dst DEST_ADDR --dport DEST_PORT -j SNAT --to-source WAITING_ADDR
13 2月, 2022

Salseforceのデータをcurlで取得

[English]

1.Using refreshtoken

#!/bin/sh

MY_INSTANCE="miura2-dev-ed"
CLIENT_ID="*** your client id ***"
CLIENT_SECRET="*** your client secret ***"
REFRESH_TOKEN="*** your refresh token ***"

#----------------------------------------------
# Get Access token from Refresh token.
#----------------------------------------------
RESULT=`curl -X POST https://$MY_INSTANCE.my.salesforce.com/services/oauth2/token -d "grant_type=refresh_token" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "refresh_token=$REFRESH_TOKEN"`

ACCESS=`echo $RESULT | awk 'BEGIN{FS="access_token\":"}{print $2}' |awk 'BEGIN{FS=","}{print $1}' | sed -s 's/\"//g'`

#----------------------------------------------
#Get data using Access token
#----------------------------------------------
curl -s https://$MY_INSTANCE.my.salesforce.com/services/data/v52.0/sobjects/Account -H "Authorization: Bearer $ACCESS" -H "Content-type: application/json"

 

リフレッシュトークン自体を取得するには、Salesforceでリフレッシュトークを取得する を参照のこと。