如何通过Windows Server 2008R2跨网段对共享Xerox打印机发起SNMP请求?
跨网段通过打印服务器发起SNMP请求监控打印机的方案
首先明确:完全可行,但因为你的PC和打印机不在同一网段,且只能通过Windows Server 2008 R2的共享访问打印机,所以需要把打印服务器作为SNMP请求的中转节点,下面给你梳理几种实操性强的方法:
先做基础验证
第一步得确认打印服务器本身能正常和打印机通信SNMP:
- 登录到WinServ 2008 R2,打开管理员权限的命令提示符,如果装了SNMP工具(比如Windows自带的SNMP Utils或者第三方Net-SNMP),运行
snmpwalk -v 2c -c public 192.168.0.x(把public换成你打印机的SNMP社区字符串,192.168.0.x换成打印机IP)。如果能返回打印机的MIB信息,说明服务器和打印机的SNMP链路是通的,这是后续操作的基础。 - 同时确认打印机的SNMP设置:启用SNMP服务,允许来自服务器IP(10.220.0.x)的请求,社区字符串配置正确。
方法一:用Windows自带的端口转发(UDP)
SNMP默认用UDP 161端口,你可以在打印服务器上配置端口转发,把PC发往服务器的SNMP请求转发到打印机:
- 登录服务器,以管理员身份打开命令提示符:
- 先启用网卡的IP转发:
(比如网卡名称是「本地连接1」,就替换成对应的名称)netsh interface ipv4 set interface "你的10.220.0.x网段网卡名称" forwarding=enabled - 添加UDP端口转发规则:
netsh interface portproxy add v4tov4 listenport=161 listenaddress=10.220.0.x(服务器的IP) connectport=161 connectaddress=192.168.0.x(打印机IP) protocol=udp
- 先启用网卡的IP转发:
- 配置完成后,在你的PC上发起SNMP请求时,把目标地址设为服务器的10.220.0.x IP,使用和打印机一致的社区字符串,服务器就会自动把请求转发给打印机,并把响应返回给你的PC。
注意:Windows Server 2008 R2的PortProxy对UDP的支持有一些限制,如果遇到转发失败的情况,可以试试下面的第三方代理工具方案。
方法二:使用第三方SNMP代理转发工具
如果自带的端口转发不好用,可以给服务器装一个专门的SNMP代理转发工具(比如SNMP Proxy Forwarder),配置它作为中转:
- 下载并安装工具到WinServ 2008 R2;
- 编辑工具的配置文件,设置监听地址为服务器的10.220.0.x IP、端口161,目标地址为打印机的192.168.0.x IP、端口161,同时匹配打印机的SNMP社区字符串;
- 启动代理服务并设置为开机自启;
- 之后你的PC就可以像直接访问打印机一样,向服务器IP发送SNMP请求,代理会自动完成转发和响应返回。
方法三:通过WMI间接获取打印机状态(更简单)
如果不想折腾SNMP转发,也可以通过Windows打印服务器的WMI接口获取打印机状态,这种方法不需要直接和打印机的SNMP交互,而是从服务器读取共享打印机的状态数据:
在你的PC上打开PowerShell,运行以下命令(替换成你的服务器IP和共享打印机名称):
Get-WmiObject -Class Win32_Printer -ComputerName "10.220.0.x(服务器IP)" -Filter "Name='共享打印机的名称'" | Select-Object Name, PrinterStatus, Status, DetectedErrorState
这个命令会返回打印机的就绪状态、错误类型等关键信息,完全满足监控需求,而且配置起来比SNMP转发简单得多。
内容的提问来源于stack exchange,提问作者whizzzkey




