/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 2 1 ĠNet Found ry ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . open z iti . util Ċ Ċ import Ġjava . net . Inet 6 Address Ċ import Ġjava . net . Inet Address Ċ Ċ object ĠIP Util Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠisValid IPv 4 ( host : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoct ets Ġ= Ġhost . split ('.') ĊĠĠĠĠĠĠĠ Ġif Ġ( oct ets . size Ġ!= Ġ 4 ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġoct ets . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġit . toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ?. let Ġ{ Ġ( 0 Ġ<= Ġv ) Ġand Ġ( v Ġ<= Ġ 2 5 5 ) Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġto IPv 4 ( host : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoct ets Ġ= Ġhost . split ('.') ĊĠĠĠĠĠĠĠ Ġrequire Ġ( oct ets . size Ġ== Ġ 4 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġoct ets . map Ġ{ Ġit . toInt () Ġ}. map Ġ{ Ġv Ġ-> Ġcheck (( 0 Ġ<= Ġv ) Ġand Ġ( v Ġ<= Ġ 2 5 5 )); Ġ( v Ġand Ġ 0 xff ). to Byte ()}. toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠisValid IPv 6 ( host : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( host . isEmpty () Ġ|| Ġhost [ 0 ] Ġ!= Ġ'[ ') Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Catch ing Ġ{ ĠInet 6 Address . get ByName ( host ) Ġ}. is Success ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġto IPv 6 ( host : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Ġ( host . isEmpty () Ġ|| Ġhost [ 0 ] Ġ!= Ġ'[ ') ĊĠĠĠĠĠĠĠ Ġreturn ĠInet 6 Address . get ByName ( host ). address ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmask For Prefix ( size : ĠInt , Ġprefix : ĠInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠByteArray ( size ) Ġ{ Ġidx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ< Ġprefix Ġ/ Ġ 8 ) Ġ 0 xff . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( idx Ġ== Ġprefix Ġ/ Ġ 8 ) Ġ( 0 xff Ġshl Ġ(( idx Ġ+ Ġ 1 ) Ġ* Ġ 8 Ġ- Ġprefix )). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġto Canonical CIDR ( ip : ĠInet Address , Ġbits : ĠInt ): ĠInet Address Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( ip . address . size ) ĊĠĠĠĠĠĠĠ Ġval Ġmask Ġ= Ġmask For Prefix ( bytes . size , Ġbits ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġbytes . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbytes [ i ] Ġ= Ġ( mask [ i ]. toInt () Ġand Ġip . address [ i ]. toInt ()). to Byte () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠInet Address . getBy Address ( bytes ) ĊĠĠĠ Ġ} Ċ }