Я пытаюсь выяснить, как сканировать диапазон портов очень быстро, но через несколько часов я готов сдаться.
Я искал результаты в Интернете, но независимо от того, что я делаюЯ не могу быстро сканировать порты.
Как это сделать правильно?Небольшие фрагменты, связанные с моим вопросом, действительно приветствуются.
Это то, что у меня есть (обратите внимание, у меня есть строка allDone.WaitOne(1000, true);
, которая создает тайм-аут для соединения. Благодаря этому тайм-аут замедляет проверку, когда IP не работает,без этого у меня не хватает времени, чтобы получить результат)
private void btnScan_Click(object sender, EventArgs e)
{
for (i = (int)nudFrom.Value; i < nudTo.Value; i++)
{
ScanPort(IPAddress.Parse(txtIP.Text), i);
}
}
private void ScanPort(IPAddress address, int port)
{
using (TcpClient client = new TcpClient())
{
allDone.Reset();
client.BeginConnect(address, port, new AsyncCallback(ConnectCallback), null);
allDone.WaitOne(1000, true);
if (client.Connected) txtDisplay.AppendText("Port: " + i.ToString() + " is open." + Environment.NewLine);
else txtDisplay.AppendText("Port: " + i.ToString() + " is closed." + Environment.NewLine);
}
}
public static ManualResetEvent allDone = new ManualResetEvent(false);
public static void ConnectCallback(IAsyncResult ar)
{
allDone.Set();
using (TcpClient s = (TcpClient)ar.AsyncState)
{ }
}