En otro post (https://stackoverflow.com/a/30758129/6513653) relationed a ésta, Scott Chamberlain dijo "no creo hay algo en .NET que puede hacer esto, tendrá que hacer una llamada nativa ". Después de probar todo el posible recurso .NET, creo que tiene razón. Entonces, comencé a investigar cómo el diálogo AGREGAR IMPRESORA hace su búsqueda. Usando Wireshark, descubrí que ADD PRINTER envía al menos dos tipos de paquetes a todos los hosts en la red local: dos solicitudes http/xml al puerto 3911 y tres solicitudes SNMP. La primera solicitud SNMP es una siguiente 1.3.6.1.2.1.43, que es Printer-MIB. El segundo, es un get 1.3.6.1.4.1.2699.1.2.1.2.1.1.3 que es pmPrinterIEEE1284DeviceId de PRINTER-PORT-MONITOR-MIB. Esto es lo que más le interesa, ya que desde ADD impresora toma el nombre de la impresora. El tercero es un get 1.3.6.1.2.1.1.1.0, que es sysDescr del sistema SNMP MIB-2. Creo que la segunda solicitud de SNMP es suficiente para encontrar la mayoría de las impresoras de red en la red local, así que hice este código. Funciona para Windows Form Application y depende de SnmpSharpNet.
Editar: Estoy usando ARP Ping en lugar de Ping normal para buscar hosts activos en la red.Enlace para un proyecto de ejemplo: ListNetworks C# Project
AvailablePrinterInfo está en el espacio de nombres obteniendo como error No se pudo encontrar el tipo o el nombre del espacio de nombres 'AvailablePrinterInfo' (¿falta una directiva using o una referencia de ensamblaje –