加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl判断ipv6,ipv4,ip

发布时间:2020-12-16 00:37:14 所属栏目:大数据 来源:网络整理
导读:前些日子做网页时,用js写了个判断ipv6的函数,最近把它改为perl实现,大家可以随便使用 。 下面这个本程序的功能为判断一个字符串是不是ip,是ipv4还是ipv6: ? ? 程序代码如下: ? #本程序的功能为判断一个字符串是不是ip,是ipv4还是ipv6 ? ? # 以下是用来将

前些日子做网页时,用js写了个判断ipv6的函数,最近把它改为perl实现,大家可以随便使用

下面这个本程序的功能为判断一个字符串是不是ip,是ipv4还是ipv6:

?

?

程序代码如下:

?

 
 
  1. #本程序的功能为判断一个字符串是不是ip,是ipv4还是ipv6 ?
  2. ?
  3. #  以下是用来将?IPv6?地址表示为文本字符串的三种常规形式: ?
  4. ?
  5. #冒号十六进制形式 ?
  6. ?
  7. #  这是首选形式?n:n:n:n:n:n:n:n。每个?n?都表示八个?16?位地址元素之一的十六进制值。例如:? ?
  8. ?
  9. #  3FFE:FFFF:7654:FEDA:1245:BA98:3210:4562. ?
  10. ?
  11. #压缩形式 ?
  12. ?
  13. #  由于地址长度要求,地址包含由零组成的长字符串的情况十分常见。为了简化对这些地址的写入, ?
  14. ?
  15. #?可以使用压缩形式,在这一压缩形式中,多个?0?块的单个连续序列由双冒号符号?(::)?表示。此符号只能在地址中出现一 ?
  16. ?
  17. # ?
  18. ?
  19. #次。例如,多路广播地址?FFED:0:0:0:0:BA98:3210:4562?的压缩形式为?FFED::BA98:3210:4562。 ?
  20. ?
  21. #单播地址? ?
  22. ?
  23. #3FFE:FFFF:0:0:8:800:20C4:0?的压缩形式为?3FFE:FFFF::8:800:20C4:0。 ?
  24. ?
  25. #环回地址?0:0:0:0:0:0:0:1?的压缩形式为?::1。 ?
  26. ?
  27. #未指定的地址?0:0:0:0:0:0:0:0?的压缩形式为?::。 ?
  28. ?
  29. #混合形式 ?
  30. ?
  31. #  此形式组合?IPv4?和?IPv6?地址。在此情况下,地址格式为?n:n:n:n:n:n:d.d.d.d, ?
  32. ?
  33. #其中每个?n?都表示六个?IPv6?高序位?16?位地址元素之一的十六进制值,每个?d?都表示?IPv4?地址的十进制值。 ?
  34. ?
  35. #@author?yifangyou ?
  36. ?
  37. #@version?gslb?2011-03-23? ?
  38. ?
  39. ?
  40. @testIP=("1.1.1.1","255.255.255.255","1.-2.3.4","a.b.c.d","CDCD:910A:2222:5498:8475:1111:3900:2020","::","::g","F:F:F::1:1","F:F:10F::","::F:F:10F","F:E:E:A:B:C:10.0.0.1","F:E:E:A:B:C:10.0.a.1","F::10.0.0.1","F:::10.0.0.1","::10.0.0.1"); ?
  41. for?my?$ip?(@testIP)?{ ?
  42. ????my?$result=isIP($ip); ?
  43. ????if($result){ ?
  44. ????????print?"[$ip]?is?ipv$resultn"; ?
  45. ????}else{ ?
  46. ????????print?"[$ip]?is?not?ipn"; ?
  47. ????} ?
  48. } ?
  49. ?
  50. #计算CDCD:或者:2222的个数 ?
  51. ?
  52. #@author?yifangyou ?
  53. ?
  54. #@version?gslb?2011-03-23 ?
  55. ?
  56. #@return?0:表示没有找到,>0表示替换了多少个 ?
  57. ?
  58. sub?cLength{ ?
  59. ????my?$s=?shift; ?
  60. ??return?$s=~?s/([0-9a-f]{1,4}:)|(:[0-9a-f]{1,4})/?/gi;? ?
  61. }? ?
  62. ?
  63. #判断ipv4格式 ?
  64. ?
  65. #@author?yifangyou ?
  66. ?
  67. #@version?gslb?2011-03-23? ?
  68. ?
  69. #@return?0:表示不是ip,4:表示ipv4,6:表示ipv6 ?
  70. ?
  71. sub?isIP{ ?
  72. ????my?$tmpstr=shift;? ?
  73. ????if(isIPv4($tmpstr)){ ?
  74. ????????return?4; ?
  75. ????} ?
  76. ????if(isIPv6($tmpstr)){ ?
  77. ????????return?6;???? ?
  78. ????} ?
  79. ????return?0; ?
  80. } ?
  81. ?
  82. #判断ipv4格式 ?
  83. ?
  84. #@author?yifangyou ?
  85. ?
  86. #@version?gslb?2011-03-23? ?
  87. ?
  88. #@return?0:表示不是ipv4,1:表示ipv4 ?
  89. ?
  90. sub?isIPv4 ?
  91. { ?
  92. ????my?$tmpstr=shift;? ?
  93. ????if(@matches=$tmpstr=~/^(d{1,3}).(d{1,3})$/i) ?
  94. ??{ ?
  95. ????????if($matches[0]<=255?&&?$matches[1]<=255?&&$matches[2]<=255?&&?$matches[3]<=255){ ?
  96. ????????????????return?1; ?
  97. ????????????} ?
  98. ??} ?
  99. ??return?0; ?
  100. } ?
  101. ?
  102. #判断ipv6格式 ?
  103. ?
  104. #@author?yifangyou ?
  105. ?
  106. #@version?gslb?2011-03-23????? ?
  107. ?
  108. #@return?0:表示不是ipv6,1:表示ipv6 ?
  109. ?
  110. sub?isIPv6 ?
  111. { ?
  112. ?????my?$tmpstr=shift;? ?
  113. ????? ?
  114. #????????判断CDCD:910A:2222:5498:8475:1111:3900:2020? ?
  115. ?
  116. ????if($tmpstr=~/^([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$/i){ ?
  117. ????????return?1; ?
  118. ????} ?
  119. #????????判断:: ?
  120. ?
  121. ????if($tmpstr=~/^::$/i){ ?
  122. ????????????return?1; ?
  123. ????} ?
  124. #????????F:F:F::1:1?F:F:F:F:F::1?F::F:F:F:F:1格式? ?
  125. ?
  126. ????if($tmpstr=~/^(([0-9a-f]{1,4}:){1,6})((:[0-9a-f]{1,4}){1,6})$/i){ ?
  127. ????????my?$c=cLength($tmpstr); ?
  128. ????????if($c>0?&&?$c<=7){ ?
  129. ????????????return?1; ?
  130. ????????} ?
  131. ????} ?
  132. ???????????????????????? ?
  133. #????????F:F:10F:: ?
  134. ?
  135. ????if($tmpstr=~/^([0-9a-f]{1,7}:$/i){ ?
  136. ????????return?1; ?
  137. ????} ?
  138. ???? ?
  139. #????????::F:F:10F ?
  140. ?
  141. ????if($tmpstr=~/^:(:[0-9a-f]{1,7}$/i){ ?
  142. ????????return?1; ?
  143. ????} ?
  144. ???????? ?
  145. #????????F:E:E:A:B:C:10.0.0.1格式 ?
  146. ?
  147. ????????if(@matches=$tmpstr=~/^([0-9a-f]{1,4}:){6}(d{1,3}.d{1,3})$/i){ ?
  148. ????????if(isIPv4($matches[1])){ ?
  149. ????????????????return?1; ?
  150. ????????????} ?
  151. ????} ?
  152. ?
  153. #?F::10.0.0.1格式 ?
  154. ?
  155. ????????if(@matches=$tmpstr=~/^([0-9a-f]{1,5}:(d{1,3})$/i){ ?
  156. ????????if(isIPv4($matches[1])){ ?
  157. ????????????????return?1; ?
  158. ????????????} ?
  159. ????}???????? ?
  160. #????????::10.0.0.1格式 ?
  161. ?
  162. ????????if(@matches=$tmpstr=~/^::(d{1,3})$/i){ ?
  163. ????????if(isIPv4($matches[0])){ ?
  164. ????????????????return?1; ?
  165. ????????????} ?
  166. ????} ?
  167. ????????return?0; ?
  168. }?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读