Snmp协议应用-扫描局域网内打印机

时间:2022-08-30 20:22:24

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协议应用-扫描局域网内打印机的更多相关文章

  1. wifi智能插座 一键扫描局域网内插座Ip及其它信息 Python源代码API

    转载请保留原地址. http://www.cnblogs.com/lsqandzy 最近买了几个智能插座玩,插座安装在家里,连接好wifi,不管你人在哪里,通过手机,一键开启或关闭插座电源,想象一下, ...

  2. 扫描局域网内的ip和主机名

    1. 目的 今天发现我配置的一台电脑ip被人占用了,所以准备写个程序扫描一下局域网内所有正在使用的ip和主机名 2. 实现--直接上代码 import time import threading im ...

  3. c&num; asp&period;net 鼠标改变控件坐标位置&comma;更改控件坐标&comma;注册表保存读取&comma;打印&comma;查找局域网内打印机等等收集

    界面虽然被我弄的很难看,但功能还可以 里边注册表的路径自己设置一下,或者加一个创建注册表的语句,不然会报错 前台: <%@ Page Language="C#" AutoEv ...

  4. 指定端口号,多线程扫描局域网内IP地址

    小白第一次发博客,请各路大神不要喷,有错的地方还请不吝啬指教,谢谢....... 因为注释基本上已经说清楚啦,在这里就不多说什么啦,知识不够怕误人子弟 # -*- coding:utf-8 -*-im ...

  5. Linux下通过nmap扫描局域网内设备,获取ip地址和mac地址

    安装nmap sudo apt-get install nmap 扫描  sudo nmap -sP -PI -PT

  6. 扫描局域网内所有主机和MAC地址的Shell脚本

    #!/bin/bash #author: InBi #date: 2011-08-16 #website: http://www.itwhy.org/2011/08-20/939.html ##### ...

  7. ICMP协议 广播以查询局域网内的所有主机

    看到了很多局域网内的主机扫描工具,在想怎么去实现这样一个工具.前几天看了Ping源码--ICMP协议的实例,ICMP可以用来探测网联网内的任一主机,ICMP和广播地址结合来扫描局域网内的所有主机不是很 ...

  8. 局域网内通过UDP协议进行传输接受数据——AsyncUdpSocket

    在相同的局域网内,可以通过Udp协议进行数据的传输和接收,Udp协议与Http协议不同,Udp更加方便快捷,省去了很多步骤,但是也有很多传输问题,在局域网内小范围传输数据时Udp还是非常能够胜任的. ...

  9. win10调用局域网内xp系统上的打印机

    首先在xp系统上配置允许远程连接,然后设置账户密码,最后配置打印机,允许共享. 打开自己win10 ,win+R ,输入\\目标电脑ip\打印机名,确定,输入账户,密码. win+X - P-进入控制 ...

随机推荐

  1. HDU 2586 &lpar;LCA模板题&rpar;

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2586 题目大意:在一个无向树上,求一条链权和. 解题思路: 0 | 1 /   \ 2      3 ...

  2. &lbrack;HTML&rsqb;js实现页面跳转&comma;页面A跳到另一个页面B&period;以及页面传值&lpar;中文&rpar;

    要实现从一个页面A跳到另一个页面B,js实现就在A的js代码加跳转代码 JS跳转大概有以下几种方式: 第一种:(跳转到b.html)<script language="javascri ...

  3. Sass学习

    1.1下载地址: http://rubyinstaller.org/downloads 2.1 安装 SASS是Ruby语言写的,但是两者的语法没有关系.不懂Ruby,照样使用.只是必须先安装Ruby ...

  4. JBoss&plus;Ant实现EJB无状态会话bean实例

    EJB分为session bean.entity bean.message-driven bean,session bean又分为无状态会话bean和有状态会话bean. session bean负责 ...

  5. Ubuntu下安装Mysql并使用

    一.在Ubuntu终端中输入 sudo apt-get install mysql-server 二.在安装中要设置root密码,自己输入即可,但必须要记住. 三.安装后可以使用命令检测是安装成功 s ...

  6. Visual Studio 2017 for Mac 快捷键

    格式化代码:  ^I 转到定义:⌘D 注释/反注释: ⌘/ 生成:⌘B 重新生成:^⌘B 调试运行:⌘↩ 不调试运行:⌥⌘↩ 添加/删除断点:⌘\ 查看所有断点:⌥⌘↩ 放大:⌘+ 缩小:⌘- 正常大 ...

  7. pop弹簧动画实现

    POP是一个在iOS与OS X上通用的极具扩展性的动画引擎.它在基本的静态动画的基础上增加的弹簧动画与衰减动画,使之能创造出更真实更具物理性的交互动画.POP的API可以快速的与现有的ObjC代码集成 ...

  8. 计算机网络九:IP地址、子网掩码、默认网关、DHCP服务器、DNS服务器、WINS服务器

    一.IP地址与子网掩码 1.IP地址 ipv4下,ip地址=网络号+主机号. 2.子网掩码         子网掩码(subnet mask)又叫网络掩码.地址掩码.子网络遮罩,它是一种用来指明一个I ...

  9. cf862d 交互式二分

    /* 二分搜索出一个01段或10即可 先用n个0确定1的个数num 然后测试区间[l,mid]是否全是0或全是1 如果是,则l=mid,否则r=mid,直到l+1==r 然后再测试l是1还是r是1 如 ...

  10. 数据库---初识sql语句

    初识sql语句 SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,SQL语言由IBM开发.SQL语言分为3种类型: DDL语句     数据库定义语言: 数据库.表.视图.索引.存储 ...