private void OnTriggerEnter(Collider other) { if (other.CompareTag(poisonTag)) { if (other.GetComponentInParent <Poisoner>()) { Poisoner p = other.GetComponentInParent <Poisoner>(); Poison(p.poisonTime); if (poisonDamage < p.damagePerSecond) { poisonDamage = p.damagePerSecond; } } } }
/// <inheritdoc /> /// <summary> /// 初始化 <see cref="MainPart" /> 窗口。 /// </summary> public MainPart() { // 初始化模块 TaskHandler.Init(); var task = new Thread(load => { try { // TODO:新增模块时请更新此处的代码 var threads = new[] { new Thread(init => { Scanner = new Scanner(); }), new Thread(init => { Poisoner = new Poisoner(); }), new Thread(init => { Watcher = new Watcher(); }) }; foreach (var thread in threads) { thread.Start(); } new WaitTimeoutChecker(30000).ThreadSleep(500, () => threads.Any(item => item.IsAlive)); } catch (ThreadAbortException) { Environment.Exit(-1); } }) { Name = RegisteredThreadName.ProgramInit.ToString() }; MessagePipe.SendInMessage(new KeyValuePair <Message, Thread>(Message.TaskIn, task)); var loading = new Loading("初始化中,请稍候", task); loading.ShowDialog(); // 用户取消 if (MessagePipe.GetNextOutMessage(task) == Message.UserCancel) { Environment.Exit(-1); } // 初始化完成(由loading判断得到) MessagePipe.ClearAllMessage(task); TopMost = true; InitializeComponent(); }
public void TestStartPoisoning() { var scanner = new Scanner { CurDevName = "WLAN" }; scanner.ScanForTarget(); var poisoner = new Poisoner { CurDevName = "WLAN" }; List <Host> target1 = new List <Host> { scanner.HostList[0] }, target2 = new List <Host>(scanner.HostList); target2.RemoveAt(0); poisoner.Target1 = target1; poisoner.Target2 = target2; poisoner.StartPoisoning(); Thread.Sleep(60 * 1000); }
/// <summary> /// 控制台用测试程序。 /// </summary> private static void Test_in_Console() { // 初始化 var instance = CaptureDeviceList.Instance; var scanner = new Scanner(); var poisoner = new Poisoner(); // 打印当前可用设备列表 var n = 0; var devList = new List <KeyValuePair <int, string> >(); Console.WriteLine("Available devices: "); foreach (var item in instance) { var device = (WinPcapDevice)item; devList.Add(new KeyValuePair <int, string>(n, device.Interface.FriendlyName)); Console.WriteLine($"{++n}. {device.Interface.FriendlyName}"); } // 选择设备 Console.WriteLine(); Console.Write("Select using device: "); var index = int.Parse(Console.ReadLine() ?? throw new FormatException("Not valid number.")) - 1; if (index >= n) { throw new IndexOutOfRangeException("No such device."); } scanner.CurDevName = poisoner.CurDevName = devList.Find(item => item.Key == index).Value; // 输出地址数量并开始扫描 Console.WriteLine(); Console.Write($"Current network has {scanner.AddressCount} available addresses. Start scan? [Y/N]"); if (Console.ReadLine()?.ToUpperInvariant() != "Y") { Console.WriteLine("Process interrupted."); return; } Console.WriteLine("Scanning..."); scanner.ScanForTarget(); // 开始被动监听 Console.WriteLine("Spying..."); var t = new Thread(scanner.SpyForTarget); t.Start(); Thread.Sleep(10 * 1000); t.Abort(); while (t.IsAlive) { Thread.Sleep(100); } // 打印检测到的主机列表 Console.WriteLine(); Console.WriteLine($"Total hosts: {scanner.HostList.Count}"); n = 1; foreach (var host in scanner.HostList) { Console.Write($"{n++}. {host.IPAddress} is at {host.PhysicalAddress}"); if (scanner.GatewayAddresses.Contains(host.IPAddress)) { Console.WriteLine(" (Possible Gateway Address)"); } else if (Equals(host.IPAddress, scanner.Ipv4Address)) { Console.WriteLine(" (Possible Device Address)"); } else { Console.WriteLine(); } } // 选择目标 Console.WriteLine(); Console.Write("Select target1: "); var targets = Console.ReadLine()?.Split(' '); if (targets == null) { throw new FormatException("Not valid numbers."); } foreach (var target in targets) { var tindex = int.Parse(target); if (tindex >= n) { throw new IndexOutOfRangeException("No such host."); } poisoner.Target1.Add(scanner.HostList[tindex - 1]); } Console.Write("Select target2: "); targets = Console.ReadLine()?.Split(' '); if (targets == null) { throw new FormatException("Not valid numbers."); } foreach (var target in targets) { var tindex = int.Parse(target); if (tindex >= n) { throw new IndexOutOfRangeException("No such host."); } poisoner.Target2.Add(scanner.HostList[tindex - 1]); } // 设定默认网关 var flag = false; foreach (var host in scanner.HostList) { foreach (var gateway in scanner.GatewayAddresses) { if (!Equals(host.IPAddress, gateway)) { continue; } Console.Write($"Gateway detected({host.IPAddress}). Use it? [Y/N]"); if (Console.ReadLine()?.ToUpperInvariant() != "Y") { break; } poisoner.Gateway = host; flag = true; break; } if (flag) { break; } } if (!flag) { Console.Write("Select gateway: "); poisoner.Gateway = scanner.HostList[int.Parse(Console.ReadLine() ?? throw new FormatException()) - 1];