ITPUB论坛-专业的IT技术社区

标题: IP转换的过程! [打印本页]

作者: myfriend2010    时间: 2007-11-15 19:05
标题: IP转换的过程!
在数据库的开发和管理过程中,时常用到需要查询链接对应的IP地址!
一般都是用这个命令db2 list applications,但是db2的这个命令有一个不合理的地方,就是他显示IP是以16进制的形式,
所以通常需要把进程对应的“应用程序标识”的小数点前的那个字符串,转换成10进制的数来检查IP。

于是乎我写了一个小过程,可以把那个字符串直接转换成ip地址的形式,不敢独享,现公布给大家。

程序如下:

[php]
-- Start of generated script for 169.254.11.164-db2-DW (ccp)
--  Nov-15-2007 at 17:35:12
drop  PROCEDURE CCP.GETIP;
SET SCHEMA CCP     ;

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","CCP";

CREATE PROCEDURE CCP.GETIP
(IN I_IP  VARCHAR(8),
  OUT O_IP VARCHAR(20)
)
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  EXTERNAL ACTION
  OLD SAVEPOINT LEVEL
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  begin
  /*
  --auther:Z.X.T
  --DATE:2007-11-15
  --描述,本过程可以把16进制的IP转换成一般的IP形式
  --I_IP 输入:长度为8的16进制数,如'AABBCCDD'
  --O_IP 输出:ip地址形式如:192.168.1.0
  */
  declare first_IP1 varchar(3);
  declare first_IP2 varchar(3);
  declare first_IP3 varchar(3);
  declare first_IP4 varchar(3);
  declare first_IP11 INTEGER;
  declare first_IP21 INTEGER;
  declare first_IP31 INTEGER;
  declare first_IP41 INTEGER;
  if(I_IP='*N0') then
  set O_IP ='本地';
  return;
  end if;
  if(length(I_IP)!=8)  then
  set O_IP ='输入错误';
  return;
  end if;
  set first_IP1=Ucase(substr(I_IP,1,2));
  set first_IP2=Ucase(substr(I_IP,3,2));
  set first_IP3=Ucase(substr(I_IP,5,2));
  set first_IP4=Ucase(substr(I_IP,7,2));
  set first_IP11=INTEGER(case substr(first_IP1,1,1) when 'A' then '10' when 'B' then '11' when 'C' then '12'
                                                     when 'D' then '13' when 'E' then '14' when 'F' then '15'
                                                                                         when 'G' then '0' else substr(first_IP1,1,1) end)*16
         +INTEGER(case substr(first_IP1,2,1) when 'A' then '10' when 'B' then '11' when 'C' then '12'
                                                                        when 'D' then '13' when 'E' then '14' when 'F' then '15'
                                                                        when 'G' then '0' else substr(first_IP1,2,1) end);


  set first_IP21=INTEGER(case substr(first_IP2,1,1) when 'A' then '10' when 'B' then '11' when 'C' then '12'
                                                     when 'D' then '13' when 'E' then '14' when 'F' then '15'
                                                                                         when 'G' then '0' else substr(first_IP2,1,1) end
                                )*16
         +INTEGER(case substr(first_IP2,2,1) when 'A' then '10' when 'B' then '11' when 'C' then '12'
                                                                        when 'D' then '13' when 'E' then '14' when 'F' then '15'
                                                                        when 'G' then '0' else substr(first_IP2,2,1) end);

                 
  set first_IP31=INTEGER(case substr(first_IP3,1,1) when 'A' then '10' when 'B' then '11' when 'C' then '12'
                                                     when 'D' then '13' when 'E' then '14' when 'F' then '15'
                                                                                         when 'G' then '0' else substr(first_IP3,1,1) end
                                )*16
         +INTEGER(case substr(first_IP3,2,1) when 'A' then '10' when 'B' then '11' when 'C' then '12'
                                                                        when 'D' then '13' when 'E' then '14' when 'F' then '15'
                                                                        when 'G' then '0' else substr(first_IP3,2,1) end);
               
  set first_IP41=INTEGER(case substr(first_IP4,1,1) when 'A' then '10' when 'B' then '11' when 'C' then '12'
                                                     when 'D' then '13' when 'E' then '14' when 'F' then '15'
                                                                                         when 'G' then '0' else substr(first_IP4,1,1) end
                                )*16
         +INTEGER(case substr(first_IP4,2,1) when 'A' then '10' when 'B' then '11' when 'C' then '12'
                                                                        when 'D' then '13' when 'E' then '14' when 'F' then '15'
                                                                        when 'G' then '0' else substr(first_IP4,2,1) end);

  set O_IP=rtrim(char(first_IP11))||'.'||rtrim(char(first_IP21))||'.'||rtrim(char(first_IP31))||'.'||Rtrim(char(first_IP41));
