ITエンジニアの技術メモ

神奈川在住のITエンジニアの備忘録です。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

jarファイルの署名の削除

テストのため一時的に Java の jarファイルの署名を削除したいことがある。その時の手順について簡単に纏める。 jarファイルを開く。(7zipやWinZipを使用) jarファイルの META-INF ディレクトリ内の署名関係のファイル(*.SF, *.RSA) を削除する。 META-INF …

ifTable と ifXTable

SNMPの標準MIB-2配下には、インタフェースを表すMIBテーブルが2つある。ifTable(.1.3.6.1.2.1.2.2) と ifXTable(.1.3.6.1.2.1.31.1.1) である。 http://www.oidview.com/mibs/0/IF-MIB.html ifXTable は、ifTable の後に拡張版として定義されたものであり、6…

X-Frame-Options レスポンスヘッダについて

httpの X-Frame-Options レスポンスヘッダについて簡単に纏める。 webサーバがクライアント(ブラウザ)に応答を返す際、そのレスポンスヘッダに「X-Frame-Options」を入れることで、ブラウザ側での iframe(フレーム) の制御をコントロールすることができる。 …

Javascript で現在時刻を見やすく出力する。

デバッグの一環で、javascript で現在時刻を入れたログをブラウザのコンソールに出力しようとしたら、現在時刻の取得&見やすい形への整形がちょっと面倒だったので、それ用の関数 getCurrentTimeStr() を作成した。これを呼ぶと、戻り値として「2019/04/07 …

Javaの例外設計

Javaでプログラミングしていると、どこでどの例外をキャッチすべきか悩むことが多い。特にチェック例外はどこかにキャッチ処理を書かないとコンパイルが通らないので、その数が増えるとコードがキャッチ処理で埋め尽くされて煩雑になってしまう。 この悩みに…

nslookupコマンドは hosts ファイルを参照しない。

先日、hosts ファイルを書き換えたものの、それが nslookup コマンドの結果に反映されなかったので「あれ?」と思って調べたら、このコマンドは hosts ファイルを参照しないらしい。 https://tech.nikkeibp.co.jp/it/article/COLUMN/20070312/264620/ https:…

Pythonでグローバル変数を更新する

最近、Pythonの勉強を始めた。Pythonを勉強していくなかで、これまで使ってきた言語 (JavaやPerlやC) と違う点について、少しずつメモしていこうと思う。 まずは、Pythonにおけるグローバル変数の変更について。Pythonで関数内からグローバル変数を変更する…

Javaで時刻間の差分を出す

Javaで引数で受け取った2つの時刻間の差分を出すプログラム(calcTimeDiff)を作成した。ログ解析などをしていて、ログ内のある時刻からある時刻までの正確な経過時間が欲しい時、脳内でいちいち計算するのが面倒だったので、これを作成した。使い方は、 java…

SNMPv1トラップからSNMPv2トラップへの変換

SNMPv1トラップをSNMPv2トラップに変換する方法については、RFC2576に記載がある。 https://www.ietf.org/rfc/rfc2576.txt の「3.1. Translating SNMPv1 Notification Parameters to SNMPv2 Notification Parameters」 上記の中でも snmpTrapOID の扱いはち…

Javaのプロセスに対して外部からGCを実行させる。

Javaのプロセスに対して外部からGC(ガベージ・コレクション)を実行させる方法についてちょっと調べた。幾つか方法があるようだが、自分でやってみてうまくいったのは以下の方法。 jconsole コマンドを実行して立ち上がるGUI上で、対象のJavaプロセスを選択し…

シェル上でコマンドを繰り返し実行する。

Linux のシェル上でコマンドを繰り返し実行したい時は、 while true; do <実施したいコマンド>; sleep <実行間隔>; done と実行する。これにより、<実施したいコマンド> が <実行間隔> で繰り返し実行される。終了させるには、このシェル上で ctrl + c を実…

ネットワーク機器のループバックアドレス

「ループバックアドレス」というと、自分自身を指す 127.0.0.1 (localhost) を思い浮かべる人が多いと思う。 ループバックアドレス(127.0.0.1)とは - IT用語辞典 e-Words しかし、ルータ等のネットワーク機器が持つ「ループバックアドレス」はこれとは異な…

LDAP の bindDN, BaseDN について

LDAPサーバを扱う時、分からない用語がちょくちょく出てくるので、、、ちょっとずつ纏めていきたいと思う。まずは、bindDN と baseDN について。 bindDN:LDAPサーバにログインする時に使用するユーザ。つまり、LDAPサーバへの問い合わせ自体に必要となるユ…

httpリクエストのクエリストリングの値だけをURLエンコードする。

Javaで、httpリクエストのクエリストリングの値だけをURLエンコードするメソッド (encodeQueryValue) を作成した。例えば、 「www.test.local/path/app?name1=aaa&name2=ほげ&name3=ふが」 を引数として与えると、 「www.test.local/path/app?name1=aaa&name…

httpリクエストのHostヘッダ

