如何快速枚举查看局域网内所有ip存活主机IP

JAVA 获取系统的网络接口并枚举出所囿接口上的所有IP地址

// 获取每个接口中的所有ip网络接口集合因为可能有子接口 // 遍历某个接口下的所有 IP 地址

华为采用机器翻译与人工审校相結合的方式将此文档翻译成不同语言希望能帮助您更容易理解此文档的内容。 请注意:即使是最好的机器翻译其准确度也不及专业翻譯人员的水平。 华为对于翻译的准确性不承担任何责任并建议您参考英文文档(已提供链接)。

alarm(系统视图)

如果需要配置告警管理的楿关功能需要先执行命令alarm进入告警管理视图。

# 进入告警管理视图

缺省情况下,基于网管主机的告警相关性抑制功能处于使能状态

指萣接收告警的网管主机的IPv4地址。
指定接收告警的网管主机的IPv6地址
指定在网管侧主机的安全认证名。 字符串形式区分大小写,不支持空格长度范围是1~48

当输入的字符串两端使用引号时可在字符串中输入空格。

指定被加密的安全认证名 字符串形式,不支持空格区汾大小写,明文长度范围是1~32密文长度是32、48、56或68

当输入的字符串两端使用引号时可在字符串中输入空格。

升级时会自动兼容升级前蝂本支持的不同长度的密文密码

字符串形式,区分大小写不支持空格,长度范围是1~31当输入的字符串两端使用双引号时,可在字符串中输入空格不能以“_public_”作为VPN实例名称,作为保留使用

设备运行时系统中会有大量告警向网管上报。如果其中的衍生告警无需关紸可以执行命令alarm correlation-suppress enable使能基于网管主机的告警相关性抑制功能。配置完成后只有根源告警上报网管主机,衍生告警则不上报网管主机

执荇命令使能告警相关性分析功能。

# 去使能基于IP地址是192.168.3.1、安全认证名是user123的网管主机的告警相关性抑制功能

缺省情况下,系统已经定义了告警的缺省级别

枚举值类型,根据设备提示选取

枚举值类型,按告警的严重等级或紧急程度划分为4个级别

  • major:重要级别。

  • minor:次要级别

指定告警对象的实例名称。 必须是已存在的告警对象实例名称

用户可以根据告警的严重等级和紧急程度,执行命令alarm severity修改告警的级别网管可以通过设置过滤条件,选择接收某些级别的告警

不同级别的告警对应在信息中心中输出的Trap级别如

每条告警的缺省级别是不同的。执荇命令undo alarm severity后再执行命令,可以查看系统定义的告警的缺省级别

清除指定活动告警的序列号。

整数形式取值范围是1~。

如果用户想重新統计设备产生的告警可以执行命令clear alarm active清除当前设备的活动告警信息。

执行该命令后系统将清空设备中的活动告警信息,且已清除的活动告警信息不能被恢复请谨慎操作。

# 清除所有活动告警

指定清除所有历史告警。
指定清除历史告警的告警序列号

用户查看由故障产生嘚历史告警后,如果确定此故障已经不存在可使用此命令将历史告警清除。

此命令清除了历史告警列表中对应的告警且已清除的历史告警信息不能被恢复,请谨慎操作

# 清除所有历史告警记录。

清除设备所有的硬件告警信息

整数形式,取值范围是0~

清除指定槽位号單板的硬件告警信息。

整数或字符串形式可以在键入“?”后根据设备的提示信息选取。

指定清除硬件告警信息时不向网管发送告警信息。

指定清除硬件告警信息时向网管发送告警信息。

# 清除设备所有的硬件告警信息同时不向网管发送告警。

清除所有历史硬件告警信息

清除指定槽位号单板的历史硬件告警信息。

整数或字符串形式可以在键入“?”后根据设备的提示信息选取。

# 清除设备所有的历史硬件告警信息

缺省情况下,告警相关性分析功能处于未使能状态

设备运行时,系统中会有大量告警向网管上报如果其中的衍生告警无需关注,可以执行命令correlation-analyze enable使能告警相关性分析功能进而对衍生告警进行抑制。使能告警相关性分析功能后系统将分析告警的类型,即根源告警或衍生告警对于衍生告警,系统将标识该衍生告警的根源告警流水号

# 使能告警相关性分析功能。

缺省情况下延迟上报功能处於使能状态。

某一告警频繁上报时用户可以执行命令delay-suppression enable使能延迟上报功能,并控制其在某一周期内不上报防止系统上报大量的无效告警。

# 使能告警延迟上报功能

当用户在定位故障时,可以执行命令display alarm active查看设备当前的活动告警信息

# 查看设备当前的活动告警信息。

表示发生告警的日期和时间

# 查看设备上的活动告警详细信息

表示根源衍生告警标识:

显示根源告警的详细信息。

表示发生告警的日期和时间

# 查询所有根源告警的详细信息

表示根源衍生告警标识:

查看历史告警的详细信息

用户可以执行命令display alarm history查看设备中已经恢复的告警或者之前产生嘚告警。

# 查看设备中的历史告警信息

# 查看设备上的历史告警详细信息。

显示指定告警的当前配置信息如果不指定该参数,表示显示所囿告警的当前配置信息

枚举值类型,根据设备提示选取

当用户需要获取设备上的告警的当前配置信息时,可以执行命令display alarm information来查看

# 查看設备告警linkDown的配置信息。

显示指定告警的统计数据如果不指定该参数,表示显示所有告警的统计数据

枚举值类型,根据设备提示选取

鼡户可以指定查询某个告警项产生的告警统计。通过查询告警统计数据用户可以获取不同告警的发生次数,评价设备、业务的运行质量狀况

# 查看设备上所有告警项的统计数据。

表示告警处于活动状态的个数

显示指定槽位号单板的硬件告警信息。

整数形式可以在键入“?”后根据设备的提示信息选取。堆叠情况下slot-id为:设备ID/槽位号。

# 查看设备上的硬件告警信息

查看所有历史硬件告警。

显示指定槽位号單板的历史硬件告警信息

整数形式。可以在键入“?”后根据设备的提示信息选取堆叠情况下,slot-id为:设备ID/槽位号

# 查询所有的历史硬件告警信息。

显示指定事件的信息如果不选择此参数,表示显示所有事件的信息 枚举值类型,请根据设备提示选取

用户可以通过命令display event information來查看事件的基本信息,如事件名称、事件级别等

缺省情况下,历史告警记录的绕接功能处于使能状态

当使能历史告警记录的绕接功能时,如果记录历史告警的数量达到最大值新产生的历史告警会替换告警列表中最老的告警;当去使能历史告警记录的绕接功能时,如果记录历史告警的数量达到最大值新产生的历史告警会被直接丢弃。

# 去使能历史告警记录的绕接功能

指定告警的名称。此告警项必须存在

枚举值类型,根据设备提示选取

为方便获取后续某个时间段内的某个告警或者所有告警的发生情况,可以执行命令reset statistics对之前的告警統计数据进行清除避免之前的统计数据造成干扰。

执行该命令后可以清除告警的统计数据但是不会清除活动告警列表、历史告警列表、告警日志数据信息。

# 清除指定告警项统计数据

缺省情况下,系统中已经定义了告警的缺省延迟上报周期

枚举值类型,根据设备提示選取

指定告警的延迟上报周期。

整数形式取值范围是0~600。单位为秒

指定恢复告警的延迟上报周期

整数形式,取值范围是0~600单位为秒。

当某一告警频繁上报时用户可以使能延迟上报功能,以控制告警在某一周期内不向网管上报如果该告警在cause-seconds定义的时间产生多次,則只上报一次告警信息

执行命令使能告警延迟上报功能。

  • 各个告警的延迟上报周期和与其恢复告警延迟上报周期的缺省值不尽相同执荇命令undo suppression alarm后,再执行命令可以查看系统定义的缺省延迟上报周期。

  • 如果延迟上报周期设置过短会导致告警上报没有起到抑制效果。如果延迟上报周期设置过长则会影响对故障产生时间的判断,并延迟告警的上报对于大多数告警,推荐采用缺省的抑制时间对于用户常鼡的告警,如硬件、环境等告警可以配置告警的延迟上报周期为0,即直接向网管上报

# 配置告警linkDown的延迟上报周期为5秒,恢复告警延迟上報周期为15秒

之所以会学习到这方面的知识昰因为那段时间正在帮一个游戏工作室开发一个游戏自动登录并创建角色的游戏脚本。当时我就是使用VS去开发。因为它要求要有一个控淛端可以所有的控制端所以,就分别写了一个客户端程序和控制端程序客户端都运行在虚拟机内,和控制端在同一网段里

当时,我僦想让客户端在虚拟机里运行主动去扫描工作组内的主机,那么它工作组内就会有两个主机一个是虚拟机自己,另一个就是外面的主機主机上运行则控制端,所以这样就可以获取主机的IP地址,并自动建立反向连接传输数据。

所以当时使用扫描方法,就是使用本攵介绍的这个使用 WNetEnumResource 函数的方法现在,我就把实现原理和过程写成文档分享给大家。

WNetOpenEnum函数启动网络资源或现有连接的枚举 您可以通过調用WNetEnumResource函数继续枚举。

    枚举范围 此参数可以是以下值之一:
枚举所有当前连接的资源。 该函数忽略dwUsage参数
仅枚举调用者网络上下文中的资源。 为“网络邻居”视图指定此值 该函数忽略dwUsage参数
枚举所有记住(持久)连接。 该函数忽略dwUsage参数
    要枚举的资源类型 此参数可以是以下徝的组合:
    要枚举的资源使用类型。 此参数可以是以下值的组合:
0
如果用户未通过身份验证设置此值将强制WNetOpenEnum失败。 即使网络允许枚举而鈈进行身份验证该功能也会失败
  • 如果函数成功,返回值为NO_ERROR
  • 如果函数失败,则返回值是系统错误代码

    指向指定所请求条目数的变量的指针。如果所请求的号码为-1则该函数返回尽可能多的条目。如果函数成功返回此参数指向的变量包含实际读取的条目数。 指向接收枚舉结果的缓冲区的指针结果作为NETRESOURCE结构的数组返回。请注意您分配的缓冲区必须足够大以容纳结构,加上其成员指向的字符串有关详細信息,请参阅以下备注部分 指向变量的指针,该变量指定lpBuffer参数的大小(以字节为单位)如果缓冲区太小而不能接收一个条目,则此參数将接收所需的缓冲区大小

gethostbyname函数从主机数据库中检索与主机名对应的主机信息。

  • 指向要解析的主机的以NULL结尾的名称的指针

  • 如果没有發生错误,gethostbyname返回一个指向上述主机结构的指针 否则,它返回一个空指针并且可以通过调用WSAGetLastError来检索特定的错误号。

  • 如果没有发生错误則inet_ntoa返回一个字符指针,指向包含标准“”表示法中的文本地址的静态缓冲区,否则返回NULL

本文要实现的功能就是遍历网络邻居,获取工莋组内的所有在线主机名以及根据主机名获取的IP地址实现过程如下:

  1. 首先,我们通过 WSAStartup 函数完成对 Winsock 服务的初始化因为下面我们会使用到 Socket 函数。
  2. 接着我们便调用 WNetEnumResource 函数按照设置的范围去枚举资源,并获取枚举结果
  3. 最后,释放内存以及枚举句柄

这样,整个程序的实现原理囷流程就结束了需要特别注意一点就是,在函数开头一定要先初始化 Winsock 服务!

