Пример #1
0
        public static uint GetSynPacket(byte[] byBuffer, string strSIP, string strDIP, ushort usSPort, ushort usDPort)
        {
            uint uSeq = 0;

            lock (m_rnd) uSeq = (uint)m_rnd.Next();
            return(RAWDefine.GetSynPacket(byBuffer, RAWDefine.IPToINT(strSIP), RAWDefine.IPToINT(strDIP), usSPort, usDPort, uSeq));
        }
Пример #2
0
        public SYNScanner(int nMaxTask, ProbeConfiger probes, EndPoint bindEndPoint)
        {
            if (nMaxTask > 60000 || nMaxTask < 1)
            {
                throw new ArgumentOutOfRangeException("the MaxTask must be between 1 and 30000");
            }
            m_probes = probes;
            if (bindEndPoint == null)
            {
                foreach (var v in Dns.GetHostAddresses(Dns.GetHostName()))
                {
                    if (v.IsIPv6LinkLocal || v.IsIPv6Multicast || v.IsIPv6SiteLocal)
                    {
                        continue;
                    }
                    bindEndPoint = new IPEndPoint(v, 0);
                }
            }
            m_rnd                    = new Random();
            m_dic_uid                = new Dictionary <uint, SYNScanTaskInfo>();// new Dictionary<uint, uint>();
            m_dic_task_running       = new Dictionary <uint, SYNScanTaskInfo>();
            m_tcp_scanner            = new TCPScanner(nMaxTask, probes);
            m_tcp_scanner.Completed += new ScanEventHandler(m_tcp_Completed);
            m_sock_bind              = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            m_sock_bind.Bind(bindEndPoint);
            bindEndPoint = m_sock_bind.LocalEndPoint;
            m_strLocalIP = bindEndPoint.ToString().Split(':')[0];
            m_uLocalIP   = RAWDefine.IPToINT(m_strLocalIP);
            m_nLocalPort = ushort.Parse(bindEndPoint.ToString().Split(':')[1]);
            m_se         = new Semaphore(nMaxTask, nMaxTask);

            m_sock_raw = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
            m_sock_raw.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
            m_sock_raw.Bind(bindEndPoint);
            m_sock_raw.IOControl(IOControlCode.ReceiveAll, new byte[] { 1, 0, 0, 0 }, null);

            m_que_task = new Queue <SYNScanTaskInfo>();
            m_que_sae  = new Queue <SocketAsyncEventArgs>();
            for (int i = 0; i < nMaxTask; i++)
            {
                SYNScanTaskInfo ti = new SYNScanTaskInfo();
                ti.TaskID    = (uint)((i + 1) << 8);
                ti.SYNPacket = new byte[40];
                m_que_task.Enqueue(ti);
            }

            SocketAsyncEventArgs sae = new SocketAsyncEventArgs();

            sae.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            sae.SetBuffer(new byte[65535], 0, 65535);
            sae.UserToken = m_sock_raw;
            if (!m_sock_raw.ReceiveAsync(sae))
            {
                IOProcessPool.QueueWork(this.ProcessRecv, sae);
            }
            m_thread_timeout = new Thread(this.CheckTimeout);
            m_thread_timeout.IsBackground = true;
            m_thread_timeout.Start();
        }
Пример #3
0
 public static uint IPToINT(string strIP)
 {
     return(RAWDefine.IPToINT(strIP, false));
 }
Пример #4
0
 public static uint GetSynPacket(byte[] byBuffer, string strSIP, string strDIP, ushort usSPort, ushort usDPort, uint uSeq)
 {
     return(RAWDefine.GetSynPacket(byBuffer, RAWDefine.IPToINT(strSIP), RAWDefine.IPToINT(strDIP), usSPort, usDPort, uSeq));
 }
Пример #5
0
 public static byte[] GetSynPacket(string strSIP, string strDIP, ushort usSPort, ushort usDPort)
 {
     return(RAWDefine.GetSynPacket(RAWDefine.IPToINT(strSIP), RAWDefine.IPToINT(strDIP), usSPort, usDPort));
 }