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)); }
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(); }
public static uint IPToINT(string strIP) { return(RAWDefine.IPToINT(strIP, false)); }
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)); }
public static byte[] GetSynPacket(string strSIP, string strDIP, ushort usSPort, ushort usDPort) { return(RAWDefine.GetSynPacket(RAWDefine.IPToINT(strSIP), RAWDefine.IPToINT(strDIP), usSPort, usDPort)); }