예제 #1
0
 public bool IsHit(Ip ip)
 {
     Acl target = null;
     if (ip.InetKind == InetKind.V4) {//IPv4
         foreach (var p in _arV4.Where(p => p.IsHit(ip))) {
             target = p;
             break;
         }
     } else {//IPv6
         foreach (var p in _arV6.Where(p => p.IsHit(ip))) {
             target = p;
             break;
         }
     }
     if (_enableEsmtp == 0 && target != null) {
         if (_logger != null){
             _logger.Set(LogKind.Detail, null, 26, string.Format("user:{0} address:{1}", target.Name, ip));
         }
         return false; //適用除外
     }
     if (_enableEsmtp == 1 && target == null) {
         if (_logger != null){
             _logger.Set(LogKind.Detail, null, 26, string.Format("address:{0}", ip));
         }
         return false;//適用除外
     }
     return true;
 }
예제 #2
0
 public MlEnvelope(MailAddress from, MailAddress to, string host, Ip addr)
 {
     From = from;
     To = to;
     Host = host;
     Addr = addr;
 }
예제 #3
0
파일: MailInfo.cs 프로젝트: jsakamoto/bjd5
        public MailInfo(string fileName)
        {
            Clear();//初期値
            if (!File.Exists(fileName))
                return;
            try {
                using (var sr = new StreamReader(fileName, Encoding.GetEncoding("ascii"))) {
                    Uid = sr.ReadLine();
                    Size = Convert.ToInt64(sr.ReadLine());
                    Host = sr.ReadLine();
                    Addr = new Ip(sr.ReadLine());
                    Date = sr.ReadLine();
                    RetryCounter = Convert.ToInt32(sr.ReadLine());
                    var ticks = Convert.ToInt64(sr.ReadLine());
                    _dt = new DateTime(ticks);
                    From = new MailAddress(sr.ReadLine());
                    To = new MailAddress(sr.ReadLine());

                    sr.Close();
                }

                int index = fileName.LastIndexOf("DF_");
                if (index != -1)
                    FileName = fileName.Substring(index + 3);
            } catch {
                Clear();//初期値
            }
        }
예제 #4
0
        //サーバ側若しくはクライアント側どちらかのSockTcpは、Listen状態で生成が終わっている
        //そして、その接続の待ち受け開始は、このクラスの中で行われる
        //接続が完了した後、反対側のサーバ(Ip,port)へ、コネクトする
        public DataThread(Kernel kernel, Logger logger, int clientPort, int serverPort, Ip bindAddr, Ip ip, int port, int timeout)
        {
            _kernel = kernel;
            _logger = logger;

            _timeout = timeout;

            _ip = ip;
            _port = port;

            _sock[CS.Client] = null;
            _sock[CS.Server] = null;

            if (serverPort != 0) { //サーバ側がListen状態の場合 PASV
                _sock[CS.Server] = SockServer.CreateConnection(kernel,bindAddr,serverPort,null,this);
                if (_sock[CS.Server] == null)
                    return;
            } else if (clientPort != 0) { //クライアント側がListen状態の場合 PORT
                _sock[CS.Client] = SockServer.CreateConnection(kernel,bindAddr, clientPort, null,this);
                if (_sock[CS.Client] == null)
                    return;
            }
            //パイプスレッドの生成
            _t = new Thread(Pipe) {
                IsBackground = true
            };
            _t.Start();
        }
예제 #5
0
            public void getLocalAddress(String title, ProtocolKind protocolKind)
            {
                var bindIp = new Ip(IpKind.V4Localhost);
                const int port = 9991;
                const int listenMax = 10;
                Ssl ssl = null;

                var sockServer = new SockServer(new Kernel(),protocolKind,ssl);

                ThreadStart action = () =>{
                    if (protocolKind == ProtocolKind.Tcp){
                        sockServer.Bind(bindIp, port, listenMax);
                    }else{
                        sockServer.Bind(bindIp, port);
                    }};

                var _t = new Thread(action) { IsBackground = true };
                _t.Start();

                while (sockServer.SockState == SockState.Idle){
                    Thread.Sleep(200);
                }

                var localAddress = sockServer.LocalAddress;
                Assert.That(localAddress.ToString(), Is.EqualTo("127.0.0.1:9991"));
                //bind()後 localAddressの取得が可能になる

                var remoteAddress = sockServer.RemoteAddress;
                Assert.IsNull(remoteAddress);
                //SockServerでは、remoteAddressは常にnullになる

                sockServer.Close();
            }
