Skip to content

Instantly share code, notes, and snippets.

@somapatrik
Created April 29, 2021 13:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save somapatrik/6f593b37e831a94cf591a1dfa60f5c34 to your computer and use it in GitHub Desktop.
Save somapatrik/6f593b37e831a94cf591a1dfa60f5c34 to your computer and use it in GitHub Desktop.
SNMP listener
// Prototype server for SNMP
Socket socket;
EndPoint ep;
byte[] buffer;
ManualResetEvent manualevent = new ManualResetEvent(false);
private void btnListener_Click(object sender, RoutedEventArgs e)
{
// Construct a socket and bind it to the trap manager port 162
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 162);
ep = (EndPoint)ipep;
socket.Bind(ep);
// Disable timeout processing. Just block until packet is received
buffer = new byte[64 * 1024];
Thread listener = new Thread(Listener);
listener.Start();
}
private void Listener()
{
while (true) {
manualevent.Reset();
socket.BeginReceiveFrom(buffer, 0, 64 * 1024, SocketFlags.None, ref ep, new AsyncCallback(RecieveTrap), socket);
manualevent.WaitOne();
}
}
private void RecieveTrap(IAsyncResult result)
{
Socket sock = (Socket)result.AsyncState;
IPEndPoint _peerIP = new IPEndPoint(IPAddress.Any, 0);
// variable to store received data length
int inlen = -1;
try
{
EndPoint ep = (EndPoint)_peerIP;
inlen = sock.EndReceiveFrom(result, ref ep);
_peerIP = (IPEndPoint)ep;
}
catch (Exception ex)
{
return;
}
if (inlen >= 0)
{
int packetVersion = SnmpPacket.GetProtocolVersion(buffer, inlen);
manualevent.Set();
SetLog dlg_Log = new SetLog(Log);
this.Dispatcher.Invoke(dlg_Log, "listener", packetVersion.ToString());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment