package Ġcom . ast rol uj . inter com . test demo Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Capabilities Ċ import Ġandroid . net . wifi . Wifi Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Patterns Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . net . Inet 4 Address Ċ import Ġjava . net . NetworkInterface Ċ import Ġjava . util . regex . Pattern ĊĊ Ċ class ĠNetwork Utils Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠIP Ġ= Ġ" ipAddress " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMASK Ġ= Ġ" subnet M ast " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠG ATE WAY Ġ= Ġ" gateway " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDNS _ 1 Ġ= Ġ" dns 1 " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDNS _ 2 Ġ= Ġ" dns 2 " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Network ( context : ĠContext ): ĠHashMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Info Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . active Network ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive Ġ= Ġmanager . get Network Capabilities ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġe thernet Ġnetwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive ?. let Ġ{ Ġactive Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( active . has Transport ( Network Capabilities . TRANSPORT _ ETHER NET )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( address Ġin Ġmanager . get Link Properties ( it ) !!. link Addresses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! address . address . is Loop back Address Ġ&& Ġaddress . address . host Address . contains ('. ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġip ĠëĦ £ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ IP ] Ġ= Ġ( address . address . host Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsubnet Ġmask ĠëĦ £ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ MASK ] Ġ= Ġget Subnet Mask ( address . prefix Length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgateway ĠëĦ £ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( address Ġin Ġmanager . get Link Properties ( it ) !!. routes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress . gateway ?. let Ġ{ Ġinet Address Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inet Address . host Address Ġ!= Ġ" 0 . 0 . 0 . 0 ." Ġ&& Ġ! inet Address . host Address . contains (': ')) Ġnetwork Info [ GATE WAY ] Ġ= Ġ( inet Address . host Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdns ĠëĦ £ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( address Ġin Ġmanager . get Link Properties ( it ) !!. dns Servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( network Info [ DNS _ 1 ]. isNull OrEmpty ()) Ġnetwork Info [ DNS _ 1 ] Ġ= Ġ( address . host Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnetwork Info [ DNS _ 2 ] Ġ= Ġaddress . host Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwifi Ġnetwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( active . has Transport ( Network Capabilities . TRANSPORT _ WIFI )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info . put All ( get Wifi Network ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġe thernet Ġnetwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . active Network Info ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . type Ġ== ĠConnect ivity Manager . TYPE _ ETHER NET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġip Prefix Ġ= Ġ(" (( 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ][ 0 - 9 ] |[ 0 - 1 ][ 0 - 9 ]{ 2 } |[ 1 - 9 ][ 0 - 9 ] |[ 1 - 9 ]) \\ .( 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"[ 0 - 9 ] |[ 0 - 1 ][ 0 - 9 ]{ 2 } |[ 1 - 9 ][ 0 - 9 ] |[ 1 - 9 ]| 0 )\\ .( 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ][ 0 - 9 ] |[ 0 - 1 ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"[ 0 - 9 ]{ 2 } |[ 1 - 9 ][ 0 - 9 ] |[ 1 - 9 ]| 0 )\\ .( 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ][ 0 - 9 ] |[ 0 - 1 ][ 0 - 9 ]{ 2 }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |[ 1 - 9 ][ 0 - 9 ] |[ 0 - 9 ]) \\/ \\ d { 0 , 2 }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Cmd Ġ= Ġ" ip Ġroute " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ$ Ġip Ġroute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= ĠRuntime . get Runtime (). exec ( route Cmd ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbr Ġ= ĠBufferedReader ( InputStream Reader ( process . inputStream )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġres Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( br . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ+= Ġline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res . contains (" eth 0 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmatcher Ġ= ĠPattern s . IP _ ADDRESS . matcher ( res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġip ĠëĦ £ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġip Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġip Ġ= Ġmatcher . group () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ IP ] Ġ= Ġip ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsubnet Ġmask ĠëĦ £ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher Ġ= ĠPattern . compile ( ip Prefix ). matcher ( res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprefix Length Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgateway Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġmatcher . group (). split ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgateway Ġ= Ġroute [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Length Ġ= Ġroute [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ MASK ] Ġ= Ġget Subnet Mask ( prefix Length . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgateway ĠëĦ £ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Num Idx Ġ= Ġgateway . lastIndexOf (".") Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgateway Ġ= Ġgateway . substring ( 0 , Ġlast Num Idx ). plus (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ GATE WAY ] Ġ= Ġgateway ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġnetwork Info ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġdns ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Properties Ġ= ĠClass . forName (" android . os . System Properties ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod : ĠMethod Ġ= Ġsystem Properties . getMethod (" get ", ĠString :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( name Ġin ĠarrayOf (" net . dns 1 ", Ġ" net . dns 2 "). with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmethod . invoke ( null , Ġname . value ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotEmpty () Ġ&& Ġ! network Info . contains ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( name . index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġnetwork Info [ DNS _ 1 ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġnetwork Info [ DNS _ 2 ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwifi Ġnetwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( it . type Ġ== ĠConnect ivity Manager . TYPE _ WIFI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info . put All ( get Wifi Network ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnetwork Info ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* Ġget ĠIP Ġaddress ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Network Info (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDevice ìĹĲ ĠìŀĪëĬĶ Ġëª¨ëĵł ĠëĦ ¤íĬ¸ ìĽĮ íģ¬ ìĹĲ ĠëĮĢ íķ´ Ġë º ĳ ë º ĳ ìĿ´ ë¥¼ Ġëı ķ ëĭĪëĭ¤ . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetworks Ġ= ĠNetwork Interface . get Network Interfaces () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( network Ġin Ġnetworks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ëĦ ¤íĬ¸ ìĽĮ íģ¬ Ġì¤ĳ ìĹĲìĦľ ĠIP ê°Ģ Ġíķł ëĭ¹ ëĲľ ĠëĦ ĺ ëĵ¤ ìĹĲ ĠëĮĢ íķ´ìĦľ Ġë º ĳ ë º ĳ ìĿ´ ë¥¼ Ġíķľ Ġë²Ī ĠëįĶ Ġëı ķ ëĭĪëĭ¤ . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnet Interfaces Ġ= Ġnetwork . inet Addresses ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( net Ġin Ġnet Interfaces ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ëĦ ¤íĬ¸ ìĽĮ íģ¬ ìĹĲëĬĶ Ġíķ Ń ìĥģ ĠLocal host Ġì ¦ ī , Ġë £ ¨ íĶĦ ë° ± ( Loop Back ) ì£¼ ìĨĮ ê°Ģ ĠìŀĪ ìľ¼ ë©° , Ġìļ° ë¦¬ ê°Ģ ĠìĽĲ íķĺëĬĶ Ġê²ĥìĿ´ ĠìķĦ ëĭ Ļ ëĭĪëĭ¤ . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// IP ëĬĶ ĠIPv 6 ìĻĢ ĠIPv 4 ê°Ģ ĠìŀĪìĬµëĭĪëĭ¤ . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// IPv 6 ìĿĺ Ġíĺķ íĥľ Ġ: Ġfe 8 0 :: 6 4 b 9 :: c 8 dd : 7 0 0 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// IPv 4 ìĿĺ Ġíĺķ íĥľ Ġ: Ġ 1 2 3 . 2 3 4 . 1 2 3 . 1 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! net . is Loop back Address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( net Ġis ĠInet 4 Address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnet . host Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Wifi Network ( context : ĠContext ): ĠHashMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Info Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdh cp Info Ġ= Ġ( context . application Context . getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ). dhcp Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ IP ] Ġ= Ġget Wifi Address ( dhcp Info . ipAddress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmask ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ MASK ] Ġ= Ġget Wifi Address ( dhcp Info . net mask ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgateway ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ GATE WAY ] Ġ= Ġget Wifi Address ( dhcp Info . gateway ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ DNS _ 1 ] Ġ= Ġget Wifi Address ( dhcp Info . dns 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Info [ DNS _ 2 ] Ġ= Ġget Wifi Address ( dhcp Info . dns 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnetwork Info ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Wifi Address ( addr : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString . format ("% d .% d .% d .% d ", Ġaddr Ġand Ġ 0 xFF , Ġaddr . shr ( 8 ) Ġand Ġ 0 xFF Ġ, Ġaddr . shr ( 1 6 ) Ġand Ġ 0 xFF , Ġaddr . shr ( 2 4 ) Ġand Ġ 0 xFF ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Subnet Mask ( prefix Length : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmask Ġ= Ġ 0 xFFFFFFFF . sh l ( 3 2 Ġ- Ġprefix Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString . format ("% d .% d .% d .% d ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask . shr ( 2 4 ) Ġand Ġ 0 xFF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask . shr ( 1 6 ) Ġand Ġ 0 xFF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask . shr ( 8 ) Ġand Ġ 0 xFF , Ġmask Ġand Ġ 0 xFF ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }