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;
             }
         }
     }
 }
Exemplo n.º 2
0
        /// <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();
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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];