/// <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); } }
/// <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); } }
/// <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); } // ここには来ない }