CL

108. QDCRDEVD のバグ報告

「93. PC クライアントの IP アドレスを取得するには?」で説明したように
API : QDCRDEVD を使うとクライアント PC の IP アドレスを取得できることに
なっていて、もちろん IBM Knowledge Center にも紹介されている API であり
これは定番の API として有名である。
これは DSPDEVD(装置記述の表示) の API であり
DSPDEVD を実行すると次のように クライアントの IP アドレスも表示される。

ところが ?! 怪しい。
クライアントの IP アドレスではなくホストの IP アドレス、
つまり IBM i の IP アドレスが入ってしまっている。
調べてみると i5/OS Ver5.4 では正常でありクライアントの IP アドレスが
入っている。
しかし Ver6.1および 7.1 にはホストの IP アドレスが入ってしまっている。
Ver7.2 ではクライアント IP が入っており正常である。
IBM に問い合わせたところ、これは i5/OS のバグであると認めた。
既に PTF が公開されている。

【PTF情報】
APAR SE61152
http://www-01.ibm.com/support/docview.wss?uid=nas2SE61152
PTF SI55958

しかし Ver5.4で正常に動作していたのだから変更しなくても良いと思うのだが。

PTF を適用することがこのバグを回避するのに最も簡単であるが
ソフトウェア製品のプロバイダーではそう簡単に済む話ではない。

幸い、NETSTAT で TCP/IP 接続の一覧を表示してその中で
ジョブを調べて行けばわかる話である。

【NETSTATの画面】3. IPV4 接続状況の処理

この中で「8=ジョブの表示」を選択すると接続中のジョブを調べることができる。

これによって自分のジョブを探せば自分の IP アドレスを知ることができる。
この検索を API でやるとなると

QtocLstNetCnn : ネットワーク接続一覧表
NETSTAT の情報をユーザー・スペースに出力する。
QtocRtvNetCnnDta : 接続データの検索
NETSTAT の明細行のデータを検索する

のふたつの API の処理が必要となる。
もちろん弊社では早急に対処してこれらの API でクライアントの IP アドレスを
確実に取得できるように修正したがあまり見かけない API とあって
結構、労力を要した。

いずれにせよ社内で QDCRDEVD を使っている場合はこのことに注意が必要である。
QDCRDEVD で IP アドレスが取得できる、という紹介はよく見かけるのだが
バグ情報までの紹介はこれが初めてだろう。