예제 #6
0
        public void Echoサーバにsendしてlength分ずつRecvする()
        {
            //setUp
            const string addr = "127.0.0.1";
            const int port = 53;
            var echoServer = new EchoServer(addr, port);
            echoServer.Start();

            const int timeout = 3;

            const int max = 1500;
            const int loop = 10;
            var tmp = new byte[max];
            for (int i = 0; i < max; i++){
                tmp[i] = (byte) i;
            }

            var ip = new Ip(addr);
            for (var i = 0; i < loop; i++){
                var sockUdp = new SockUdp(new Kernel(), ip, port, null, tmp);
            //                while (sockUdp.Length() == 0){
            //                    Thread.Sleep(10);
            //                }
                var b = sockUdp.Recv(timeout);

                //verify
                for (var m = 0; m < max; m += 10){
                    Assert.That(b[m], Is.EqualTo(tmp[m])); //送信したデータと受信したデータが同一かどうかのテスト
                }
                sockUdp.Close();
            }

            //TearDown
            echoServer.Stop();
        }
예제 #7
0
파일: OneFetch.cs 프로젝트: jsakamoto/bjd5
        public OneFetch(int interval, string host, int port, string user, string pass, string localUser, int synchronize, int keepTime)
        {
            Interval = interval;
            Host = host;
            Port = port;
            User = user;
            Pass = pass;
            LocalUser = localUser;
            Synchronize = synchronize;
            KeepTime = keepTime;

            Ip = null;
            try{
                Ip = new Ip(Host);
            } catch (Exception){
                var tmp = Lookup.QueryA(Host);
                try{
                    if (tmp.Count > 0)
                        Ip = new Ip(tmp[0]);
                } catch (Exception){
                    Ip = null;
                }

            }
        }
예제 #8
0
        public void TotalTest()
        {
            const int max = 5; //制限回数5回
            var sec = 1;//期間1秒
            var ip = new Ip("192.168.0.1");
            var o = new AttackDb(sec, max);
            for (int i = 0; i < max - 1; i++)
                Assert.AreEqual(o.IsInjustice(false, ip), false);
            Assert.AreEqual(o.IsInjustice(false, ip), true);//maxを超えると不正アクセスと判断される
            Assert.AreEqual(o.IsInjustice(true, ip), false);//認証成功(蓄積された情報は破棄される)
            Assert.AreEqual(o.IsInjustice(false, ip), false);//正常アクセス 1回目の失敗

            o = new AttackDb(sec, max);

            for (int i = 0; i < max - 1; i++)
                Assert.AreEqual(o.IsInjustice(false, ip), false);
            Thread.Sleep(1000);//1秒経過(蓄積された情報は時間経過で破棄される)
            Assert.AreEqual(o.IsInjustice(false, ip), false);//不正アクセス

            sec = 2;//期間を2秒に設定する
            o = new AttackDb(sec, max);

            for (int i = 0; i < max - 1; i++)
                Assert.AreEqual(o.IsInjustice(false, ip), false);
            Thread.Sleep(1000);//1秒経過
            Assert.AreEqual(o.IsInjustice(false, ip), true);//指定時間が経過していない場合、不正アクセスと判断される
        }
예제 #9
0
        public void new及びstart_stop_disposeの繰り返し_負荷テスト()
        {
            var ip = new Ip(IpKind.V4Localhost);
            var oneBind = new OneBind(ip, ProtocolKind.Tcp);
            Conf conf = TestUtil.CreateConf("OptionSample");
            conf.Set("port", 88);
            conf.Set("multiple", 10);
            conf.Set("acl", new Dat(new CtrlType[0]));
            conf.Set("enableAcl", 1);
            conf.Set("timeOut", 3);

            for (var i = 0; i < 5; i++){
                var myServer = new MyServer(conf, oneBind);

                myServer.Start();
                Assert.That(myServer.ThreadBaseKind, Is.EqualTo(ThreadBaseKind.Running));
                Assert.That(myServer.SockState(),  Is.EqualTo(SockState.Bind));

                myServer.Stop();
                Assert.That(myServer.ThreadBaseKind,  Is.EqualTo(ThreadBaseKind.After));
                Assert.That(myServer.SockState(), Is.EqualTo(SockState.Error));

                myServer.Dispose();
            }
        }
예제 #10
0
파일: OneLease.cs 프로젝트: jsakamoto/bjd5
        public OneLease(Ip ip)
        {
            MacAppointment = false;//MAC指定なし
            Init();

            Ip = ip;
        }