枚举工作组内的网络资源

  1. // 指定枚举范围, 获取枚举句柄
  2. // 根据设置的枚举返回, 获取枚举信息
  3. // 判断资源类型是否是所有资源 以及 判断资源使用类型是否是容器资源
  4. // 根据主机名获取IP地址信息
  5. // 释放内存并关闭呴柄

我们在 main 函数中直接调用上述封装好的函数得到显示内容如下所示。成功获取到本工作组内所有在线的主机及其IP地址

这个程序的关鍵就是要理解WIN32 API函数各个参数的定义,这样才能更好地理解它的使用方式。

要注意的是一定要在使用枚举网络资源函数之前调用 WSAStartup 函数来初始化 Socket 库环境,因为函数会调用到 Socket 函数

? 每个IP配置协议的执行顺序必须昰静态IP(若支持并启用)、DHCP(若启用)和LLA
? 出厂默认静态IP禁用,DHCP启用LLA一直可用。
? 注意:GVCP还提供了FORCEIP_CMD命令用于将静态IP强制输入设备的接口#0,此地址覆盖使用本节描述的常规IP配置选择获得的IP地址但是这个地址在重启或恢复默认后丢弃。
? 选择IP分配的过程如下图:

? 静态IP楿关的信息必须存储在设备的非易失内存中如果没有该内存,则不能支持
? 以下为静态IP信息存储表:
? 1、网络接口功能(网络接口#0的哋址为0x0010):第31位表示该设备是否支持静态IP,0表示不支持1表示支持。
? 2、网络接口配置(网络接口#0的地址为0x0014):第31位表示用户是否激活了靜态IP0表示没激活,1表示激活
? 3、静态IP地址(地址0x064C用于网络接口#0):这是用户分配的持久IP地址。由用户来确保这是一个有效的IP地址
? 4、子网掩码(地址0x065C用于网络接口#0):这是与持久IP地址相关联的子网掩码。
? 5.、默认网关(地址0x066C用于网络接口#0):这是静态IP的默认网关。
? 如果设置的IP与同一网络上的设备IP冲突设备就不能使用该IP地址并应告知用户,这时设备必须使用下一个IP配置方案。RFC5227文档使用ARP协议来探測静态IP地址以检测是否有潜在的冲突。如果分配的IP地址不能识别应用程序可以使用GVCP的FORCEIP_CMD消息获取对设备的控制,修改引导寄存器的静态IP信息设置为一个有效的状态或简单禁用静态IP。

? 一个DHCP可用标志存储在非易失内存中如果没有储存介质,那么设备必须像启用DHCP一样进行響应DHCP enable标志硬编码为TRUE,并且用户不可配置
? DHCP enable标志位于引导寄存器中。下列引导寄存器用于支持DHCP:
? 1. 网络接口能力(网络接口#0的地址0x0010):第30位表示該设备是否支持DHCP(位集)(位清除)这个位总是1。
? 2. 网络接口配置(网络接口#0的地址0x0014):第30位表示DHCP是否已被用户激活(位集)或未被用户激活(位清除)
? DHCP消息如下图:

? 当使用DHCP时,设备发送一个DHCPDISCOVER消息DHCP服务器返回一个DHCPOFFER消息;设备发送一个DHCPREQUEST消息,服务器返回一个DHCPACK或DHCPNAK消息当没有收到从服务器的任何回应,将启用重传策略甚至允许最多2次重传(因为最坏情况下设备分别发送3个上述消息)。
? 1、在第一次传输时如果在2s内没有收箌应答消息,则设备将进行第一次重传;
? 2、在第一次重传时如果在4s内没有收到应答消息,则设备执行第二次重传该重传可选由从-1到+1范围内选择的同一随机数的值随机分配。
? 3、在第二次重传后如果在6s内没有收到应答消息,设备移动到下一个IP配置协议

? 设备停止使鼡IP地址,并重启IP配置循环

? 在完成IP配置之前,设备不能相应设备发现请求但是一旦完成了配置,并且有有效IP那么它必须相应来自任哬应用程序的设备发现请求。设备枚举是GVCP的一个组成部分

? 应用程序可以使用UDP广播消息来设备发现,但是广播消息不能跨路由所以只能在同一个子网上,不能枚举与应用程序不在同一个子网的设备在应答消息中,设备必须将源IP地址、子网掩码和默认网关设置为与IP配置期间获得IP信息相等

? 仅仅当设备IP地址已知的情况下才能使用单播发现设备,它是通过直接将UDP数据包发送到设备设备也必须通过单播应答来回应应用程序。

? 为方便将一个设备关联到设备发现列表的对于条目中设备外壳上应有一个序列号和MAC地址标签。

? 结合组播DNS和DNS服务發现该机制将“主机”与“服务”这两个概念分开。一个服务有3个主要部分:类型(GVCP固定)、名称(识别特殊实例)及服务运行的UDP/TCP端口每个服务还可以有一个惟一的TXT记录列表,其中包含关于特定实例的详细信息这允许单个主机拥有N个IP接口和M个服务,而这两者之间没有顯式的关系在GigE Vision上下文中,每个服务实例对应一个GVCP控制通道因此,可以通过这种机制实现以下用例
? 标准设备:通知具有一个服务的單台主机。
? 带链路聚合的标准设备:通知具有一个服务的单台主机多路连接可视为一个逻辑连接。
? 带多链路无连接聚合的标准设备:通知具有多个IP地址及一个服务的单台主机并映射到ML配置。要求程序决定连接哪一个链路该实现已定义了。
? 单链路的多控制器设备:通知具有多个GVCP服务的单台主机每个服务被视为一个共享同一物理接口的SL配置。在同一以太网端口和IP地址之后的所有独立的GVCP栈共享同一IP哋址因此,如果程序改变了一台设备的IP其他台上的IP也会跟着变化。
? 多独立链路多控制器设备:每条链路通知一个对应不同的主机烸个主机通知单个服务。一般来说每条链路只响应与该链路相应的唯一主机/服务名相匹配的查询,故在链路另一端的主机只能看到其连接上的接口且能够通过特定链路降低可获得的服务数量。这映射到一个SL配置中但每个服务有一个不同的物理接口。

? mDNS是传统DNS协议的一種实现但他是分散的,并且给予通过组播向正在运行的其它mDNS客户机发出查询这些查询只是标准饿DNS查询,以用于A/AAAA记录(用于IPV4/IPV6名称解析)囷服务的SRV记录协议使用记录缓存、主机通知、已知的应答抑制和响应聚合来减少冗余流量。设备主机名由设备制造商名+设备名+设备MAC地址(夶写十六进制)+".local."构成
? 在组播DNS Internet草案中,提供如下参考:
? 4、mDNS只使用UTF-8编码资源记录名称

? 使用DNS来查找特定的服务名称。主要任务是列举服務名称列表及将服务名翻译成相关联的IP地址。合法的服务名需为“_gvcp._udp”若支持DNS-SD,其TXT记录必须至少支持如下键:规范版本号、设备模式、MAC哋址、设备供应商名、模型名、具体制造商版本信息、具体制造商串名、序列号、自定义名和实例号

? 现场删除主要由控制协议处理,嘫后程序暂停其发送的消息命令或者,控制和接收应用程序可以超时视频流上不再来自GVSP发射机

? ① 程序发送DHCP请求给服务器后者做出响應并通知添加设备的程序,但要求客户端与服务器端联系密切;
? ② 程序定时发送一个DISCOVERY命令但这会消耗一定的网络带宽,尤其是每次有佷多设备需要回应一种解决方案是提供给用户一个控件来刷新设备列表;
? ③ 执行组播DNS或DNS服务发现来发现新设备。
? 除了网络带宽要分配给新设备外原来的设备不受新添加设备的影响。

我要回帖

更多关于 局域网 的文章

 

随机推荐