Created
April 29, 2021 13:42
-
-
Save somapatrik/6f593b37e831a94cf591a1dfa60f5c34 to your computer and use it in GitHub Desktop.
SNMP listener
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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