예제 #11
0
        // (隠蔽)コンストラクタ
        //インターフェース状態を読み込んでリストを初期化する
        private LocalAddress()
        {
            Init(); //初期化
            _v4.Add(new Ip(IpKind.InAddrAny));
            _v6.Add(new Ip(IpKind.In6AddrAnyInit));

            var nics = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface nic in nics) {
                if (nic.OperationalStatus != OperationalStatus.Up)
                    continue;
                var props = nic.GetIPProperties();
                foreach (var info in props.UnicastAddresses) {
                    if (info.Address.AddressFamily == AddressFamily.InterNetwork) {
                        _v4.Add(new Ip(info.Address.ToString()));
                    } else if (info.Address.AddressFamily == AddressFamily.InterNetworkV6) {
                        if (info.Address.IsIPv6LinkLocal == false && info.Address.IsIPv6Multicast == false && info.Address.IsIPv6SiteLocal == false){
                            var s = info.Address.ToString();
                            try{
                                var ip = new Ip(s);
                                _v6.Add(ip);
                            } catch (ValidObjException) {
                                //システムから返された文字列でIpを初期化して例外が出るという事は、実行時例外とするしかない
                                Util.RuntimeException(String.Format("inetAddress={0}", s)); //実行時例外
                            }
                        }
                    }
                }
            }
        }
예제 #12
0
        //コンストラクタ(リモートから受信した文字列による初期化)<br>
        //remoteStr()で作成された文字列以外が挿入された場合、リスク回避のため、初期化失敗としてオブジェクトを利用を禁止する<br>
        //Remoteから取得した文字列でオブジェクトを生成する
        public LocalAddress(string str)
        {
            Init(); //初期化

            var tmp = str.Split('\t');
            if (tmp.Length != 2){
                ThrowException(str); //例外終了
            }

            foreach (var s in tmp[0].Split(new[]{'\b'}, StringSplitOptions.RemoveEmptyEntries)){
                try{
                    var ip = new Ip(s);
                    _v4.Add(ip);
                } catch (ValidObjException) {
                    ThrowException(str); //例外終了
                }
            }
            foreach (var s in tmp[1].Split(new[]{'\b'}, StringSplitOptions.RemoveEmptyEntries)){
                try{
                    var ip = new Ip(s);
                    _v6.Add(ip);
                } catch (ValidObjException) {
                    ThrowException(str); //例外終了
                }
            }
        }
예제 #13
0
파일: OneTrace.cs 프로젝트: jsakamoto/bjd5
 public OneTrace(TraceKind traceKind, string str, int threadId, Ip ip)
 {
     TraceKind = traceKind;
     Str = str;
     ThreadId = threadId;
     Ip = ip;
 }
예제 #14
0
            public void startStop(String title, ProtocolKind protocolKind)
            {
                var bindIp = new Ip(IpKind.V4Localhost);
                const int port = 8881;
                const int listenMax = 10;
                Ssl ssl= null;

                var sockServer = new SockServer(new Kernel(),protocolKind,ssl);

                Assert.That(sockServer.SockState, Is.EqualTo(SockState.Idle));

                ThreadStart action = () =>  {
                    if (protocolKind == ProtocolKind.Tcp){
                        sockServer.Bind(bindIp, port, listenMax);
                    } else{
                        sockServer.Bind(bindIp, port);
                    }
                };

                var _t = new Thread(action) { IsBackground = true };
                _t.Start();

                while (sockServer.SockState == SockState.Idle){
                    Thread.Sleep(100);
                }
                Assert.That(sockServer.SockState, Is.EqualTo(SockState.Bind));
                sockServer.Close(); //bind()にThreadBaseのポインタを送っていないため、isLifeでブレイクできないので、selectで例外を発生させて終了する
                Assert.That(sockServer.SockState, Is.EqualTo(SockState.Error));
            }