end;

#SYNC 10;
commit;

-- End of generated script for 169.254.11.164-db2-DW (ccp)
----
[/php]
作者: myfriend2010    时间: 2007-11-15 19:06
标题: ok,存储过程完成!下来测试下看看!
[php]
C:\>db2 list applications

授权标识  应用程序名    应用程序    应用程序标识                DB      代理进程
                        句柄                                    名称    序号
-------- -------------- ---------- ------------------------------ -------- -----
CCP      db2bp.exe      341        A9FE0B84.G710.033705103339     DW       1
CCP      QuestCentral.e 325        A9FE0B84.G510.00F5C5102039     DW       1
CCP      QuestCentral.e 323        A9FE0B84.G410.00F5C5102026     DW       1
CCP      QuestCentral.e 302        A9FE0B84.C10F.00F5C5100723     DW       1
CCP      QuestCentral.e 262        A9FE0B84.I50F.00F5C5093513     DW       1
CCP      QuestCentral.e 258        A9FE0B84.I20F.00F5C5093332     DW       1
CCP      QuestCentral.e 186        A9FE0B84.LF0E.00F5C5084450     DW       1
CCP      clemlocal.exe  178        A9FE0BA6.B007.071115083616     DW       7
CCP      QuestCentral.e 82         A9FE0B84.AE0C.00F5C5082400     DW       3
TEST     db2jccWebConta 329        A9FE0B9E.F181.071115102030     CCP_BUSI 12
TEST     QuestCentral.e 320        A9FE0B88.N00C.019845101725     CCP_BUSI 2
TEST     QuestCentral.e 318        A9FE0B88.MD0C.019845101711     CCP_BUSI 1
TEST     db2jccWebConta 317        A9FE0B9E.F081.071115101401     CCP_BUSI 11
TEST     QuestCentral.e 313        A9FE0B88.G20C.019845101424     CCP_BUSI 1
TEST     QuestCentral.e 309        A9FE0B88.F10B.019845101203     CCP_BUSI 1
TEST     QuestCentral.e 306        A9FE0B88.E20B.019845100938     CCP_BUSI 3
TEST     QuestCentral.e 298        A9FE0B88.A90B.019845100509     CCP_BUSI 10


C:\>db2 list applications

授权标识  应用程序名    应用程序    应用程序标识                DB      代理进程
                        句柄                                    名称    序号
-------- -------------- ---------- ------------------------------ -------- -----
CCP      db2bp.exe      341        A9FE0B84.G710.033705103339     DW       1
CCP      QuestCentral.e 325        A9FE0B84.G510.00F5C5102039     DW       1
CCP      QuestCentral.e 323        A9FE0B84.G410.00F5C5102026     DW       1
CCP      QuestCentral.e 302        A9FE0B84.C10F.00F5C5100723     DW       1
CCP      QuestCentral.e 262        A9FE0B84.I50F.00F5C5093513     DW       1
CCP      QuestCentral.e 258        A9FE0B84.I20F.00F5C5093332     DW       1
CCP      QuestCentral.e 186        A9FE0B84.LF0E.00F5C5084450     DW       1
CCP      clemlocal.exe  178        A9FE0BA6.B007.071115083616     DW       7
CCP      QuestCentral.e 82         A9FE0B84.AE0C.00F5C5082400     DW       3
TEST     db2jccWebConta 329        A9FE0B9E.F181.071115102030     CCP_BUSI 13
TEST     QuestCentral.e 320        A9FE0B88.N00C.019845101725     CCP_BUSI 2
TEST     QuestCentral.e 318        A9FE0B88.MD0C.019845101711     CCP_BUSI 1
TEST     QuestCentral.e 313        A9FE0B88.G20C.019845101424     CCP_BUSI 1
TEST     QuestCentral.e 309        A9FE0B88.F10B.019845101203     CCP_BUSI 1
TEST     QuestCentral.e 306        A9FE0B88.E20B.019845100938     CCP_BUSI 3
TEST     QuestCentral.e 298        A9FE0B88.A90B.019845100509     CCP_BUSI 10


C:\>db2 connect to dw

   数据库连接信息

数据库服务器         = DB2/NT 8.2.0
SQL 授权标识         = DB2ADMIN
本地数据库别名       = DW


C:\>db2 call CCP.GETIP('A9FE0B88',?)

  输出参数的值
  --------------------------
  参数名: O_IP
  参数值: 169.254.11.136

  返回状态 = 0


C:\>

----
[/php]
作者: myfriend2010    时间: 2007-11-15 19:07
瞎玩得!希望对大家有帮助!

还有就是有什么bug的话,欢迎提出来!
作者: efan101    时间: 2007-11-16 10:03
那么多case
作者: diablo2    时间: 2007-11-16 11:11
不错,支持。

