Snmp协议应用-扫描局域网内打印机
Snmp协议应用-扫描局域网内打印机
Snmp协议简单介绍
简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering Task Force)定义的internet协议簇的一部分。SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大。SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。
详细信息可网上查找,参考http://www.cnblogs.com/zhangsf/archive/2013/08/26/3283124.html
代码部分
代码在Linux虚拟机(1cpu、1GB内存)上运行较慢,将for替换为Parallel后速度有所提升。
public class ScanIpAddress
{
CountdownEvent countdown = null;
int region = ;
string[] oids = null;
public Dictionary<string, List<string>> dicOid = null;
public ScanIpAddress(int region,string[] oids)
{
this.region = region;
this.oids = oids;
this.dicOid = new Dictionary<string, List<string>>();
}
private bool getSnmp(string host)
{
bool result = false;
/* Get an SNMP Object
*/
SimpleSnmp snmpVerb = new SimpleSnmp(host, , "public", , );
if (!snmpVerb.Valid)
{
Console.WriteLine("Seems that IP or comunauty is not cool");
return result;
} //Oid varbind = new Oid(OID); Dictionary<Oid, AsnType> snmpDataS = snmpVerb.Get(SnmpVersion.Ver1, this.oids);
if (snmpDataS != null)
{
List<string> oidList = new List<string> ();
foreach (var item in snmpDataS)
{
oidList.Add(item.Value.ToString());
}
this.dicOid.Add(host, oidList);
result = true;
} return result;
} private void p_PingCompleted(object sender, PingCompletedEventArgs e)
{
string ip = (string)e.UserState;
if (e.Reply != null && e.Reply.Status == IPStatus.Success)
{
/* PRINTER-PORT-MONITOR-MIB - 1.3.6.1.4.1.2699
* ppmPrinterIEEE1284DeviceId: 1.3.6.1.4.1.2699.1.2.1.2.1.1.3
*/
getSnmp(ip);
}
else if (e.Reply == null)
{
Console.WriteLine("Pinging {0} failed. (Null Reply object?)", ip);
}
countdown.Signal();
} public void ScanPrinters()
{
Console.WriteLine("ScanPrinters");
countdown = new CountdownEvent();
Stopwatch sw = new Stopwatch();
sw.Start();
string ipBase = "192.168.{0}.{1}";
Parallel.For(, , (i) =>
{
string ip = string.Format(ipBase, region, i);
Console.WriteLine(ip);
Ping p = new Ping();
p.PingCompleted += new PingCompletedEventHandler(p_PingCompleted);
countdown.AddCount();
p.SendAsync(ip, , ip);
});
//for (int i = 0; i <= 255; i++)
//{
// string ip = string.Format(ipBase, region, i);
// Console.WriteLine(ip);
// Ping p = new Ping();
// p.PingCompleted += new PingCompletedEventHandler(p_PingCompleted);
// countdown.AddCount();
// p.SendAsync(ip, 100, ip);
//}
countdown.Signal();
countdown.Wait();
sw.Stop();
Console.WriteLine("共耗时(毫秒):" + sw.ElapsedMilliseconds);
Console.WriteLine("Printer scan finished");
}
}
调用部分:
class Program
{
public static string oIDProductName = "1.3.6.1.2.1.25.3.2.1.3.1";// "1.3.6.1.2.1.43.5.1.1.16.1";
public static string oIDSerialNumber = "1.3.6.1.2.1.43.5.1.1.17.1";
static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add(oIDProductName);
list.Add(oIDSerialNumber); ScanIpAddress sip = new ScanIpAddress(, list.ToArray());
sip.ScanPrinters();
if (sip.dicOid != null && sip.dicOid.Count > )
{
foreach (var item in sip.dicOid)
{
Console.WriteLine(item.Key);
List<string> oidList = item.Value;
string printName = string.Empty;
foreach (var str in oidList)
{
printName += str.Replace(" ", "");
Console.WriteLine(str);
}
string [] arr = item.Key.Split('.');
//CupsPrint.AddPrint(arr[2] + arr[3], item.Key);
}
}
Console.ReadLine();
}
Snmp协议应用-扫描局域网内打印机的更多相关文章
- wifi智能插座 一键扫描局域网内插座Ip及其它信息 Python源代码API
转载请保留原地址. http://www.cnblogs.com/lsqandzy 最近买了几个智能插座玩,插座安装在家里,连接好wifi,不管你人在哪里,通过手机,一键开启或关闭插座电源,想象一下, ...
- 扫描局域网内的ip和主机名
1. 目的 今天发现我配置的一台电脑ip被人占用了,所以准备写个程序扫描一下局域网内所有正在使用的ip和主机名 2. 实现--直接上代码 import time import threading im ...
- c# asp.net 鼠标改变控件坐标位置,更改控件坐标,注册表保存读取,打印,查找局域网内打印机等等收集
界面虽然被我弄的很难看,但功能还可以 里边注册表的路径自己设置一下,或者加一个创建注册表的语句,不然会报错 前台: <%@ Page Language="C#" AutoEv ...
- 指定端口号,多线程扫描局域网内IP地址
小白第一次发博客,请各路大神不要喷,有错的地方还请不吝啬指教,谢谢....... 因为注释基本上已经说清楚啦,在这里就不多说什么啦,知识不够怕误人子弟 # -*- coding:utf-8 -*-im ...
- Linux下通过nmap扫描局域网内设备,获取ip地址和mac地址
安装nmap sudo apt-get install nmap 扫描 sudo nmap -sP -PI -PT
- 扫描局域网内所有主机和MAC地址的Shell脚本
#!/bin/bash #author: InBi #date: 2011-08-16 #website: http://www.itwhy.org/2011/08-20/939.html ##### ...
- ICMP协议 广播以查询局域网内的所有主机
看到了很多局域网内的主机扫描工具,在想怎么去实现这样一个工具.前几天看了Ping源码--ICMP协议的实例,ICMP可以用来探测网联网内的任一主机,ICMP和广播地址结合来扫描局域网内的所有主机不是很 ...
- 局域网内通过UDP协议进行传输接受数据——AsyncUdpSocket
在相同的局域网内,可以通过Udp协议进行数据的传输和接收,Udp协议与Http协议不同,Udp更加方便快捷,省去了很多步骤,但是也有很多传输问题,在局域网内小范围传输数据时Udp还是非常能够胜任的. ...
- win10调用局域网内xp系统上的打印机
首先在xp系统上配置允许远程连接,然后设置账户密码,最后配置打印机,允许共享. 打开自己win10 ,win+R ,输入\\目标电脑ip\打印机名,确定,输入账户,密码. win+X - P-进入控制 ...
随机推荐
- Python Windows环境下安装Python集成开发环境 学习之路(一)
一.安装下载安装 Python https://www.python.org/ 全部下一步,直接Finish PyCharm http://www.jetbrains.com/pycharm/ 全部 ...
- C#发送邮件
以下代码已用 .yeah .qq 以及本人公司邮箱测试通过,可多发,可挂附件 本次测试邮件发送类,是用的winform 页面如下 窗口的后台代码如下: using System; using Syst ...
- Ceph剖析:Paxos算法实现
作者:吴香伟 发表于 2014/10/8 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 Recovery阶段 在Leader选举成功后,Leader和Peon都 ...
- HttpWebRequest向路由器提交基本身份验证
HttpWebRequest向路由器提交基本身份验证 服务端IIS设置为不允许匿名访问,只选择了基本身份验证,客户端使用HttpWebRequest发送一个get请求,请求一个页面. 基本身份验证,客 ...
- 如何让你的UWP应用程序无缝调用几何作图
有时候需要编辑一些几何图形,如三角形,圆锥曲线等,在UWP应用中加入这些几何作图功能是件费时间又很难做好的事.其实Windows 10 应用商店中已有一些专业的几何作图工具了,那么能借来一用吗?答案是 ...
- 自己关于cocoapods的使用的一些理解和总结
老大让我自己学习用一下cocoapods的使用,于是自己上网查了很多的信息,在安装使用过程中,总是出现了很多问题,然后发现有些人的教程好像并不完全好用,我的感觉是应该每个人遇到的问题都不尽相同,所以 ...
- 8天入门wpf(转)
8天入门wpf—— 第一天 基础概念介绍 8天入门wpf—— 第二天 xaml详解 8天入门wpf—— 第三天 样式 8天入门wpf—— 第四天 模板 8天入门wpf—— 第五天 数据绑定 8天入门w ...
- RocksDB笔记 - Compaction中的Iterator
Compaction中的Iterator 一般来说,Compaction的Input涉及两层数据的合并,对于涉及到的每一层数据: 如果是level-0,对level-0的每一个sstable文件建立一 ...
- jquery实现手风琴效果
html----accordion.html <!DOCTYPE html> <html lang="en"> <head> <meta ...
- memset 究竟在做什么?
我要 一字节一字节 地 memory set