Exemple #1
0
 /// <summary>
 /// 指定したIPをReserveItemに新規登録する
 /// </summary>
 /// <param name="_ip"></param>
 public void AddReserve(string _ip)
 {
     // ipが正しい形式かのチェックは呼び出し元でやっておくこと。
     try
     {
         ListViewItem _item = new ListViewItem(_ip);
         _item.SubItems.Add("×");
         _item.SubItems[0].ForeColor = Color.Red;
         // GUIに追加
         Event.EventUpdateReserve(Kagami, _item, 0);
         // 内部管理ReserveItemに追加
         lock (Gui.ReserveItem)
             Gui.ReserveItem.Add(_item);
     }
     catch (Exception ex)
     {
         Front.AddLogDebug("AddReserve", "内部エラー Trace:" + ex.StackTrace);
     }
 }
Exemple #2
0
 /// <summary>
 /// キックIPをStatus.Gui.KickItem(=Form1.kickView)に新規登録
 /// Front.KickListに未登録ならそっちにも登録する
 /// GUIにも通知する
 /// </summary>
 /// <param name="_ip"></param>
 /// <param name="_cnt"></param>
 public void AddKick(string _ip, int _cnt)
 {
     // ipが正しい形式かのチェックは呼び出し元でやっておくこと。
     try
     {
         // Front.KickListへの登録
         if (!Front.KickList.ContainsKey(_ip))
         {
             Front.KickList.Add(_ip, DateTime.Now + ",1");
         }
         // KickItemへの登録
         ListViewItem _item = new ListViewItem();
         _item.Text = _ip;
         _item.SubItems.Add("-");                // clmKickViewStatus
         _item.SubItems.Add(_cnt.ToString());    // clmKickViewCount
         Gui.KickItem.Add(_item);
         // GUIへの反映
         Event.EventUpdateKick(Kagami, _item, 0);
     }
     catch (Exception ex)
     {
         Front.AddLogDebug("AddKick", "内部エラー Trace:" + ex.StackTrace);
     }
 }
Exemple #3
0
        /// <summary>
        /// Kick対象のIPか判定する。Kick対象で無ければtrue返却
        /// </summary>
        /// <param name="sock"></param>
        /// <returns></returns>
        public bool IsKickCheck(Socket sock)
        {
            string _ip = ((IPEndPoint)sock.RemoteEndPoint).Address.ToString();

            //リザーブ登録されていればKickチェック無し
            lock (Gui.ReserveItem)
                foreach (ListViewItem _item in Gui.ReserveItem)
                {
                    if (_item.Text == _ip)
                    {
                        return(true);
                    }
                }

            //Kickチェックリストに登録済みかチェック
            if (Front.KickList.ContainsKey(_ip))
            {
                //検査終了時間、連続接続回数を取得
                string[] str      = Front.KickList[_ip].Split(',');
                DateTime _end_tim = DateTime.Parse(str[0]);
                int      _con_cnt = int.Parse(str[1]);
                Front.AddLogDebug("KICKチェック", "KickCheckCount:" + str[1]);
                //連続接続回数が設定回数を超えたかチェック
                if (_con_cnt > Front.Kick.KickCheckTime)
                {
                    //検査期間内に超えたのかチェック
                    if (DateTime.Now < _end_tim)
                    {
                        //検査期間内に超えたのでブロック開始
                        //ブロック終了時間を設定
                        Front.KickList[_ip] = DateTime.Now.AddSeconds(Front.Kick.KickDenyTime).ToString() + ",0";
                        Front.AddLogDebug("KICKチェック", "KickCheckResult:KickStart");
                        return(false);
                    }
                    else
                    {
                        //検査期間超過後に超えたので最初からカウントしなおし
                        Front.KickList[_ip] = DateTime.Now.AddSeconds(Front.Kick.KickCheckSecond).ToString() + ",1";
                        Front.AddLogDebug("KICKチェック", "KickCheckResult:CountReset");
                        return(true);
                    }
                }
                //ブロック中
                else if (_con_cnt == 0)
                {
                    // ブロック期間中のアクセスかチェック
                    if (DateTime.Now < _end_tim)
                    {
                        //拒否時間内
                        Front.AddLogDebug("KICKチェック", "KickCheckResult:KickPeriodNow");
                        return(false);
                    }
                    else
                    {
                        //拒否時間超過、始めからカウントしなおし
                        Front.KickList[_ip] = DateTime.Now.AddSeconds(Front.Kick.KickCheckSecond).ToString() + ",1";
                        Front.AddLogDebug("KICKチェック", "KickCheckResult:KickPeriodEnd");
                        return(true);
                    }
                }
                //無期限ブロック中
                else if (_con_cnt < 0)
                {
                    return(false);
                }
                //設定回数を越える前
                else
                {
                    //検査期間を超えたかチェック
                    if (DateTime.Now < _end_tim)
                    {
                        //検査期間を超えていなければ連続接続回数カウントアップ
                        Front.KickList[_ip] = _end_tim.ToString() + "," + (_con_cnt + 1);
                        Front.AddLogDebug("KICKチェック", "KickCheckResult:CountUp");
                        return(true);
                    }
                    else
                    {
                        //検査期間を超えていれば最初からカウントアップ
                        Front.KickList[_ip] = DateTime.Now.AddSeconds(Front.Kick.KickCheckSecond).ToString() + ",1";
                        Front.AddLogDebug("KICKチェック", "KickCheckResult:CountReset");
                        return(true);
                    }
                }
            }
            else
            {
                // 新規にKickチェックリストに登録
                // 検査終了時間をリスト登録する
                Front.AddLogDebug("KICKチェック", "KickCheckResult:AddNewHost");
                Front.KickList.Add(_ip, DateTime.Now.AddSeconds(Front.Kick.KickCheckSecond).ToString() + ",1");
                return(true);
            }
            // ここには来ない
        }