예제 #15
0
파일: MailSave.cs 프로젝트: jsakamoto/bjd5
        //Server及びMlから使用される
        //メールの保存(宛先はML以外であることが確定してから使用する)
        //テスト用のモックオブジェクト(TsMailSaveでSave()をオーバーライドできるようにvirtualにする
        public virtual bool Save(MailAddress from, MailAddress to, Mail orgMail, string host, Ip addr)
        {
            //Mailのヘッダ内容等を変更するので、この関数内だけの変更にとどめるため、テンポラリを作成する
            var mail = new Mail(); //orgMail.CreateClone();
            mail.Init2(orgMail.GetBytes());

            //ユニークなID文字列の生成
            var uidStr = string.Format("bjd.{0:D20}.{1:D3}", DateTime.Now.Ticks, _idCounter++);
            //日付文字列の生成
            //var date = Util.LocalTime2Str(DateTime.Now);
            //Receivedヘッダの追加
            mail.AddHeader("Received", _receivedHeader.Get(to, host, addr));

            //            //Message-Idの追加
            //            if (null == mail.GetHeader("Message-ID"))
            //                mail.AddHeader("Message-ID", string.Format("<{0}@{1}>", uidStr, _domainList[0]));
            //            //Fromの追加
            //            if (null == mail.GetHeader("From"))
            //                mail.AddHeader("From", string.Format("<{0}>", @from));
            //            //Dateの追加
            //            if (null == mail.GetHeader("Date"))
            //                mail.AddHeader("Date", string.Format("{0}", date));

            //ローカル宛(若しくはローカルファイル)
            if (to.IsLocal(_domainList)) {

                //ローカル保存の場合は、X-UIDLを追加する
                mail.AddHeader("X-UIDL", uidStr);

                //ヘッダを追加してサイズが変わるので、ここで初期化する
                var mailInfo = new MailInfo(uidStr, mail.Length, host, addr, from, to);

                if (to.IsFile()) {  //ローカルファイルの場合(直接ファイルにAppendする)
                    if (!_localBox.Save(to,mail,mailInfo)){
                        return false;
                    }
                } else { //ローカルユーザの場合(メールボックスへSaveする)
                    if (!_mailBox.Save(to.User, mail, mailInfo)){
                        return false;
                    }
                }
                _logger.Set(LogKind.Normal, null, 8, mailInfo.ToString());
            } else {
                //Toの追加
            //                if (null == mail.GetHeader("To")) {
            //                    mail.AddHeader("To", string.Format("<{0}>", to));
            //                }

                //ヘッダを追加してサイズが変わるので、ここで初期化する
                var mailInfo = new MailInfo(uidStr, mail.Length, host, addr, from, to);
                if (!_mailQueue.Save(mail, mailInfo)) {
                    _logger.Set(LogKind.Error, null, 9000059, mail.GetLastError());
                    return false;
                }
                _logger.Set(LogKind.Normal, null, 9, mailInfo.ToString());

            }
            return true;
        }
예제 #16
0
파일: OneLease.cs 프로젝트: jsakamoto/bjd5
        public OneLease(Ip ip, Mac mac)
        {
            MacAppointment = true;//MAC指定あり
            Init();

            Ip = ip;
            Mac = mac;
        }
예제 #17
0
 //クライアント側への送信
 public void AddTrace(TraceKind traceKind, string str, Ip ip)
 {
     if (!OpenTraceDlg)
         return;
     var threadId = GetCurrentThreadId();
     var buffer = string.Format("{0}\b{1}\b{2}\b{3}", traceKind.ToString(), threadId.ToString(), ip, str);
     //トレース(S->C)
     RemoteData.Send(_sockTcp, RemoteDataKind.DatTrace, buffer);
 }
예제 #18
0
        public SmtpClient(Ip ip, int port, int sec, ILife iLife)
        {
            _ip = ip;
            _port = port;
            _sec = sec;
            _iLife = iLife;

            Status = SmtpClientStatus.Idle;
        }
