Ip to string

by Cheshir
♥0 | Line 75 | Modified 2014-11-20 23:20:13 | MIT License
play

ActionScript3 source code

/**
 * Copyright Cheshir ( http://wonderfl.net/user/Cheshir )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/jS7A
 */

package {
    import flash.net.URLLoader;
    import flash.text.TextFieldAutoSize;
    import flash.events.IOErrorEvent;
    import flash.events.Event;
    import flash.system.ApplicationDomain;
    import flash.system.SecurityDomain;
    import flash.system.LoaderContext;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {

        public static var hello:TextField = new TextField();
        private var ipAdress:String;
        private var ipCounter:IPCounter;

        public function FlashTest() {
            // write as3 code here..
            // окей, задача стояла преобразовать целочисленный ip в string
            // но это не очень интересно и вообще сделано уже тысячу раз
            // поэтому получим наш ip преобразуем его в целочисленный, а потом обратно
            // получить ip при помощи flash нельзя - политика безопасности
            // поэтому задача становится не тривиальной
            addChild(hello);
            hello.autoSize = TextFieldAutoSize.LEFT;
            hello.text = 'hello';
          
            
            // загрузим по этой ссылке скрипт ПХП
            var url:URLRequest = new URLRequest('http://cheshir.zabix.net/test/getip.php');
            // URL Loader грузит просто что угодно по ссылке... В отличае от Loader
            var ipString:URLLoader = new URLLoader();
            // ожидаем загрузку           
            ipString.addEventListener(Event.COMPLETE, loaded);
            ipString.addEventListener(IOErrorEvent.IO_ERROR, error);
            // командуем загрузить
            ipString.load(url);    // load(url, context);
        }
        private function loaded(e:Event):void{
            hello.text = (e.target as URLLoader).data;
            ipAdress = hello.text;
            var ipInDec:uint = StringIpToInt(ipAdress, false);
            var ipRevert:uint = StringIpToInt(ipAdress);    // баловство просто
            hello.appendText('\n целочисленный десятичный '+ipInDec.toString());
            hello.appendText('\n обратно в строку '+IntToString(ipInDec));
            hello.appendText('\n перевернутый ip адрес просто потому что можно '+IntToString(ipRevert));
            // а потом установим новый ip на сервер
            ipCounter.setIp();
        }
        private function error(e:IOErrorEvent):void {
            hello.text = e.text;
        }

        private function StringIpToInt(ip:String, revert:Boolean=true):uint {
            if(ip)    // нам сообщили ip
            {    // разобъем строку на знаки
                var a:Array = ip.split('.');
                
                var result:uint = 0;
                if(revert){
                    for (var i:int=0; i < a.length; i++)    // каждому разделу в целочисленном формате соответствует 2 разряда 16-ричной системы
                    {// 2 разряда 16-ричной системы это 256 в 10-тичной
                    // пример 109*256^3 + 188*256^2 + 93*256^1 + 159*256^0    где степени - разряды
                        result += a[i]*Math.pow(256,i);    // на самом деле этот код записывает адрес в обратном порядке
                    }
                } else {
                    hello.appendText('\n ip num length '+a.length+' '+a.toString());
                    var k:int = 0;
                    for (var j:int = a.length-1; j >= 0; j--)
                    {
                            result += a[j]*Math.pow(256,k);
                            k++;
                    }
                }
                return result;
            }
            return 0xff;    // fail 255
        }
        private function IntToString(ip:uint):String {
            if(ip)
            {
            var b1:uint = Math.floor( ip / (256*256*256) );            // первое число
            var b2:uint = Math.floor( (ip - b1*(256*256*256)) / (256*256) );        // второе число IP адреса 
            var b3:uint = Math.floor( (ip - b1*(256*256*256) - b2*(256*256)) / 256 ); 
            var b4:uint = ip - b1*(256*256*256) - b2*(256*256) - b3*256;
                return b1+'.'+b2+'.'+b3+'.'+b4;
            }
            return '255';    // fail 255
        }

    }
}