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; }
public MlEnvelope(MailAddress from, MailAddress to, string host, Ip addr) { From = from; To = to; Host = host; Addr = addr; }
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();//初期値 } }
//サーバ側若しくはクライアント側どちらかの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(); }
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(); }
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(); }
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; } } }
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);//指定時間が経過していない場合、不正アクセスと判断される }
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(); } }
public OneLease(Ip ip) { MacAppointment = false;//MAC指定なし Init(); Ip = ip; }
// (隠蔽)コンストラクタ //インターフェース状態を読み込んでリストを初期化する 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)); //実行時例外 } } } } } }
//コンストラクタ(リモートから受信した文字列による初期化)<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); //例外終了 } } }
public OneTrace(TraceKind traceKind, string str, int threadId, Ip ip) { TraceKind = traceKind; Str = str; ThreadId = threadId; Ip = ip; }
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)); }
//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; }
public OneLease(Ip ip, Mac mac) { MacAppointment = true;//MAC指定あり Init(); Ip = ip; Mac = mac; }
//クライアント側への送信 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); }
public SmtpClient(Ip ip, int port, int sec, ILife iLife) { _ip = ip; _port = port; _sec = sec; _iLife = iLife; Status = SmtpClientStatus.Idle; }
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)); }
//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; }
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)); }
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)); }
//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; }
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; }
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; }
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)); }
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); }
//トレースの追加(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)); } }
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)); }
//認証されているかどうかのチェック 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; }
//デフォルト値の初期化 protected override sealed void Init() { BindStyle = BindStyle.V4Only; IpV4 = new Ip(IpKind.InAddrAny); IpV6 = new Ip(IpKind.In6AddrAnyInit); }
//コンストラクタ public BindAddr(BindStyle bindStyle, Ip ipV4, Ip ipV6) { BindStyle = bindStyle; IpV4 = ipV4; IpV6 = ipV6; }