「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 アドレスが取得できる、という紹介はよく見かけるのだが
バグ情報までの紹介はこれが初めてだろう。