예제 #19
0
파일: RrATest.cs 프로젝트: jsakamoto/bjd5
 public void GetIpの確認()
 {
     //setUp
     var expected = new Ip("127.0.0.1");
     var sut = new RrA("aaa.com", 0, expected);
     //exercise
     var actual = sut.Ip;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #20
0
파일: Lease.cs 프로젝트: jsakamoto/bjd5
 //DISCOVER����
 public Ip Discover(Ip requestIp, uint id, Mac mac)
 {
     int i = SearchDiscover(requestIp, id, mac);
     if (i != -1) {
         ar[i].SetReserve(id, mac);
         // ���N�G�X�g���ꂽIP�ȊO���������ꂽ�ꍇ�����
         return ar[i].Ip;
     }
     return null;
 }
예제 #21
0
파일: IpTest.cs 프로젝트: jsakamoto/bjd5
 public void AddrV4の検証(string ipStr,uint ip)
 {
     //setUp
     var sut = new Ip(ipStr);
     var expected = ip;
     //exercise
     var actual = sut.AddrV4;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #22
0
파일: IpTest.cs 프로젝트: jsakamoto/bjd5
 public void AddrV4で取得した値からIpオブジェクトを再構築する(string ipStr)
 {
     //setUp
     var sut = new Ip((new Ip(ipStr)).AddrV4);
     var expected = ipStr;
     //exercise
     var actual = sut.ToString();
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #23
0
파일: TestUtil.cs 프로젝트: jsakamoto/bjd5
 //private static String lastBanner = "";
 //テスト用のIpオブジェクトの生成<br>
 //パラメータ不良による制外発生をAssertで吸収
 public static Ip CreateIp(String ipStr)
 {
     Ip ip = null;
     try{
         ip = new Ip(ipStr);
     } catch (ValidObjException e){
         Assert.Fail(e.Message);
     }
     return ip;
 }
예제 #24
0
 public OneSmtpServer(string targetServer, Ip ip, int port, bool useSmtp, string user, string pass, bool ssl)
 {
     TargetServer = targetServer;
     Ip = ip;
     Port = port;
     UseSmtp = useSmtp;
     User = user;
     Pass = pass;
     Ssl = ssl;
 }
예제 #25
0
파일: PopClient.cs 프로젝트: jsakamoto/bjd5
        public PopClient(Kernel kernel,Ip ip,int port,int sec,ILife iLife)
        {
            _kernel = kernel;
            _ip = ip;
            _port = port;
            _sec = sec;
            _iLife = iLife;

            Status = PopClientStatus.Idle;
        }
예제 #26
0
 public void GetIpの確認()
 {
     //setUp
     var expected = new Ip("2001:200:dff:fff1:216:3eff:feb1:44d7");
     var sut = new RrAaaa("www.com", 0, expected);
     //exercise
     var actual = sut.Ip;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #27
0
파일: ProxyTest.cs 프로젝트: jsakamoto/bjd5
 public void SetUp()
 {
     var kernel = new Kernel();
     var ip = new Ip("127.0.0.1");
     const int port = 0;
     Ssl ssl = null;
     var tcpObj = new SockTcp(new Kernel(), ip,port,3,ssl);
     var upperProxy = new UpperProxy(false, "", 0, null,false,"","");//上位プロキシ未使用
     const int timeout = 3;
     _proxy = new Proxy(kernel, null, tcpObj, timeout,upperProxy);
 }
예제 #28
0
파일: TraceDlg.cs 프로젝트: jsakamoto/bjd5
        //トレースの追加(SockObj内から使用される)
        public void AddTrace(TraceKind traceKind, string str, Ip ip)
        {
            if (!Visible)
                return;
            var threadId = GetCurrentThreadId();

            //トレースの追加(内部共通処理)
            lock (this) {
                _ar.Add(new OneTrace(traceKind, str, threadId, ip));
            }
        }
예제 #29
0
파일: IpTest.cs 프로젝트: jsakamoto/bjd5
 public void AddrV6の検証(string ipStr, ulong v6h,ulong v6l)
 {
     //setUp
     var sut = new Ip(ipStr);
     //exercise
     ulong h = sut.AddrV6H;
     ulong l = sut.AddrV6L;
     //verify
     Assert.That(h, Is.EqualTo(v6h));
     Assert.That(l, Is.EqualTo(v6l));
 }
예제 #30
0
 //認証されているかどうかのチェック
 public bool Auth(Ip addr)
 {
     if (_usePopBeforeSmtp) {
         var span = DateTime.Now - _mailBox.LastLogin(addr);//最終ログイン時刻からの経過時間を取得
         //var sec = (int)span.TotalSeconds;//経過秒
         var sec = span.TotalSeconds;//経過秒
         if (0 < sec && sec < _timePopBeforeSmtp) {
             return true;//認証されている
         }
     }
     return false;
 }
예제 #31
0
파일: BindAddr.cs 프로젝트: schifflee/bjd5
 //デフォルト値の初期化
 protected override sealed void Init()
 {
     BindStyle = BindStyle.V4Only;
     IpV4      = new Ip(IpKind.InAddrAny);
     IpV6      = new Ip(IpKind.In6AddrAnyInit);
 }
예제 #32
0
파일: BindAddr.cs 프로젝트: schifflee/bjd5
 //コンストラクタ
 public BindAddr(BindStyle bindStyle, Ip ipV4, Ip ipV6)
 {
     BindStyle = bindStyle;
     IpV4      = ipV4;
     IpV6      = ipV6;
 }