-> PortScanner added
This commit is contained in:
94
Networking/PortScanner/UDPPortScanner.cs
Normal file
94
Networking/PortScanner/UDPPortScanner.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
using Networking.Pages;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace PortScanner
|
||||
{
|
||||
class UDPPortScanner : PortScannerBase
|
||||
{
|
||||
// The UDP client used for scanning a port
|
||||
private UdpClient udpClient;
|
||||
|
||||
// Constructor - use base constructor
|
||||
public UDPPortScanner() : base()
|
||||
{
|
||||
}
|
||||
|
||||
// TODO:
|
||||
public async override Task<bool> CheckOpenAsync(CancellationToken ct)
|
||||
{
|
||||
// We are using a UDP client to see whether the port is open or not
|
||||
// Therefore, the absence of a response means that the port is open
|
||||
// If there is any respone, it is closed
|
||||
using (udpClient = new UdpClient())
|
||||
{
|
||||
bool returnVal;
|
||||
try
|
||||
{
|
||||
// Connect to the server
|
||||
udpClient.Connect(Hostname, Port);
|
||||
|
||||
// Set the timeout
|
||||
udpClient.Client.ReceiveTimeout = Timeout;
|
||||
|
||||
// Sends a message over UDP
|
||||
Byte[] sendBytes = Encoding.ASCII.GetBytes("Are you open?");
|
||||
udpClient.Send(sendBytes, sendBytes.Length);
|
||||
|
||||
// IPEndPoint object will allow us to read datagrams sent from any source.
|
||||
// Port 0 means any available port
|
||||
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
|
||||
|
||||
// Asynchronously begin receiving
|
||||
var result = udpClient.ReceiveAsync();
|
||||
if (await Task.WhenAny(result, Task.Delay(Timeout, ct)) == result)
|
||||
{
|
||||
Console.WriteLine(Encoding.ASCII.GetString(result.Result.Buffer));
|
||||
returnVal = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// There was no response, we will consider this port as open
|
||||
returnVal = true;
|
||||
}
|
||||
udpClient.Close();
|
||||
return returnVal;
|
||||
}
|
||||
catch (SocketException e)
|
||||
{
|
||||
Console.WriteLine("Error Code: " + e.ErrorCode);
|
||||
|
||||
switch (e.ErrorCode)
|
||||
{
|
||||
case 10054:
|
||||
returnVal = false;
|
||||
break;
|
||||
|
||||
case 11001:
|
||||
returnVal = false;
|
||||
|
||||
// Display an error message on the main thread
|
||||
MessageBox.Show(
|
||||
"Hostname could not be resolved.",
|
||||
"Connection Error",
|
||||
MessageBoxButtons.OK,
|
||||
MessageBoxIcon.Error);
|
||||
break;
|
||||
default:
|
||||
returnVal = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
udpClient.Close();
|
||||
return returnVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user