ApacheやNginxなどのwebサーバには、クライアント(ブラウザ)からのIP直アクセスを検知してアクセス拒否する設定がある、という話を聞いて、 「ブラウザでホスト名を打ち込んでアクセスしたとしても、(DNSで名前解決されて)最終的にIPアドレスによる通信にな…

ファイルを指定したサイズで分割するスクリプト

ファイルを指定したサイズで分割するperlスクリプト (splitFile.pl) を作成した。例えば、巨大なログファイルをエディタで開こうとすると、メモリ不足でまともに見れなくなってしまうので、そんな場合はこのスクリプトで分割してから見ようと思っている。 使…

Dockerのコンテナ内の「OS」について

Dockerのコンテナは「アプリケーションの動作環境を提供する」という説明を良く見かける。この「動作環境」について、コンテナ内にはOSの機能の一部があるのか、それとも、仮想マシンのゲストOSのように、コンテナ内には普通のOS(全体)が再現されているのか…

JavaでSNMPトラップ送信

JavaでSNMPトラップを送信するコードを作成した。snmp4j (https://www.snmp4j.org/) を使用しているので、コンパイル&実行には snmp4j-x.x.x.jar が必要。(実機検証は Java1.8 + snmp4j-2.6.2.jar で実施した) 実行方法 java TrapSender [-v {1|2c|2}] [-a …

ファイルから指定した行間だけを抜き出すスクリプト

ファイルから指定した行間だけを抜き出すスクリプト pickup.pl を作成した。ログファイルなど、非常にサイズの大きいファイルをエディタで見ると、エディタがメモリ不足でまともに動かないことがあるので、必要な行間だけをピックアップして見たい時に使用す…

tarコマンドの戻り値

Linuxの tar コマンドの戻り値には、0, 1, 2 があり、それぞれの意味は以下。 0:成功 1:アーカイブ開始時から、アーカイブ対象のファイルが変更された。 2:失敗 tar(1) - Linux manual page バックアップ・スクリプトなどで tar コマンドによるアーカイブ…

Windowsのシャットダウン・スクリプト

Windowsシャットダウン時に確実にサービスを停止させるための手段として「シャットダウン・スクリプト」というものがある。これについて、簡単に纏める。 OSの通常のシャットダウン処理 (Service Control Managerによる処理) の前に実行される。 シャットダ…

依存関係逆転の原則

オブジェクト指向の「依存関係逆転の原則 (Dependency Inversion Principle)」について簡単に纏めてみる。 例えば、パッケージAとパッケージBあり、パッケージAのクラスがパッケージBのクラスを使用しているとする。ここで、パッケージBの方が変更されること…

CSRFについて

セキュリティ脆弱性の一つであるCSRF (クロス・サイト・リクエスト・フォージェリ) について簡単に纏めてみた。 CSRFを一言で言うと、攻撃者により、webサイトの利用者が意図しないリクエストがwebサイトに対して実行されてしまうセキュリティ脆弱性のこと。…

Windows10環境における「コマンドウィンドウをここで開く」

Windows7環境で良く使っていた、 エクスプローラー ⇒ シフト+右クリック ⇒ コマンドウィンドウをここで開く がWindows10環境ではなくなっているので、ちょっと不便だなあと思って調べたところ、以下の記事を見つけた。 https://www.softantenna.com/wp/tips…

JBossのjbm_* テーブル

JavaアプリケーションのアプリケーションサーバとしてJBossを使用している場合、JBossと連携するDBに jbm_* という名前のテーブルができる場合がある。これが何者なのか調べてみた。 この jbm_* テーブルは、JBoss上のアプリケーションが JMS (Java Messagin…

Javascriptのpromiseパターン

先日、JavaScript の promise パターンで書かれたコードに遭遇した。promise パターンについては、以下のページに詳しく書かれている。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Using_promises https://blogs.msdn.microsoft.com/ie_jp…

完全コンストラクタパターン

オブジェクト指向の勉強をしていて、「完全コンストラクタパターン」というものが出てきた。これは、オブジェクト生成時にコンストラクタに必要な情報を全て渡して、後からそのオブジェクトの状態(フィールド変数)を変更しない設計方式。つまり、オブジェク…

xcopyコマンドが実行できない。

先日、Windowsで xcopyコマンドが実行できない環境に遭遇した。具体的には、xcopy コマンドを実行すると、以下が表示される。 'xcopy' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 このメッ…

JavaのInetAddressクラスのメソッドで名前解決(逆引き)する時は正引きも行われている。

JavaのInetAddressクラスのgetHostName()やgetCanonicalHostName()で、IPアドレスからホスト名への名前解決(逆引き)を実行すると、裏で正引き(ホスト名⇒IPアドレス)も行われるようだ。詳細は以下の通り。InetAddressクラスのソースを確認すると、getHostName…

J2EEのEntity Manager経由でDBから取得したオブジェクト

J2EEのEntity Manager経由でDBから取得したオブジェクトを、そのオブジェクトがEntity Managerの管理下にある状態の時に変更すると、それがDBに反映されるので注意が必要である。 例えば、 User user = entityManager.find(User.class, id); として取得した …