我给你授个精
作者: myfriend2010    时间: 2007-11-16 11:35
啊,大牛给我加精华了!!!


作者: myfriend2010    时间: 2007-11-16 11:37
最初由 efan101 发布
[B]那么多case [/B]


本来想写一个函数呢!没时间整,过阵子不忙了优化下!!
作者: diablo2    时间: 2007-11-16 11:43
最初由 myfriend2010 发布
[B]啊,大牛给我加精华了!!!

[/B]



NND, 你自己加不好意思吧  
作者: myfriend2010    时间: 2007-11-16 11:49


我不敢!
作者: myfriend2010    时间: 2007-11-16 11:50
对了,既然加精华了,怎么还显示:精华贴数:0
作者: Skorzeny    时间: 2007-11-16 11:54
最初由 myfriend2010 发布
[B]对了,既然加精华了,怎么还显示:精华贴数:0 [/B]

Batch process, not real-time.
作者: efan101    时间: 2007-11-16 14:29
最初由 myfriend2010 发布
[B]

我不敢! [/B]

要勇于为好东西授精!
作者: myfriend2010    时间: 2007-11-16 14:35
这里diablo2是老大,我可啥都不是,还有本来也只是写着玩玩的,没有啥加精不加精的目的!
作者: diablo2    时间: 2007-11-16 16:37
最初由 myfriend2010 发布
[B]这里diablo2是老大[/B]


什么时候我成这里的 山大王了?

作者: myfriend2010    时间: 2007-11-16 17:15
我说的老大,虽然类似于山大王,但却不是山大王,山大王有点俗意!!你是大牛,这是大家公认的阿!




作者: jiangli1984    时间: 2007-11-16 22:22
myfriend2010..
 我的list application
出现如下:
XDZX1    tomcat5.exe    334        PBDE1FDC.H50A.017487001432     XDZX1    1
XDZX1    QuestCentral.e 297        PBDE1E5C.FC09.01F906102737     XDZX1    1
XDZX1    QuestCentral.e 296        PBDE1E5C.FB09.01F906102733     XDZX1    1
XDZX1    QuestCentral.e 186        PBDE1F2E.E808.0110C6085525     XDZX1    1
XDZX1    QuestCentral.e 167        PBDE1F2E.C705.0110C6082629     XDZX1    1
XDZX1    QuestCentral.e 177        PBDE1F2E.B105.0110C6082606     XDZX1    1
XDZX1    QuestCentral.e 178        PBDE1F2E.P705.0110C6082549     XDZX1    1
XDZX1    java.exe       96         PBDE1FDC.C709.0097C6195442     XDZX1    1
其中IP都带P啊,,
应该要改进了哈
作者: myfriend2010    时间: 2007-11-18 18:02
那你讲讲PBDE1FDC对应的IP应该是什么?
作者: ignu    时间: 2007-11-18 21:59
系统有些问题,精华没了
作者: myfriend2010    时间: 2007-11-19 08:58
正在修复!会好的!!
作者: banker    时间: 2007-11-19 15:07
这个东西太酷了!!!
作者: myfriend2010    时间: 2007-11-19 15:58
就是还有一点点bug,因为找不到官方资料,只能以后再改了
作者: lpxunzhaoqq    时间: 2007-12-20 15:42
看不懂啊
作者: bpmfhu    时间: 2007-12-20 16:49
不错
不过在9里面用不着了
作者: macrozeng    时间: 2007-12-20 18:37
v9 中直接显示的就是 IP 了

SAMPLE   db2jcc_application   539  10.1.0.101.14393.071218140212     00003 1   0   766334 UOW Waiting                    Not Collected

[ 本帖最后由 macrozeng 于 2007-12-20 18:38 编辑 ]
作者: myfriend2010    时间: 2007-12-22 20:26
今天发现V9有时候显示IP,有时显示16进制的!
作者: feng2371    时间: 2008-1-29 14:11
厉害
作者: wangzhonnew    时间: 2008-1-29 22:21
恭喜!您刚拣到ITPUB送出的新年红包。112PUB币!
作者: myfriend2010    时间: 2008-1-30 08:28
见面分一半
作者: yyjijiwen    时间: 2008-1-30 15:44
精华一了嘛
作者: ppjava2009    时间: 2012-3-1 15:04
我用的DB2 Express Edition V95 版本list applications显示的是直接的IP地址,不用再转换了,呵呵!

作者: hanbing789    时间: 2012-9-17 10:33
多谢楼主分享!
作者: macrozeng    时间: 2012-9-26 22:00
:-),不错,前几天正好用上
作者: bushixiaxia    时间: 2013-4-24 16:39
支持myfriend2010




欢迎光临 ITPUB论坛-专业的IT技术社区 (http://www.itpub.net/) Powered by Discuz! X3.2