Our project requires the periodic polling of a list of managed network switches via SNMP. Given a list of switches, the application should query each switch (asynchronously, if possible), retrieving a list of each MAC address connected to each port on the switch. It will then return the complete list of each switch port with each MAC.
The C# interface I envision looks something like this:
IEnumerable<SwitchPollResult> PollSwitches (IEnumerable<Switch> switches);
A SwitchPollResult will consist of a list of switch ports, each containing a list of 0 or more MACs. A null value would indicate the port couldn't be reached.
My preference is to do this in 100% managed code, using C# and .NET 4. There is an open source SNMP project called SharpSnmp on Codeplex that should provide the foundation necessary to get the job done. The completed project should be delivered as a self-contained C# class, encapsulated in a Windows service in a Visual Studio 2010 solution.
Finally, you'll need to have access to at least two managed network switches that support the MIBs necessary to respond to a MAC->Switch Port query.